【GAS初心者】はじめての変数(let文で変数を使う)

変数とは何か?

GASで処理を行うときに、よく出てくるのが「変数」です。

「変数」を使うと、値を一時的に記録し、後で読み出すことができます。

とりあえずは、次のようなイメージを持っておくといいでしょう。

  • 値を記入できる紙が入っている「箱」に「名前」が付いているもの
  • そのプログラム専用で使える「セル」に名前が付いているもの

要するに、「名前を付けて」、その「名前を使って」「値を読み書きできる」というのが、変数のポイントです。

数学でも「変数」という概念があります。ただ、数学の「変数」とプログラムの「変数」は全然別のもの、と考えておくほうが理解しやすい、という方が多いようです。

変数の使用例

実際に、変数を使う例を見てみましょう。

スプレッドシートのアクティブシートのA2セルに変数「data」の内容(=「3」)を設定する

function variableTest1() {
  let data;
  data = 3;
  SpreadsheetApp.getActiveSheet().getRange(2, 1).setValue(data);
}

このプログラムでは「data」という変数が使われています。

このプログラムを実行してみると、アクティブシートのA2セルに「3」と表示されます。

変数を使うときの流れ

変数を使うときには、次の順番で使います。

  1. 変数の名前を「定義」する
  2. 変数に値を「記録」したり、変数から値を「読込」する

ポイントは、変数を使う場合には、必ず、変数の名前を「定義」する必要があるということです。その後に、変数に値を「記録」したり「読込」をしたりすることになります。

たとえば、先ほどのプログラムでは、「data」という変数を使っています。そして、変数「data」の「定義」、「記録」、「読込」を、次の箇所で行っています。

「定義」

  let data;

「記録」

  data = 3;

「読込」

  SpreadsheetApp.getActiveSheet().getRange(2, 1).setValue(data);

以下、順番に説明していきます。

変数を「定義」する

変数を使うためには、まず、変数を「定義」します(変数を「宣言」するとも言います)。

「定義」

  let data;

先ほどの例では、この文で「data」という名前の変数を「定義」しています。

変数を「定義」することで、以下、このfunctionの中(※)で、「data」という名前で、値を「記録」したり、記録した値を「読込」むことができるようになります。

変数の「定義」の有効範囲は、変数を定義する「場所」により変わります。今回の例では、function文の直後で「定義」をしているので、function全体で、この変数が使えます。

変数に値を「記録」する

「記録」

  data = 3;

変数「data」に「3」という値を「記録」します。

GASでは「=」の記号を《右辺の値を左辺の変数などに「記録」する》意味の記号として使います

GASで出てくる「=」には「等しい」という意味はありません。普段の「=」記号のイメージは忘れて、新たな記号として覚えるのが、混乱しないコツです。

変数から値を「読込」する

以降のプログラム中で「data」と書くと、変数「data」の内容を読み込むことができます。

たとえば、下記の文では、setValueの括弧の中に「data」と書いているため、指定したセルに変数「data」の値を書き込む、という意味になります。

「読込」

  SpreadsheetApp.getActiveSheet().getRange(2, 1).setValue(data);

今回は、アクティブシートの2行1列目(=A2セル)に値を書き込もうとしていますので、A2セルに変数「data」の内容「3」が書き込まれることになります。

変数の「宣言」と「記録」を同時に行う

次のように書くと、変数の「宣言」と「記録」は同時に行うことができます。

「定義」+「記録」

  let data = 3;

「定義」(「let data」)と「記録」(「data = 3」)を同時に書ています。これで、変数の「宣言」をして、同時に値の「記録」をすることができます。

変数に値を「記録」しないで「読込」を行うと不具合の元になることが多いです。そのため、できるかぎり、変数の「宣言」と同時に、値の「記録」をするようにしましょう

このような、変数の「宣言」と同時に値の「記録」を行うときの「記録」のことを、変数の「初期化」といいます。

この書き方を使うと、プログラムの全文は、次のようになります。

「定義」「記録」を同時に行ったプログラム全文

function variableTest1() {
  let data = 3;

  SpreadsheetApp.getActiveSheet().getRange(2, 1).setValue(data);
}

当然、実行結果も、先ほどとまったく同じになります。