본문 바로가기

구글 오피스/앱 스크립트

구글 앱 스크립트, 간단한 더하기 빼기 구현, 스크립트 할당 버튼 만들기(사칙연산)

728x90

구글 앱 스크립트를 이용하면 많은 일들을 쉽게 할 수 있지만 특히, 단순 반복적인 업무를 쉽게 할 수 있습니다. 아래는 가장 간단한 형태의 스크립트 작성 예 입니다.

간단한 사칙연산 매크로

버튼을 클릭하면, 범위(C1:C2)의 숫자가 증감 되는 매크로입니다.

[ 매크로 작성하기 ]

var sheet=SpreadsheetApp.getActive().getActiveSheet();
var getRng=sheet.getRange('C1:C2');

function plusOne(){
    getRng.setValue(getRng.getValue() + 1);    
}

function minusOne(){
    getRng.setValue(getRng.getValue() - 1);     
} 

1. 메뉴에서 도구 > 스크립트 편집기로 들어가 Code.gs 파일에 아래 스크립트를 복사 / 붙여 넣기 해줍니다.

2. 프로젝트 저장을 클릭 하여 매크로를 저장 해줍니다

[ 설명 ]

1. 'sheet' 변수에 스프레드시트 앱에 현재 액티브 된 시트를 넣어줍니다.

var sheet=SpreadsheetApp.getActive().getActiveSheet();

2. 'A1' 셀에 값을 변수에 넣어줍니다.

var getRng=sheet.getRange('C1:C2');

3. 'plusOne()' 이라는 범위의 값에 1을 더 해주는 함수를 만들어 줍니다.

function plusOne(){ getRng.setValue(getRng.getValue() + 1); }

4. 'minusOne()'이라는 범위의 값에 1을 빼주는 함수를 만들어 줍니다.

function minusOne(){ getRng.setValue(getRng.getValue() - 1); }

5. 아래와 같이 버튼을 만들어서 '스크립트 할당'을 마치면 완성~! +, - 를 클릭하면 범위에 있는 숫자가 증감 됨을 확인 할 수 있습니다.

 

모바일에서는 그림에 스크립트 할당이 아직 지원 되지 않으므로 세모 그림을 탭해도 함수가 실행되지 않아서, '체크박스'를 이용하여 구현하였습니다.(체크박스 탭 = 그림 클릭!)

function onEdit(e){
  const rg = e.range;
  if(rg.getA1Notation() === "B2" && rg.isChecked() && rg.getSheet().getName() === "Sheet1"){
    plusOne();
    rg.uncheck();
  }
  
  if(rg.getA1Notation() === "D2" && rg.isChecked() && rg.getSheet().getName() === "Sheet1"){
      minusOne();
      rg.uncheck();
  }
}

선택한 셀에 대해서 사칙연산( + - * / )이 가능한 함수입니다. 특정셀이 아니라 선택한 각각의 셀에 대해서 입력 한 값에 대한 사칙연산을 처리해줍니다.

function onEdit(e){
  const rg = e.range;
  if(rg.getA1Notation() === "F1" && rg.isChecked() && rg.getSheet().getName() === "Sheet1"){
    plusOne();
    rg.uncheck();
  }
  
  if(rg.getA1Notation() === "G1" && rg.isChecked() && rg.getSheet().getName() === "Sheet1"){
    minusOne();
    rg.uncheck();
  }
}

해결 방법은 선택한 셀 범위(레인지)의 값을 구한 다음 연산을 거친 후 다시 값을 범위에 지정해줍니다.

사용방법은 아래 함수에서 빨간색 연산 부분을 계산하고 싶은 값으로 바꿔주면 됩니다.

if( currentValue == "제외"|| currentValue == "#N/A") 부분에서는 셀에 '제외', '#N/A' 값인 경우 연산하지 않게 설정합니다. 특정한 값일 경우 연산을 배제 할 경우 넣어줍니다.

[ 사칙연산 입력 예, +50, -5, *15, *100] var currentValueMan = currentValue*1 +1; ]

function man4Selection() 
{
  var range = SpreadsheetApp.getActive().getSelection().getActiveRange();
  var numRows = range.getNumRows();
  var numCols = range.getNumColumns();
  var valuesToSet = [];

  for (var i = 1; i <= numRows; i++) {
    for (var j = 1; j <= numCols; j++) {

      var currentValue = range.getCell(i,j).getValue();
      
      // 아래 +1 부분에 사칙연산 입력 예, +50, -5, *15, *100
      var currentValueMan = currentValue*1 +1;     
    
      Logger.log(currentValueMan);

        if(  currentValue == "제외"|| currentValue == "#N/A") 
        {
         //  제외, #N/A 값이 포함되어 있으면 실행하지 않음
        }
       else
       {
         // 범위를 값으로 변경 후 값을 배열로 바꿈
         //range.getCell(i,j).setValue(currentValue);

          valuesToSet.push([range.getCell(i,j),currentValueMan])
       }
    }
  }
  // 배열에 넣은 값 입력
  for(var rng in valuesToSet)
  {
    valuesToSet[rng][0].setValue(valuesToSet[rng][1]);
  }  
}

선택 셀 연산 함수 man4Selection()

728x90