
photo credit: RecondOil Solar Panels Green via photopin (license)
みなさん、こんにちは!
タカハシ(@ntakahashi0505)です。
初心者向けにBotづくりを目指してGoogle Apps Scriptプログラミングの基礎をシリーズでお伝えしています。
前回の記事はこちら。
GASでスプレッドシートのシートを取得する方法についてお伝えしました。
今回は、その続きとして、Google Apps ScriptでRangeオブジェクト、つまり、セルやセル範囲とその値を取得する方法についてお伝えします。
では、行ってみましょう!
前回までのおさらいと今回のお題
題材としているスプレッドシートはこちらです。
まず、Bot作りをするために、このリストからあるセルを取得する必要があるとします。例えば、A3セルの値を取得するのであれば
- スプレッドシート「名言Bot」をSpreadsheetオブジェクトとして取得する
- そのSpreadsheetオブジェクトの配下にあるシート「シート1」をSheetオブジェクトとして取得する
- そのSheetオブジェクトの配下にあるA3セルをRangeオブジェクトとして取得する
- そのRangeオブジェクトの値を取得する
という手順のスクリプトを組む必要があります。
前回までのおさらいとして、以下のスクリプトを組んでみました。
function myFunction() { var sheet = SpreadsheetApp.getActiveSheet(); Logger.log(sheet.getName()); }
これで、上記手順の1,2まで、つまりSheetオブジェクトは取得できましたので、今回はその残り、セルとその値の取得を目指していきたいと思います。
getRangeオブジェクトでセル範囲を取得する
Sheetオブジェクトの特定のセルまたはセル範囲を取得するにはgetRangeメソッドを使います。
getRangeメソッドは、以下の2通りの使い方があります。
- アドレスを指定してセル範囲を取得する
- 行番号、列番号、行数、列数を指定してセル範囲を取得する
今回は、前者の「アドレス」を使った方法を中心に解説を進めていきます。
アドレスを指定してセル範囲を取得する
アドレスは「A3」や「A1:E5」などといった、セルのアドレスです。
普段スプレッドシートを使用していればわかりますよね。
アドレスを文字列としてgetRangeメソッドの引数として渡すことで、そのセル範囲を取得することができます。
単体のセルとその値を取得する
では、まず単体のセルとその値を取得してみましょう。
例えば、以下のようにすれば、A3セルの値をログ出力することができます。
function myFunction() { var sheet = SpreadsheetApp.getActiveSheet(); var range = sheet.getRange('A3'); Logger.log(range.getValue()); }
結果はこちらですね。
ちゃんとA3セルの値がログ出力されているのが確認できます。
getValueメソッドでセルの値を取得する
上記スクリプトで使用されているgetValueメソッドですが、これは単体セルの値を取得するメソッドです。
複数セルとその値を取得する
では、例えば以下のようなスクリプトを実行したらどうなるでしょうか。
function myFunction() { var sheet = SpreadsheetApp.getActiveSheet(); var range = sheet.getRange('A3:C4'); Logger.log(range.getValue()); }
取得しているRangeオブジェクトは「セル範囲」ですが、値の取得は単体セル用のgetValueメソッドですよね。
実行すると以下のようになります。
先程と全く同じですね。
つまり、Rangeオブジェクトがセル範囲の場合にgetValueメソッドを使うと、セル範囲の一番左上のセルの値のみを取得するということになります。
getValuesメソッドでセル範囲の値を取得する
さて、セル範囲の値をまとめて取得したい場合には、getValuesメソッドを使う方法があります。getValuesということで、複数形ですね。
書き方はこちらです。
わかりますでしょうか?
見やすく整理すると、以下のように二次元配列にセル範囲の値が格納されていることがわかります。
[ [A3セルの値, B3セルの値, C3セルの値], [A4セルの値, B4セルの値, C4セルの値] ]
各行のデータ群(レコード)が配列になっていて、それを要素とする二次元配列になっているということです。
このシリーズの後半で配列について触れていきますが、スプレッドシートのセル範囲はよくこのような二次元配列として取り扱うのが有効な手段となりますので、なんとなく覚えておいていただければと思います。
まとめ
以上、Google Apps Scriptでセルやセル範囲とその値を取得する方法についてお伝えしました。
- getRangeメソッドでセルやセル範囲を取得する
- getValueメソッドで単体セルの値を取得する
- getValuesメソッドでセル範囲の値を配列として取得する
getRangeオブジェクトのもう一つの使い方である行番号や列番号を使う方法、またセル範囲を二次元配列で扱う方法については、またシリーズ後半の別の記事で紹介していきますね。
さて、次回ですが、スプレッドシートの上から順番にセルの値を取得する方法についてお伝えします。
どうぞお楽しみに!