[GAS]GASでセルに式を入力しよう

formulaEffectiveGoogleAppsScript

どうも。つじけ(tsujikenzo)です。今日は単発で「GASでセルに式を入力しよう」をお届けします。

この記事は、#Effective GoogleAppsScriptタグがついております。

今日のアジェンダ

  • 残高を計算したい
  • appendRow()メソッドで追加する
  • setValue()メソッドで追加する
  • setValues()メソッドで追加する

今日の記事は、こちらのスプレッドシートのセルアドレスリテラル考察を読んでいただけると、より知識が深まると思います。

残高を計算したい

スプレッドシートを使っていて、「前日の残高に今日の収入を足して、今日の支出を引いた残高を表示したい」ということがあると思います。 

ARRAYFORMULA関数をセルに入力する方法もありますが、こちらGASブログでございます。GASでセルに式を入力してみましょう。

appendRow()メソッドで行を追加する

「新しい行データが発生したら、最終行に追加したい」というときは、appendRow()メソッドが使えます。

新しい行の残高は、常に、1つ上の行の残高を参照します。 

このように、「現在地の1つ上」のようなセルを指定するばあいは、相対参照であるR1C1Notationが便利です。

R1C1Notationは、セルアドレスリテラルには使えませんので、INDIRECT関数と組み合わせて記述します。

内側(R1C1Notation)をダブルクォーテーションで、外側(式全体)をシングルクオーテーションで挟むのがポイントです。※逆にするとエラーになります。

function myFunction() {
  const sheet = SpreadsheetApp.getActiveSheet();
  const value = [100, 90, '=INDIRECT("R[-1]C[0]",false)+INDIRECT("R[0]C[-2]",false)-INDIRECT("R[0]C[-1]",false)'];
  sheet.appendRow(value)
}

このように、セルに数式が入力されます。 

setValue()メソッドで追加する

setValue()メソッドでセルに式を入力すると、INDIRECT関数を省略できます。

function myFunction() {
  const sheet = SpreadsheetApp.getActiveSheet();
  const value = [100, 90, '=R[-1]C[0] + R[0]C[-2] - R[0]C[-1]'];

  for (let i = 0; i < value.length; i++) {
    sheet.getRange(7, i + 1, 1, 1).setValue(value[i]);
  }
}

このように、セルアドレスとして、式が入力されています。 

これは、公式リファレンスに記載されているとおり、「setValue(s)()メソッドに=が含まれる値を渡すばあいは、formulaとして解釈しますよ」という仕様によるものです。 

setValues()メソッドで追加する

GASで行データをスプレッドシートに追加するさいは、for文をまわしたりしません。

行データは2次元配列に加工して、setValues()メソッドでいきましょう。

function myFunction() {
  const sheet = SpreadsheetApp.getActiveSheet();
  const value = [[100, 90, '=R[-1]C[0] + R[0]C[-2] - R[0]C[-1]']];
  sheet.getRange(sheet.getLastRow() + 1, 1, value.length, value[0].length).setValues(value);
}

まとめ

以上で、「GASでセルに式を入力しよう」をお届けしました。

関数大好きなあなたも、ぜひGASにチャレンジしてみてくださいね。

ノンプログラマーのためのEffectiveGoogleAppsScript

タイトルとURLをコピーしました