今回はGAS入門第5弾ということで、セルを取得する方法をご紹介します。
スプレッドシートにおける階層構造
具体的な操作方法を説明する前に、スプレッドシートの階層構造についてご説明します。
スプレッドシート は以下のようにSpreadsheetApp>Spreadsheet>Sheet>Rangeという階層構造になっています。
コード上でも、この階層構造を順に辿っていき、目的のオブジェクト(シートやセルなど)を操作するので押さえておきましょう。HTMLファイルにおけるディレクトリみたいなものですね。
それでは、スプレッドシートの階層構造について理解できたらセルの取得方法について見ていきましょう!
GASでセルの範囲・値を取得する方法
まずは完成イメージ。今回使用するスプレッドシートはこちらです。A1~B2セルに値がそれぞれ入っています。
これまで通り、まずはスプレッドシート とシートをそれぞれ変数ssとsheetに代入し、そこから特定のセル範囲を取得するという流れになっています。
function getCell() { //アクティブなスプレッドシートを取得し、ssに代入 var ss = SpreadsheetApp.getActiveSpreadsheet(); //cellという名前のシートを取得し、sheetに代入 var sheet = ss.getSheetByName('cell'); //sheetのA1セルを取得 -> Range Logger.log(sheet.getRange(1,1)); //sheetのA1セルの値を取得 -> A1セル Logger.log(sheet.getRange(1,1).getValue()); //sheetのA1〜B2セルを取得 -> Range Logger.log(sheet.getRange(1,1,2,2)); //sheetのA1セルの値を取得 -> [A1セル, B1セル], [A2セル, B2セル] Logger.log(sheet.getRange(1,1,2,2).getValues()); }
それでは1つ1つ順を追って解説していきます。
GASでセルの範囲を取得する
GASでセルの範囲を取得する際に使用するのは「getRange()」です。
[getRangeの使い方]
getRangeでは、取得したいセルがあるシートを指定した上で、そのシートのどのセルを取るかを指定します。基本的な用法としては以下で特定のセル、あるいは特定の範囲を指定します。
- 特定のセルを指定する場合
getRange(開始行,開始列) - 特製の範囲を指定する場合
getRange(開始行,開始列,行数,列数)
上のコードで言うと、まずスプレッドシートとシートを以下のように取得をします。
その上で、以下のように特定の範囲を取得しています。
その範囲を使用して何かの処理を行う場合はそれで大丈夫ですが、そうではなくその値を取得したいのだ!という場合は、値を取得するための記述が必要になってきます。
GASでセルの値を取得する
指定した範囲のセルの値を取得する場合に使用するのは「getValue()」です。
[getValueの使い方]
特定の範囲における値を取得する場合、取得したいセルがあるシートを指定した上で、そのシートのどのセルを取るかを指定し、その後、そのセルの値を取る記述を付け加えます。
- 特定のセルの値を取得する
getRange(開始行,開始列).getValue() - 特定の範囲の値を取得する
getRange(開始行,開始列,行数,列数).getValues()
上のコードで言うと、以下の部分ですね。
なお、対象範囲が1つのセルであれば「getValue」を、複数であれば「getValues」を使用しますので注意しましょう。
実際に出力されたデータ(「->」の右側)を見てみると、このようになってますね!
まとめ
いかがでしたか。
ちなみに今回は開始行・列と行数・列数を指定していますが、ここの指定も変数を使うとより便利になります。
例えば、「A1~最終行の9列目までを取ってきて欲しい」場合はgetRange(1,1,最終行,9)という指定をしてあげれば、最終行が変わってもそれに合わせて取得する行数が変わりますよね。
その「最終行を指定する方法」については次回紹介したいと思いますのでお楽しみに。