[GAS] カスタム関数に範囲指定の引数を与える

Google Spreadsheet の GAS(Google Apps Script) でカスタム関数を作成するとき、以下の3とおり考えられます。

  1. Test("ABC")
    直接文字列を指定する場合、式などもこちら
  2. Test(A2)
    単一のセルの場合
  3. Test(A2:A3)
    範囲指定する場合

まず 1.Test("ABC") について、関数内ではそのまま値として与えられます。

次に 2.Test(A2) について、セルに格納されている値がそのまま与えられます。1.と同じです。

3.Test(A2:A3) ですが、関数には2次元配列で与えられます。以下のようにしてログ吐き出しするとわかります。

function Test(_range) {
    Logger.log(JSON.stringify(_range));
}

サンプルでこれほど簡単なものはないでしょう。範囲内のセルを"1"にする関数です。戻り値は2次元配列のまま返すと同じ範囲の部分に値が入ります。

function FillOne(_range) {
    var rng = _range;
    if (!(rng instanceof Array)) { //配列ではないものを配列に変換
        rng = [[rng]];
    }
    return rng.map(function (_row) { //行単位の処理
        return _row.map(function (_cell) { //セル個別処理
            return 1;
        });
    });

値を返す時、2次元配列のまま返せば、ArrayFormulaを使うときに便利です。

ArrayFormula(Test(A2:A3))