Google Apps ScriptでgetRangeの範囲をSUM関数のように計算する方法

SUM関数のように計算する方法

Google Apps Script(以下GAS)でgetRangeの範囲をSUM関数のように計算したいことがある。

例えばこのようなシート上でA1:B3の合計値を計算したい場合は=SUM(A1:B3)で簡単に計算できるがGASはSUM関数を直接使用して計算できないため、自分で計算式を作成する必要がある。
シート上でA1:B3の合計値を計算したい場合は=SUM(A1:B3)で簡単に計算できるがGASはSUM関数を直接使用して計算できない

SUM関数のように計算式

GASでgetRangeの範囲をSUM関数のように計算する計算式は以下のようになる。

function myFunction() {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheet = ss.getActiveSheet();
  var col = 2;
  var total = sheet.getRange(1, 1, 3, col).getValues().reduce(function(a, c) {
    var tmp = 0;
    for (var i = 0; i < col; i++) {
      if (+c[i]) tmp += c[i];
    }
    return a + tmp;
  }, 0);
  Logger.log(total); // => 10
}

getValues()で取得した値は2次元配列になるため、reduceを使用している内部でさらにforでループさせて加算を行うことでSUM関数と同じ結果を出せるようになる。