구글스프레드시트 스크립트 Google Spreadsheet Script – 한 시트의 특정 영역을 다른 시트 첫 열에 밀어넣어 이동하기
구글스프레드시트를 이용해서 특정열을 상단 첫 열에 밀어넣고 싶어하는 기능이 필요했습니다. 같은 시트안에서 하단에 몇 열을 복사해서 마우스로 첫 열에서 오른쪽 버튼을 누르면 “밀어넣기” 뭐 그런 메뉴가 떠야하는데 없어서 당황이 되었습니다. 키로 복사하기, 붙어넣기 하면 밀어 붙어넣기가 아니라 덮어쓰기가 되어서 불편합니다. 찾아보니깐 이때에는 마우스로 먼저 열을 선택하고, 드래그해서 원하는 부위에 가져가면 그냥 밀어서 붙어넣기가 되네요.
마우스로 한 시트에서 밀어 붙이기
위 그림처럼 열을 먼저 선택을 하고, 해당 열의 Header에서 마우스로 드래그해서 원하는 부분으로 넣으면 됩니다.
스크립트(Script)를 이용해서 한시트에서 다른 시트로 복사하기
What to do – 상황설명 : 구글스프레드시트 주식 매매관리
시트에서 선택박스에 마우스를 클릭하면(버튼을 만들면 해당 열을 인식하는 작업이 쉽지 않아서) 클릭한 열을 기준으로 다음의 회색라인 전까지를 자동으로 영역지정을하고, 이 부분을 다른 시트지의 제일 상단에 넣는 것입니다. 구글 스프레드시트를 가지고 작업을 하다보면 이런 기능이 필요한 경우가 많을 겁니다. 한 시트에서 최근 것을 기록하고, 완료가 되면 다른 시트지에 log 차원으로 집어 넣고, 통계를 내고 싶을 테니깐요.

시트명: 현재거래종목
위에서 처럼 처리 행에서 체크박스를 데이터확인으로 넣습니다. 그리고 클릭을 하면 아래와 같이 다른 시트에 상단에 넣고 싶습니다.

시트명: 매매일지
여기에서는 첫번째 열이 아니고, 2번째 열에 밀어넣기가 됩니다.
How to do – Script에 아래 와 같이 넣는다.
다만 사용자 함수는 따로 파일을 만들어서 넣는다.
코드
// 전역변수들 var sp = SpreadsheetApp.getActiveSpreadsheet(); var ss = sp.getActiveSheet(); var activeCell = ss.getActiveCell(); var cellValue = activeCell.getValue(); function onEdit(){ // 현재거래종목에서 매매일지로 복사 // 현재 시트에서 체크박스가 있는 행과 열에 변화가 있는지 감시 if(activeCell.getColumn() == 14 && activeCell.getRow() > 1 && ss.getSheetName() == '현재거래종목'){ // 체크박스가 선택이 되었다면 if(cellValue == true) { //******** 선택한 영역 복사 *********** // 체크박스의 열의 위치를 구하고, var aRow = activeCell.getRow(); //대략적인 선택영역을 선택한다. 한 섹션이 10 열을 넘지 않기때문에 10개로 했다. var sectionRange = ss.getRange(aRow+1,1,10,10); //위 영역을 이용해서 색깔 코드를 배열로 담는다. var rowColors = sectionRange.getBackgrounds(); //사용자 함수를 이용해서 다음 회색(#f3f3f3) 값이 몇번째 오는 가를 찾는다. var aSection = getSection(rowColors); // 실제 Data가 들어가서 복사할 섹션전체를 담는다. var aRange = ss.getRange(aRow,1,aSection+1,10); // 복사를 할 시트지를 선택하고, var stockLog = sp.getSheetByName("매매일지"); // 2번째 행에서 섹션열 만큼 빈 행을 먼저 넣는다. stockLog.insertRowsBefore(2, aSection+1); // 영역을 복사하는데, 규칙이나 수식등이 있으면 따라가기때문에 값만 먼저 넣고, aRange.copyTo(stockLog.getRange(2,1,aSection+1,10),SpreadsheetApp.CopyPasteType.PASTE_VALUES,false); // Format를 붙어넣기 한다. aRange.copyTo(stockLog.getRange(2,1,aSection+1,10),SpreadsheetApp.CopyPasteType.PASTE_FORMAT,false); // 기존시트지에서 해당 행 모두를 삭제 ss.deleteRows(aRow,aSection+1); } } } //// 사용자 함수는 파일을 따로 만들어서 호출하도록 한다. function getSection(input) { var aSection = 5; // 기본 섹션 열 값 for(var r = 0; r < input.length; r++) { //Logger.log(input[r][0]); if(input[r][0] == "#f3f3f3") { aSection = r; return aSection; } } return aSection; }
방법을 찾아보면서 많이 배웠습니다. 스크립트로 해놓으니깐 많은 수작업들을 좀더 변하게 작업을 할 수 있게 되었습니다.
TIP: 만약에 Undo를 하고 싶다면,Ctr+Z를 누르면 복사 이전으로 한단계식 돌아갑니다.
차로여행 구글스프레드시트 다른 링크
구글스프레드시트에 아이콘 Awesome Font 복사해서 넣기
구글스프레드시트 레퍼런스
https://developers.google.com/apps-script/reference/spreadsheet