목적
구글 스프레드시트의 스크립트 편집기를 사용하여, 스프레드시트에서 사용하는 수식을 활용하고, 그 결과값을 시트에 적용합니다.
포스팅에서 다루는 새로운 코드
예제 1) 수식 입력 기본 문법
아래 이미지와 같이 왼쪽부터 3열까지 숫자 1, 숫자 2, 숫자 3이 있다고 가정하고, 네 번째 열에는 1~3번째 열에 입력된 숫자를 사용하여 "(숫자1+숫자2)*숫자3" 의 결과값을 반환하는 시트를 만들어 보겠습니다.
수식은 '숫자1'과 '숫자2'를 먼저 더하고, 이 값에 '숫자3'을 곱하는 것입니다.
이제 스크립트 편집기를 실행하여 코드를 아래와 같이 작성해 보겠습니다.
function myFunction() {
var ss = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
ss.getRange("D2").setFormula("=(A2+B2)*C2");
}
JavaScript
복사
스크립트
스크립트 실행 시, D2 셀에 "=(A2+B2)*C2" 수식의 결과값이 입력됩니다.
예제 2) 범위를 지정하여 수식 복제하기
이제 D2 셀에 적용된 수식을 바로 아래의 D3 셀부터 숫자가 입력된 범위 끝까지 적용해 보되, 이번에는 반복문 문법을 사용하지 않고 적용해 보겠습니다.
function myFunction() {
var ss = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
ss.getRange("D2").setFormula("=(A2+B2)*C2");
var lr = ss.getLastRow();
var fillDownRange = ss.getRange(2, 4, lr);
ss.getRange("D2").copyTo(fillDownRange);
}
JavaScript
복사
스크립트
스크립트 결과
스크립트 실행 자체에 오류가 있는 것은 아니지만, 뭔가 불만족스러운 결과가 있습니다.
스크립트를 적용하길 원하는 구간은 D3 셀부터 D8 셀까지 총 6셀에 D2 셀의 수식 결과를 반환하는 것이나, 스크립트가 숫자1 ~ 숫자3 이 입력되지 않은 9행까지 입력값을 받아 D2 셀의 수식 결과를 반환하여 D9 셀에 결과값 0이 입력된 것입니다.
D2:D8 범위에 적용하는 것이 목표이나, D9 셀까지 적용되었습니다.
이는 예제 2 스크립트에서 getLastRow() 메소드로 1행부터 시작해서 입력값이 있는 마지막 행인 8행의 위치를 변수 lr 로 반환했지만, 스크립트의 7번째 줄의 다음 코드로 인해 스크립트를 실행하면서 2행부터 9행까지 결과를 반환하여 생기는 문제입니다.
var fillDownRange = ss.getRange(2, 4, lr);
JavaScript
복사
D1 셀을 제외한 나머지 4열의 결과값을 제거하고, 코드를 다음과 같이 수정하여 다시 적용해 보겠습니다.
function myFunction() {
var ss = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
ss.getRange("D2").setFormula("=(A2+B2)*C2");
var lr = ss.getLastRow();
var fillDownRange = ss.getRange(2, 4, lr-1);
// lr 부분을 lr-1 로 대치하여 1열을 덜 받도록 합니다.
ss.getRange("D2").copyTo(fillDownRange);
}
JavaScript
복사
스크립트 (예제 2 스크립트 수정)
스크립트 결과. D2:D8 범위에 정상적으로 적용되었습니다.