みなさんこんにちは。zak-papaです。
前回はGASで「スプレッドシート」を操作するための「ワークブック」「ワークシート」「セル範囲」の取得方法について説明しました。

GASで「スプレッドシート」を操作するには上記の3ステップを踏む必要がありましたね。
今回は、セルの「値を取得」したり、「値を入力」したり、基本的な操作方法についてお伝えしていきますので最後までよろしくお願いします。
目次
「1つのセル」を操作してみよう
「1つのセル」の値の取得・入力にはそれぞれ次のメソッドを使用します。
また、基本的に取得は「get」・入力は「set」を使うというのも覚えておくと良いかと思います。他のメソッドでも似たような形を取っています。
- 「getValue」メソッドでセルの値を「取得」
- 「setValue」メソッドでセルの値を「入力」
前回と同じこちらの「酒のおつまみ」スプレッドシートを使っていきます。
それでは順に操作方法を見ていきましょう。
セルの値を「取得」する
まずはセルの値を「取得」してみましょう。
1つのセルの値を取得するときに使うのが「Range」クラスの「getValue()」メソッドです。
前回お伝えした通り、3ステップ目の「セル範囲」まで取得(変数「sheet」「range」にそれぞれ格納)した上で「セルの値」を取得しています。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
function getCell() { var sheet = SpreadsheetApp.getActiveSheet(); // セル範囲をA1表記で取得する var range = sheet.getRange("A2"); Logger.log(range.getValue()); // ビール // セル範囲をR1C1表記で取得する var range = sheet.getRange(2, 1); Logger.log(range.getValue()); // ビール } |
どちらの表記でも「ビール」を取得できましたね。
セルに値を「入力」する
続いてセルに値を「入力」してみましょう。
1つのセルに値を入力するときに使うのが「Range」クラスの「setValue()」メソッドです。「setValue()」の引数に入力したい「値」を指定します。
では、今回はログに出力ではなく、先ほどのシートの続き(5行目)に入力してみましょう。
こちらも同じようにそれぞれ「セル範囲」を取得した上で「セルの値」を入力しています。ちなみに「C5」「D5」セルについてはR1C1表記にしてみました。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
function setCell() { var sheet = SpreadsheetApp.getActiveSheet(); // それぞれセルの範囲を取得して値を入力 var range1 = sheet.getRange("A5"); range1.setValue("ポテト"); var range2 = sheet.getRange("B5"); range2.setValue(250); var range3 = sheet.getRange(5, 3); // C5 range3.setValue(4); var range4 = sheet.getRange(5, 4); // D5 range4.setValue("=B5*C5"); } |
上記を実行すると下記のように無事5行目に指定した値4つが入力されましたね。
スプレッドシートとスクリプトエディタを横に並べて操作していくと見易くていいかもしれません。
「複数のセル」を一括で操作してみよう
続いて、「複数のセル」の操作について見ていきましょう。
「複数のセル」の値の取得・入力には次のメソッドを使用します。
①と②を見て気づいたかと思いますが末尾に「s」がついて「複数形」になっていますね。
- 「getValues」メソッドで複数のセルの値を「取得」
- 「setValues」メソッドで複数のセルの値を「入力」
- 「appendRow」メソッドで複数のセルの値を「入力」
複数のセルの値を一括で「取得」する
まずは、「A2」から「D3」までの「ビール」と「チーズ」の行の値を「取得」してみましょう。
複数のセルの値を取得するときに使うのが「Range」クラスの「getValues()」メソッドです。取得する範囲を変えて「getValues()」と「複数形」にすればいいですね。
コードはこちら。ログに注目してみてください。何やら変な構造になっていますね。
1 2 3 4 5 6 7 8 9 |
function getCell() { var sheet = SpreadsheetApp.getActiveSheet(); // 複数のセルの範囲を取得 var range = sheet.getRange("A2:D3"); Logger.log(range.getValues()); } |
ログについてですが、まずは数字が「100.0」のように小数点以下まであるということ。これはログに出力される場合にこのように表示されているだけなのであまり気にする必要はありません。
もう1つは、[ [ ビール, ・・・ ], [チーズ, ・・・] ] という形です。こちらは「二次元配列」と呼ばれるもので配列の中にさらに配列が入っている状態です。
「二次元配列」についてはこちらの記事をご確認ください。

見やすいように整形してみると、「行ごと(行×列)」に左から順に「配列」に格納されているんですね。このように複数のセルの値を取得する場合は「配列」で扱うことになります。これはデータを入力する場合も同じです。
[ビール, 100.0, 1.0, 100.0], [A1, A2, A3, A4]
[チーズ, 150.0, 2.0, 300.0] [B1, B2, B3, B4]
]
前回の記事で「getDataRange」メソッドについてお伝えしました。
【GAS】スクリプトエディタからワークブック、ワークシート、セル範囲を取得してみよう
これは、A1からデータのある最終行、最終列までのセル範囲を自動で取得するメソッドでした。
なので、先ほどのセル範囲(A2:D3)を「getDataRange」に変更すると、データのあるA1からD5までのセルの値を「二次元配列」で取得することができます。
1 2 3 4 5 6 7 8 9 |
function getCell() { var sheet = SpreadsheetApp.getActiveSheet(); // 複数のセルの範囲を自動で取得 var range = sheet.getDataRange(); Logger.log(range.getValues()); } |
複数のセルに値を一括で「入力」する①
続いて、複数のセルに値を一括で「入力」してみましょう。
複数のセルに値を一括で入力するときに使うのが「Range」クラスの「setValues()」メソッドです。「setValues()」の引数に入力したい「値」を「配列」で指定します。
今回もログ出力ではなく、スプレッドシートに一括で入力してみましょう。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
function setCell() { var sheet = SpreadsheetApp.getActiveSheet(); // セルの範囲を取得 var range = sheet.getRange("A6:D7"); // 入力する値を変数「values」に代入 var values = [ ['焼き鳥', 100, 5, '=B6*C6'], ['だし巻き卵', 500, 2, '=B7*C7'] ]; range.setValues(values); } |
無事「A6」から2行分入力ができましたね。
先ほどの例では「8つ」のセルに対して値を入力しました。
これを「setValue」メソッドで1つずつ処理するのは面倒ですよね。また、コードも増えて見にくくなり、アクセス回数も増えて処理時間も遅くなります。(このくらいのデータ量であれば処理時間にあまり差はないですが)
「setValues」メソッドのように「配列」で操作することでコードも少なくなるし、アクセス回数も減って処理時間も大幅に短縮されます。データ量が増えてくるとその恩恵が得られると思います。
このようにGASでは「配列」の扱いが非常に大事になってくるのでしっかりと覚えておきましょう。
複数のセルに値を一括で「入力」する②
複数のセルに値を一括で入力する2つ目の方法は、「Sheet」クラスの「appendRow()」メソッドです。「appendRow」の引数に入力したい「値」を「配列」で指定します。
「appendRow」メソッドは「セル範囲」を指定しなくてもデータの「最終行」を自動で判断して、その次の行に1行ずつ順に入力を行ってくれる便利なメソッドです。
こちらもログ出力ではなく、スプレッドシートに入力してみます。先ほど入力した「焼き鳥」と「だし巻き卵」の行を一旦削除して実行してみてください。
1 2 3 4 5 6 7 8 9 10 11 12 |
function appendCell() { var sheet = SpreadsheetApp.getActiveSheet(); // 入力する値(配列)をそれぞれ変数に代入 var value1 = ['焼き鳥', 100, 5, '=B6*C6']; var value2 = ['だし巻き卵', 500, 2, '=B7*C7']; sheet.appendRow(value1); sheet.appendRow(value2); } |
1行ずつデータの「最終行の次の行」から順に2行分入力ができました。
「appendRow()」メソッドは、1つずつ処理する「setValue()」メソッドと比べると便利なメソッドですが、1行ずつ追加していくのでアクセス回数が「行数分」増え、複数行を一括で入力してくれる「setValues()」メソッドと比べると処理時間は遅くなります。
なので、小規模のデータの場合に使うようにして、大規模なデータを扱う場合は「setValues()」メソッドを使うと良いと思います。
※「appendRow()」メソッドのイメージ 。1行ずつの入力のためこれ以上データが増えると処理時間が遅くなります。
※「setValues()」メソッドのイメージ 。これ以上データが増えても一瞬で入力ができます。
データ量に応じて使い分けるのが良いでしょう。
終わりに
以上、「セルの値の取得・入力方法」についてお伝えしました。
ポイントは、セルを1つずつ扱うのではなく「配列」として扱うことでしたね。
「配列」として扱うことで、アクセス回数が減り処理スピードが格段と上がります。
GASでスプレッドシートを操作するための”キモ”となるためしっかりと復習しておきましょう。
以上となります。最後まで読んでいただきありがとうございました!