GASのgetRangeの使い方解説!スプレッドシートのセル範囲を指定する4つの方法
Google Apps Script(GAS)でスプレッドシートのシートから情報を取得する際、主にgetRangeメソッドを利用し、セル範囲を指定します。
getRangeメソッドでは4つの範囲指定方法があるので、getRangeの使い方とそれぞれのセル範囲の引数指定方法を解説します。
スプレッドシートのデータ活用にGASを
Google Apps Script(GAS)では、スプレッドシートを利用するケースが多いです。
スプレッドシートはマイクロソフトの表計算ソフトのエクセルとも近い機能があり、様々なデータ管理に用いられています。
そのデータ管理の整形や抽出などを行いたい場合に、関数だけでは実現できないケースでGASを活用します。
GASではIF文による条件分岐に加えてFORループなどの繰り返し処理が可能なので、複雑なデータ処理が可能です。
スプレッドシートからGASでデータ取得するには?
Google Apps Script(GAS)でスプレッドシートのセルに記録されたデータを取得するには以下の手順が必要です。
- スプレッドシートを読み込む
- スプレッドシート内のシートを読み込む
- シートから取得したいセル範囲を指定する
- 指定したセル範囲から値を取得する
①のスプレッドシートの読み込み方法は以下の記事で説明しています。
getActiveSpreadsheetメソッドや、openbyIdメソッド、openbyUrlメソッドで取得します。
スプレッドシートの取得後に、②のスプレッドシート内のシートを読み込む方法は以下の記事で解説しています。
アクティブなシートを読み込むgetActiveSheetメソッド、シート名を指定してシートを読み込むgetSheetByNameメソッド、そしてすべてのシートを配列形式で読み込むgetSheetsメソッドを活用します。
※コンテナバインド型のGASスクリプトの場合、スプレッドシートの読み込みを省略してgetActiveSheetでシート読み込みが可能です。
こうした、スプレッドシートとシートの読み込みを行った後、シート内の値を取得したいセル範囲を指定する処理をGASで行います。
そうすることで、セルの値がようやく取得できるようになります。
GASでセル範囲を指定するgetRangeメソッド
スプレッドシートのセル範囲を指定するために、Google Apps Script(GAS)のgetRangeメソッドを利用します。
getRangeメソッドで、スプレッドシート内のセルのどこからどこまでというのを引数に指定することで、セル範囲をRangeオブジェクトとして取得します。
セル範囲を取得したRangeオブジェクトで、前述したgetValue(getValues)メソッドを使うことでセルの値を取得可能です。
また、取得のほかに値を書き込むsetValue(setValues)も同様にgetRangeメソッドを実行して範囲指定するケースが多いです。
getRangeメソッドは引数指定で4種類の使い方
Google Apps Script(GAS)のgetRangeメソッドには、合計で4種類の使い方があります。
メソッド自体は同じですが、引数の指定方法が4パターンあります。
- Sheetオブジェクト.getRange(行番号, 列番号)
- Sheetオブジェクト.getRange(行番号, 列番号, 行数)
- Sheetオブジェクト.getRange(行番号, 列番号, 行数, 列数)
- Sheetオブジェクト.getRange(“R1C1形式")
①Sheetオブジェクト.getRange(行番号, 列番号)
①は1つのセルを指定する方法で、取得したいセル位置を行番号と列番号を引数に指定することで取得します。
例えば、B3セルを取得したい場合は、getRange(3, 2)という数字を引数に指定します。
getRange(3,2)で指定したあと、セルの値を取得するためにgetValueメソッドで1つのセルの数値を取得できます。
②Sheetオブジェクト.getRange(行番号, 列番号, 行数)
②のgetRangeメソッドは行番号、列番号に加え、行数の3つの引数を指定する形です。
主にスプレッドでは行方向にデータをどんどん追加していくので、1列のデータを縦方向に複数取得する場合に利用します。
getRange(3,2,4)とすると、B3:B6の合計4つのセル範囲がRnageオブジェクトとして取得されます。
この場合はセルが複数範囲に及ぶため、値を取得する場合はgetValuesメソッドで配列データで取得します。
※この時、配列は一次元配列ではなく二次元配列となるので、後々の処理で注意が必要です。
③Sheetオブジェクト.getRange(行番号, 列番号, 行数, 列数)
③のgetRangeの方法は、②に追加で列数も引数に指定する形式です。
スプレッドシードから色々なデータをGASで取得して処理するようになると、最も活用することになります。
getRange(3,2,4,5)と引数を指定すると、B3:F6のセル範囲をRangeオブジェクトとして取得されます。
①の1セルずつgetRangeで取得する場合、B3:F6セルは20回必要ですが、4つの引数を指定することで一括で取得可能です。
④Sheetオブジェクト.getRange(“R1C1形式")
最後のgetRangeの指定方法は、R1C1形式と呼ばれる方式でセルを指定します。
R1C1形式はいわゆるB1セルや、F6セルといったエクセルやスプレッドシートのセル位置を表現する記述でセルを指定します。
そのため、getRange(“B3")という記述の仕方で、B3セルをRangeオブジェクトとして取得できます。
また複数範囲にも対応しており、getRange(“B3:F6")と記述することで、getRange(3,2,4,5)と同じセル範囲が取得可能です。
ただ、R1C1形式は人が見た時にはわかりやすいものの、数字ではなく文字列で指定する形のため、GASスクリプトで指定しづらいです。
そのため、特定の1つのセルを明示的に指定する場合を除くと、あまり利用するシーンは少なく、①~③の引数指定を用います。
GASのgetRangeでセル範囲を指定するサンプルコード
Google Apps Script(GAS)のgetRangeメソッドの4つの引数指定のパターンを、セル範囲を指定するサンプルコードで解説します。
以下のような日本の歴代総理大臣のデータを記録したスプレッドシートに対し、サンプルコードを実行する形です。
GASで4パターンのgetRangeメソッドを実行し、getValue(getValues)メソッドでセル範囲の値を取得し、ログ出力するサンプルコードです。
function myFunction() {
//コンテナバインドで紐付いたスプレッドシートのアクティブなシートを取得
let mySheet = SpreadsheetApp.getActiveSheet();
//1つのセルを指定する場合、当該セルの行・列番号の2つを引数に指定
let data1 = mySheet.getRange(2,2).getValue();
console.log(data1);
//行方向に複数セルを取得する場合、一番上の行・列番号と取得行数の3つを引数に指定
//複数セル範囲の値を取得する場合はgetValueではなく、getValuesを利用
let data2 = mySheet.getRange(2,2,3).getValues();
console.log(data2);
//行列方向で複数セルを取得する場合、一番左上の行・列番号と取得行・列数の4つを引数に指定
let data3 = mySheet.getRange(2,2,3,4).getValues();
console.log(data3);
//R1C1形式でB2やD4といったスプレッドシートの形式で指定も可能
let data4 = mySheet.getRange("B2").getValue();
console.log(data4);
}
実際に前述したスプレッドシートに対し、GASサンプルコードを実行すると、以下のように指定したセル範囲の値がログ出力されます。
このようにそれぞれのgetRangeメソッドの引数指定によって、取得できるセル範囲が変化します。
1行で複数列をgetRangeで指定するには?
Google Apps Script(GAS)のgetRangeメソッドには、1列で行方向に複数セルを指定したい場合、一番上にあるセルの行番号と列番号、そして取得行数の3つを引数に指定し、取得しました。
反対に1行で列方向に複数セル範囲を指定したい場合はどのようにすればよいのでしょうか?
これは4つ目で紹介した、getRangeメソッドで4つの引数を指定するやり方を応用します。
Sheet.getRange(2,1,1,5)
このように、一番左にあるセルの行番号・列番号を引数に指定し、次の行数を1にすることで1行のデータになります。
最後の第4引数で取得したい列方向のセル数を指定することで、1行で複数列のセルをgetRangeで範囲指定が可能です。
まとめ・終わりに
今回、Google Apps Script(GAS)でスプレッドシートのセル範囲を指定するメソッドgetRangeの使い方を紹介しました。
getRangeオブジェクトは引数を1個~4個まで指定することができ、指定する引数の数でRangeオブジェクトのセル範囲が変化します。
最初のうちはgetRange(行番号,列番号)で1つのセルを取得するケースが多いです。
ただ、たくさんのデータを扱うようになると、getRange(行番号, 列番号, 行数, 列数)で4つの引数を指定し、複数セル範囲を取得します。
getRangeの使い方をマスターすると、スプレッドシートのデータを大量にかつ、効率よくデータ処理ができるようになります。
今回紹介した4つの方法を試しながら、それぞれの利用シーンも理解して、レベルアップしましょう。
ディスカッション
コメント一覧
まだ、コメントがありません