EXCEL AND VBA님의 시트를 통합하는 매크로이다. 엑사남님 유튜브 강의를 보면서 공부했듯 VBA GAS 님의 강의를 리뷰하면서 성장해 나가려 한다.
![](https://t1.daumcdn.net/keditor/emoticon/friends1/large/002.gif)
시트를 통합하는 매크로는 VBA에서 많이 하는 형태이다.
시트를 통합하기 위해서는 메인시트를 제외한 모든 시트를 순환하면서 데이터를 가져오는것이 포인트이다.
각 데이터 시트마다 헤드값 + 데이터로 구성이 되기 때문에 헤드는 최초에 한번만 들어가야 한다.
if (first){ // 통합시트의 말머리를 가져오기 위한 작업
result = result.concat(sheets[i].getDataRange().getDisplayValues() );
first = false; // main시트가 아닌 첫 시트의 전부를 result에 담아라
}else{ // main시트가 아닌 두번째 시트면
코드를 설명하면 통합시트가 아닌 첫 데이터 시트가 들어오면 시트의 모든 데이터를 result 배열에 추가하라는 구문이다.
}else{ // main시트가 아닌 두번째 시트면
rngAll = sheets[i].getDataRange(); // 시트의 전체 내용을 rngall 에 담아라.
result = result.concat(rngAll.offset(1,0,rngAll.getNumRows()-1).getDisplayValues() );
// rngall에서 한행 내려오고 전제행의 길이를 줄인 전체값을 result 배열에 추가로 담아라
// 두번째 시트부터는 헤드값을 없애기 위한 작업
}
이 구문은 두번째 시트부터는 VBA에서 데이터 영역만 가져오기 위한 코드이다.
set rngAll = 영역
set rngall = 영역.offset(1).resize(rngall.rows.count-1,영역의 열길이)
더보기
function merge_sheets(){
//spreadsheet _ 엑셀에서 워크북
var wb = SpreadsheetApp.getActiveSpreadsheet();
//sheets
var sheets = wb.getSheets(); // worksheets
var result = []; // result 배열에 담기
var first = true;
var rngAll;
for(var i=0; i<sheets.length;i++){ // 시트들을 순환
if(sheets[i].getName() !== 'main'){ // 시트의 이름이 main이 아니면
if (first){ // 통합시트의 말머리를 가져오기 위한 작업
result = result.concat(sheets[i].getDataRange().getDisplayValues() );
first = false; // main시트가 아닌 첫 시트의 전부를 result에 담아라
}else{ // main시트가 아닌 두번째 시트면
rngAll = sheets[i].getDataRange(); // 시트의 전체 내용을 rngall 에 담아라.
result = result.concat(rngAll.offset(1,0,rngAll.getNumRows()-1).getDisplayValues() );
// rngall에서 한행 내려오고 전제행의 길이를 줄인 전체값을 result 배열에 추가로 담아라
// 두번째 시트부터는 헤드값을 없애기 위한 작업
}
}
}
wb.getSheetByName("main").getRange(1, 1).getDataRegion().clear(); // 기존값을 삭제
wb.getSheetByName("main").getRange(1, 1, result.length, result[0].length).setValues(result);
// main시트에 range(1,1).resize(배열의 행길이, 배열의 열길이[첫번째 값이 크기]) = result 배열을 담아라
}
https://docs.google.com/spreadsheets/d/1s5jSNL8CVRZIFG5XQOOdwFbbsX1wPIBWUuLk8lAUo8I/edit?usp=sharing
'GAS' 카테고리의 다른 글
[GAS] sheets데이터를 html 문서를 작성해보자 (0) | 2023.04.19 |
---|---|
[GAS] 중복없는 로또번호 만들기 (0) | 2023.04.17 |
[GAS] 시트 통합 && 필터링 (0) | 2023.04.04 |
[GAS] VBA 기초방 #9 [ 데이터 영역 선택하기 ] (0) | 2023.01.08 |
[GAS] `I'm ${name}` (0) | 2022.12.27 |
댓글