GoogleAppsScript(GAS)のsetValueメソッドは、スプレッドシートのセルに値の入力や一括書き込みをすることができます。
記事内ではsetValueとsetValuesメソッドの違いや使い方を説明しています。
この記事で解決できること
setValue/setValuesメソッドとは?
Google Apps Script(GAS)を使用する際に、スプレッドシート内のセルに値を設定するための重要なメソッドが「setValue」と「setValues」です。
これらのメソッドを使うことで、単一のセルや複数のセルに対して効率的に値を設定することが可能となります。
- setValueメソッド:単一のセルに対して値を設定する際に使用されます。
- setValuesメソッド:2次元配列を用いて複数のセルに一括で値を設定するために利用されます。これにより、大量のデータを高速かつ効果的にセルに入力することができます。
1次元配列と2次元配列の違い
2次元配列とは行と列の組み合わせによってデータを表現する手法です。
例えば、スプレッドシートのセルを考えてみましょう。
スプレッドシートはセルが行と列で構成されており、それぞれのセルにデータが入力されています。
このとき、1次元配列では一列または一行のデータを取得できますが、2次元配列を使うと複数の行と列にまたがるデータを効率的に取得できます。
例を挙げて説明すると、以下のようになります:
1次元配列の形
[データ1, データ2, データ3]

2次元配列
2次元配列は行と列の組み合わせによってデータを表現する手法です。スプレッドシート内の表や行列の概念に近く、データの整理や操作に幅広く活用されます。

[
[データ1, データ2, データ3],
[データ4, データ5, データ6]
]
この後説明をしていきますが、setValuesでは2次元配列の形でないとエラーが発生しますので、配列ごとの構造の違いを理解しておきましょう。
1行のデータを2次元配列と1次元配列で表したときの違いは以下の通りです。
// ■1行のデータを2次元配列で表す
[[データ1, データ2, データ3]] // 入れ子が二重構造
// ■1行のデータを1次元配列で表す
[データ1, データ2, データ3] // 入れ子が一つ
setValue()の使い方
setValueメソッドは、スプレッドシート内の特定のセルに値を設定するための重要な機能です。このメソッドを使うことで、プログラムを通じてセルに変数などのデータを効果的に入力することができます。
setValueメソッドでは、どのセルに値を入力するのか指定する必要があります。
そこで必要となるのが、getRangeメソッドです。
getRangeについて、学習中の方はぜひこの記事を読んでください。

シンプルな値の設定

シンプルな値の設定では、特定のセルに値を直接設定します。これにより、セルに指定したデータが直接入力されます。
// 特定のセルに値を設定する例
function setValueExample() {
let sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
let cell = sheet.getRange('C2'); // 設定したいセルの範囲を指定
cell.setValue('オレンジ'); // セルに値を設定
}
変数を使った値の設定
変数を使った値の設定では、プログラム内で作成した変数に値を入れて、それをセルに設定します。これにより、柔軟なデータ入力が可能となります。
// 変数を使用して値を設定する例
function setValueWithVariable() {
let sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
let valueToSet = '動的な値';
let cell = sheet.getRange('B2'); // 設定したいセルの範囲を指定
cell.setValue(valueToSet); // 変数から値を取得してセルに設定
}
setValues()の使い方
setValuesメソッドは、スプレッドシート内の複数のセルに一括で値を設定するための重要な機能です。
このメソッドを使うことで、効率的に大量のデータをセルに入力することができます。
setValues()では1行分だけ値を入れる場合でも
二次元配列の形にしないとエラーになるので注意!
■A1-A4のデータ(1次元配列の形)
let array = [ A1 , A2 , A3, A4 ];
■A1-A4のデータ(2次元配列の形)
let array = [[ A1 , A2 , A3, A4 ]];
のようになります。
2次元配列を使った値の一括設定

setValuesメソッドでは、2次元配列を使用して複数のセルに同時に値を設定します。行と列の組み合わせで値を配置することで、簡単に一括でデータを入力することができます。
// 2次元配列を使用して値を一括設定する例
function setValuesExample() {
let sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
let valuesToSet = [
['イチゴ', 'ブドウ', 'オレンジ'],
['スイカ', 'メロン', 'キウイ'],
]; // セルに入れたい値を2次元配列で準備
let cells = sheet.getRange('A1:C2'); // 値を入れたいセルの範囲を指定
cells.setValues(valuesToSet); // 2次元配列の値をセルに一括設定
}
よくある質問
セルに数値や文字列以外の画像やチャートなどの非テキストデータを設定できますか?
いいえ、setValueメソッドはセルに数値や文字列以外のデータを直接設定することはできません。
setValueメソッドは、セルに文字列や数値を設定するために使用されますが、画像やチャートなどの非テキストデータをセルに直接挿入することはできません。
セルのフォーマット(数値、日付などの特定の書式)はsetValueで保持されますか?
いいえ、setValueメソッドを使用してセルに値を設定する際、セルのフォーマット(数値や日付などの書式設定)は保持されません。
setValueメソッドは単純にセルに指定した値を設定するだけであり、セルの元々のフォーマットを維持する機能はありません。
例えば、セルのフォーマットが日付である場合でも、setValueメソッドを使用して値を設定すると、そのセルは単なる文字列として扱われ、元々の日付フォーマットは失われます。
セルのフォーマットを保持したまま値を設定したい場合、適切なフォーマットを再設定する必要があります。
日付フォーマットを保持したまま日付を設定するには、setNumberFormatメソッドを使用してセルのフォーマットを設定する必要があります。
function setDateValueWithFormat() {
let sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
let cell = sheet.getRange('A1');
let dateValue = new Date(); // 今の日付を取得
cell.setValue(dateValue);
cell.setNumberFormat('yyyy/mm/dd'); // セルのフォーマットを設定
}
最後に
この記事では、setValueやsetValuesメソッドを使用してスプレッドシートのセルに値を設定する方法について詳しく解説しました。
セルに値を設定する際の基本的な使い方から、変数を用いた動的な値の設定、配列を使った一括設定、さらにはセルのフォーマットやスタイルの適用方法までを学びました。

