こんにちは!
Yuki (@yukibnb) です。
以前Google Apps Script(GAS)を使って「スプレッドシートのセル範囲や値を取得する方法」という記事を公開しました。
www.yukibnb.com
記事内では以下のメソッドを紹介しました。
- セル範囲を取得する: getRangeメソッド
- 値を取得する: getValuesメソッド
今回は「上記記事を読んだけどgetRangeとgetValuesの違いや使い方がいまいちよくわからない」という方向けに、getRangeとはそもそもどういうものなのかをやさしく図入りで解説します。
では見ていきましょう!
getRangeの基本
getRangeの公式
まずgetRangeの公式を見てみましょう。
括弧内の記述方法はいくつかありますが、便利なのは「行番号、列番号、行数、列数」を記入する方法です。
「行番号、列番号、行数、列数」以外の記述方法はこちらの記事をご覧ください。
getRangeとgetValuesの違い
例えば画像内の「売上表」シートのA2~E4セルのセル範囲を取得したい場合、このように記述します。
//アクティブなスプレッドシートを取得 var ss = SpreadsheetApp.getActiveSpreadsheet(); //シート名「売上表」を取得 var sh = ss.getSheetByName("売上表"); //A2~E4のセル範囲を取得 var range = sh.getRange(2,1,3,5); /* getRange(行番号2,列番号1,行数3,列数5) 行番号2: 2行目 列番号1: 1列目(A列) 行数3: 2行目から3行(2~4行目) 列数5: 1列目から5列(A~E列) →→→ A2~E4のセル範囲を取得 */
ここで注意したいのは、変数rangeはあくまでA2~E4のセル範囲のみを取得(指定)しただけです。
変数rangeの中には「ヒラメ」も「スズキ」も「3,000」も「9,000」も格納されていません。
A2~E4セル内の「ヒラメ」や「スズキ」などの値を取得したい場合、取得したセル範囲(変数range)に対してgetValuesメソッドを使用する必要があります。
//アクティブなスプレッドシートを取得 var ss = SpreadsheetApp.getActiveSpreadsheet(); //シート名「売上表」を取得 var sh = ss.getSheetByName("売上表"); //A2~E4のセル範囲を取得 var range = sh.getRange(2,1,3,5); //変数range(A2~E4セル)の値を二次元配列で取得 var values = range.getValues(); //変数valuesをログ Logger.log(values); /* 変数valuesの中 [[1.0, ヒラメ, 1.0, 800.0, 800.0], [2.0, スズキ, 2.0, 400.0, 800.0], [3.0, タイ, 3.0, 3000.0, 9000.0]] →→→ A2~E4セル内の値が格納されている */
変数range(A2~E4セル)に対してgetValuesメソッドを使用することで、セル内の「ヒラメ」や「スズキ」などの値を取得し変数valuesに格納することができました。
このようにセル内の値を取得したい場合、まずgetRangeメソッドでセル範囲を取得(指定)し、そしてそのセル範囲に対してgetValuesメソッドを使用する必要があります。
値を取得するためにgetRangeとgetValuesのふたつのメソッドを使用する必要があることを面倒だと思うかもしれません。
ですが実はこれらふたつのメソッドがわかれていることで、セルに関する様々なことを便利に処理できるようになります。
getRangeに対して使えるメソッドはgetValuesだけではない
セル範囲の値を取得するgetValuesは、getRangeに対して使用できるメソッドのひとつでしかありません。
getRangeでセル範囲を取得(指定)さえすれば、あとはそれに対して以下のようなメソッドを使用するだけでセル範囲内の様々な情報を簡単に取得したり、セル範囲内に入力できたりできます。
【get●●●● | get●●●●s】 セル範囲の情報を取得する
- getValue() | 単一セルの値を取得
- getValues() | 複数セルの値を取得
- getBackground() | 単一セルの背景色を取得
- getBackgrounds() | 複数セルの背景色を取得
- getFontColor() | 単一セルのフォント色を取得
- getFontColors() | 複数セルのフォント色を取得
【set●●●● | set●●●●s】 セル範囲に情報を入力する
- setValue() | 単一セルに値を入力
- setValues() | 複数セルに値を入力
- setBackground() | 単一セルに背景色を入力(設定)
- setBackgrounds() | 複数セルに背景色を入力(設定)
- setFontColor() | 単一セルにフォント色を入力(設定)
- setFontColors() | 複数セルにフォント色を入力(設定)
A2~E4セルの各種情報を取得する方法を見てみましょう。
//アクティブなスプレッドシートを取得 var ss = SpreadsheetApp.getActiveSpreadsheet(); //シート名「売上表」を取得 var sh = ss.getSheetByName("売上表"); //A2~E4のセル範囲を取得 var range = sh.getRange(2,1,3,5); //変数range(A2~E4セル)の値を二次元配列で取得 var values = range.getValues(); //変数range(A2~E4セル)の背景色を二次元配列で取得 var backGrounds = range.getBackgrounds(); //変数range(A2~E4セル)のフォント色を二次元配列で取得 var fontColors= range.getFontColors();
A2~E4セルをgetRangeで指定し変数rangeにまず格納しました。
あとは変数range内(A2~E4セル)の値を取得したければgetValuesを、背景色を取得したければgetBackgroundsを、そしてフォント色を取得したければgetFontColorsを使用するだけです。
セル範囲さえgetRangeメソッドで取得しておけば、あとは似たようなコードでセル範囲内の異なる情報を取得できることがわかりますね。
getRangeとの組み合わせ例
getRange & get●●●●
getRangeで単一セルを取得(指定)しセル内の情報を取得する場合、現実世界ではこのようなイメージです。
- getRange | 住所を特定
- get●●●● | 集荷する
例えばB4セルの値(タイ)を取得したい場合、このようなコードになります。
//アクティブなスプレッドシートを取得 var ss = SpreadsheetApp.getActiveSpreadsheet(); //シート名「売上表」を取得 var sh = ss.getSheetByName("売上表"); //B4のセル範囲を取得 var range = sh.getRange(4,2); //変数range(B4セル)の値を取得 var value = range.getValue(); //変数valueをログ Logger.log(value);
getRange & get●●●●s
getRangeで複数セルを取得(指定)しセル内の情報を取得する場合、現実世界ではこのようなイメージです。
- getRange | 地域を特定
- get●●●●s | 地域内の全家庭から電気代を集金する
get●●●●sというように最後に「s」が付くことで複数セルの情報を二次元配列で取得できるメソッドがGoogle Apps Scriptにはたくさんあります。
例えばA2~E4セルの背景色を取得したい場合、このようなコードになります。
//アクティブなスプレッドシートを取得 var ss = SpreadsheetApp.getActiveSpreadsheet(); //シート名「売上表」を取得 var sh = ss.getSheetByName("売上表"); //A2~E4のセル範囲を取得 var range = sh.getRange(2,1,3,5); //変数range(A2~E4)の背景色を取得 var backgrounds = range.getBackgrounds(); //変数backgroundsをログ Logger.log(backgrounds);
getRange & set●●●●
getRangeで単一セルを取得(指定)しセル内に情報を入力する場合、現実世界ではこのようなイメージです。
- getRange | 住所を特定
- set●●●● | 配達する
例えばB4セル(タイ)に「キンメダイ」と入力したい場合、このようなコードになります。
//アクティブなスプレッドシートを取得 var ss = SpreadsheetApp.getActiveSpreadsheet(); //シート名「売上表」を取得 var sh = ss.getSheetByName("売上表"); //B4のセル範囲を取得 var range = sh.getRange(4,2); //変数range(B4セル)に「キンメダイ」と入力 range.setValue("キンメダイ");
getRange & set●●●●s
getRangeで複数セルを取得(指定)しセル内に情報を入力する場合、現実世界ではこのようなイメージです。
- getRange | 地域を特定
- set●●●●s | 地域の全家庭にチラシを配る
set●●●●sというように最後に「s」が付くことで複数セルに情報を二次元配列で入力できるメソッドがGoogle Apps Scriptにはたくさんあります。
例えばA5~E5セルに「4、アジ、10、150、1500」という値を入力したい場合、このようなコードになります。
//アクティブなスプレッドシートを取得 var ss = SpreadsheetApp.getActiveSpreadsheet(); //シート名「売上表」を取得 var sh = ss.getSheetByName("売上表"); //A5~E5のセル範囲を取得 var range = sh.getRange(5,1,1,5); //変数range(A5~E5)に「4、アジ、10、150、1500」を入力 range.setValues([[4,"アジ",10,150,1500]]);
まとめ
今回はGoogle Apps ScriptのgetRangeメソッドの考え方を図入りで解説しました。
- getRangeメソッドとはあくまでセル範囲を取得(指定)するだけ
- 取得したセル範囲に対して使用できるメソッドはgetValues以外にたくさんある
これらふたつのポイントを覚えておくと、スプレッドシートをより柔軟に操作できるようになります。
また別の機会にgetRangeメソッドで思い通りにセル範囲を取得するコツを、具体例を交えて紹介したいと思います!
次回もご期待ください。