今回は、Googleスプレッドシートでセルに値を書き込む方法について解説します。この方法をマスターすると、
- 指定した1つのセルへの値の書き込み
- 複数のセル範囲への値の書き込み
これらをスクリプトで実現できるようになります。大量のセルに値を書き込むのを自動化させたい場合や、家計簿や勤怠などの集計の際には欠かせない関数です。なお、スプレッドシートとは何かについておさらいしておきたいという方は以下の記事をご参照ください。
getRangeしてsetValue(s)が基本
スプレッドシートのセルに値を書き込むには、getRange関数+setValue(s)関数を使います。
getRange関数というのは、セルを取得する関数です。詳細については以下の記事をご参照ください。
1つのセルに値を書き込む
1つのセルに値を書き込むには、setValue関数を使用します。

1つのセルに値をセットする
setValue ( 書き込む値※) ※数値、日付、文字列など
1つのセルの値のみを取得したい場合には、setValue(書き込む値)を使います。
1つのセルに値を書き込むサンプル
sheet.getRange(4,3).setValue("ここはC4です");

getRangeで書き込むセルを指定します。行(たて)→列(よこ)の順番で引数に指定します。行数・列数は1から数えます。今回はC4に値を書き込みたいので、縦に4・横に3、つまり、getRange(4, 3)となります。
指定したセルに対して、setValueで値をセットします。引数に指定した内容がセルに書き込まれます。
引数の型はObject型
setValueメソッドの引数には、文字列や数値などをそのまま入れることができます。しかし、厳密には、データの型は「Object型」を指定しています。

例えば、日付を引数に渡した場合、スプレッドシート上には文字列と変わりなく表示されていますが、データ型としてはDateオブジェクトになっています。
オブジェクト型とは、プロパティの集合体のことをいいます。プロパティというのは、そのオブジェクトの情報のことです。例えばDateオブジェクトであれば「曜日:水曜日」「時:22時」「文字列:”2023/03/08″」など、項目と値のセットをプロパティとして保持しています。
引数に指定する際にはあまり考えなくても良い部分ではありますが、スプレッドシートで日付を日付型として扱いたい、数値を計算できる形で格納したいという場合には頭の片隅に入れておくと良いかと思います。
複数のセルに値を書き込む
複数のセルに値を書き込むには、setValuesを使います。

複数のセルに値をセットする
setValues ( 書き込む値※) ※二次元配列
複数のセルに値を書き込むサンプル
let values = [
[1, "ここはC3です", "aaa"],
[2, "ここはC4です", "bbb"],
[3, "ここはC5です", "ccc"]
];
sheet.getRange(3, 2, 3, 3).setValues(values);

getRangeの引数は、行(たて)→列(よこ)→行数(たて)→列数(たて)の順で指定します。行数・列数は1から数えます。行・列には取得する範囲の開始セルを設定し、そこから何行分・何列分取り出すかを指定します。
今回の例では、3行目の2列目から範囲がはじまり、そこから3行・3列分が指定範囲となるため、getRange(3, 2, 3, 3)となります。
引数は二次元配列
指定したセルに対して、setValueで値をセットします。値は二次元配列で指定します。二次元配列といいうのは、スプレッドシートのように縦方向・横方向にインデックスを持つ配列のことです。

ふつうの配列(一次元配列)は、以下のようになります。
let array = [1, "ここはC3です", "aaa"];
しかし、二次元配列では、配列自体が配列の要素になっています。

やや複雑な印象を受けますが、まずは実際にセットしたい内容をスプレッドシート上で考えて、それを二次元配列に落とし込むと良いでしょう。
書き込む範囲と値の数が異なる場合はエラー
注意したいのが、指定した範囲とセットする値の数が異なる場合にはエラーになるということです。

getRangeで指定したセル範囲と、setValue(s)の引数が合っていない場合、エラーとなります。以下のスクリプトは1番目の要素の中身が不足しているためエラーになります。
let values = [
[1, "ここはC3です"],
[2, "ここはC4です", "bbb"],
[3, "ここはC5です", "ccc"]
];
sheet.getRange(3, 2, 3, 3).setValues(values);

応用:数式を引数にセットする
setValue(s)には、引数に数式をセットすることも可能です。
sheet.getRange(4,3).setValue("=SUM(A1:A)");
数式をダブルクォーテーションで囲んで文字列として渡すと、スプレッドシートのセルには数式として書き込まれます。

まとめ
Google Apps Script(GAS)でセルに値を書き込む関数「setValue」と「setValues」について解説しました。スプレッドシートを操作する関数が使えるようになると、家計簿管理や勤怠表など、表計算をする際に役立ちます。
当ブログでは、Google Apps ScriptやGoogleスプレッドシートを用いて作業効率化を図るアイディアを発信しています。今後も実用的で利便性の高いGASの使い方を提案していければと思っています!
コメント