GASでセルを指定して値を取得する
GASでセルの値を取得するためにはgetRangeとgetValueを使います。getRangeで取得したいセルの位置を指定して、getValueでそのセルに入っている値をとってきます。
それでは使い方を詳しく見ていきましょう。
取得したいセルを指定するgetRangeの使い方
セルを指定するやり方には2通りあります。
- 文字列で指定する(B3など)
- 数値で指定する(行番号・列番号)
決まりきった場所を指定するときには文字列で指定した方が、わかりやすいですが、取得したいセルの位置が変更される場合には数値で指定した方が使い勝手がよいです。
下記の例はどちらもB3のセルを取得してきています。
function myFunction(){ var sheet = SpreadsheetApp.getActiveSheet(); var stringRange = sheet.getRange('B3'); var numRange = sheet.getRange(3, 2); }
この状態ではまだセルの情報しか取れていないので、セルに入っている値を取得することはできません。
getValueを使うことによって、値をとってくることができます。
単一セルの値を取得するgetValue
getValueの使い方はシンプルでセルの情報を取得したものに対して、getValueをつけてあげるだけです。
function myFunction(){ var sheet = SpreadsheetApp.getActiveSheet(); var stringRange = sheet.getRange('B3'); var numRange = sheet.getRange(3, 2); var stringRangeValue = stringRange.getValue(); var numRangeValue = numRange.getValue(); Logger.log(stringRangeValue); Logger.log(numRangeValue); }
今回説明のためにgetRangeとgetValueの処理を分けて描きましたが、一行にまとめても問題ありません。
function myFunction(){ var sheet = SpreadsheetApp.getActiveSheet(); var stringValue = sheet.getRange('B3').getValue(); var numValue = sheet.getRange(3, 2).getValue(); Logger.log(stringValue); Logger.log(numValue); }
Logger.logというものを使うことによって、意図通りの値が取れているか確認することができますので、最初はしっかりと取れているか確認しながら開発を進めていきましょう。
GASで複数範囲のセルの値を取得する
GASで一つのセルの値だけでなく、複数範囲の情報をまとめて取得することも可能です。
複数範囲のセル情報をとってくる時のgetRangeの使い方
複数のセル情報をとってくる場合にもgetRangeを使います。
- 文字列で指定する(B2:E5など)
- 行番号・列番号・行数・列数で指定する
B2からE5までの範囲を指定するコードの例は下記となります。
function myFunction(){ var sheet = SpreadsheetApp.getActiveSheet(); var stringRange = sheet.getRange('B2:E5'); var numRange = sheet.getRange(2, 2, 3, 4); }
文字列で指定する場合にどのように記述すればいいかわからない場合には、
取得したいセルをドラッグして、右クリックするとこの範囲へのリンクを取得という項目があります。
それを一旦取得して、貼り付けてみるとURLの最後の方に範囲が描いてありますので、それをコピペすれば早いです。
数値で指定する場合にはとってきたい範囲の右上のセルを起点として考えるのが一番良いです。
B2:E5を例にすると、B2が起点となるので、B2は2行目の2列目となります。
それから、5行目までをとるので、5-2で3行分。
BからEまでなので4列分といった感じです。
注意点としては、とってきたい最終行ではなくとってきたい行数や列数といったものになります。
複数のセル範囲を指定して値をとるgetValues
単一のセルの値の場合にはgetValueを使用しましたが、複数の場合には複数形としてsのついたgetValuesを使用します。
function myFunction(){ var sheet = SpreadsheetApp.getActiveSheet(); var stringRange = sheet.getRange('B2:E5'); var numRange = sheet.getRange(2, 2, 3, 4); var stringValues = stringRange.getValues(); var numValues = numRange.getValues(); Logger.log(stringValues); Logger.log(numValues); }
getValuesの返り値としては2次元配列で返ってきますので、それぞれの値をとってくる場合にはfor文などを使用する必要があります。
また、2次元配列の持ち方としては、行ごとが括られた状態で返ってきます。
[[B2, B3, B4, B5],[C2, C3, C4, C5], [D2, D3, D4, D5], [E2, E3, E4, E5]]
GASでセルの日付値から各要素(年、月、日)を取得する方法
スプレッドシート内のセルに日付情報が入っていて、その値を取得した場合には、日付型のデータとしてとってくるようになります。
日付型のデータから、年月日それぞれをとる方法を解説します。
値をとってくる基本的なやり方としては、上述の通りです。
年月日はそれぞれ、下記の関数を使用します。
- getYear()
- getMonth()
- getDate()
getYearとgetDateは特段そのまま使えばいいのですが、getMonthだけは別物で、getMonthの返り値が0~11となっていますので、+1してあげる必要があります。
function myFunction(){ var sheet = SpreadsheetApp.getActiveSheet(); var dateValue = sheet.getRange('B2').getValue(); Logger.log(dateValue.getYear()); Logger.log(dateValue.getMonth() + 1); Logger.log(dateValue.getDate()); }
まとめ
- 単一セルの値をとってくるにはgetValueを使う
- 複数セルの値をとってくるにはgetValuesを使う
- 日付の各要素をとるには、getYear・getMonth・getDateを使う