データが存在する範囲を取得する | getDataRange()【GAS】

たけだ

スプレッドシート上のデータが存在する範囲を取得する

getDataRange関数を紹介します

💡この記事でわかること
  • getDataRange関数を使ってデータが存在する範囲を取得する方法
  • getDataRange関数を使うと便利な場面

getDataRange()

シート上にデータがある範囲(Range)を取得します。

const sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet()

// データがある範囲の値をすべて取得する
const values = sheet.getDataRange().getValues()
console.log(values)

実行結果

[ [ '社員番号', '氏名', '年齢' ],
[ '00001', '田中太郎', 30 ],
[ '00002', '佐藤義男', 28 ],
[ '00003', '鈴木和也', 26 ] ]

公式ドキュメント

https://developers.google.com/apps-script/reference/spreadsheet/spreadsheet#getdatarange

戻り値

シートないのデータがある範囲(Range)

https://developers.google.com/apps-script/reference/spreadsheet/range

シートの状態と取得される範囲

このようなシートの状態の場合、A1からC4のセルまでの範囲が取得されます。

[ [ '社員番号', '氏名', '年齢' ],
  [ '00001', '田中太郎', 30 ],
  [ '00002', '佐藤義男', 28 ],
  [ '00003', '鈴木和也', 26 ] ]

では、次のような状態ではどこまでの範囲が取得されるでしょうか

このように間にデータがない場合でも同じくA1からC4が取得されます。

[ [ '', '', '' ],
  [ '', '', '' ],
  [ '', '', '' ],
  [ '', '', 'あああああ' ] ]

C1のみではなく連続してデータが埋まっている範囲A1:C1が取得されるのでご注意ください。

このようにセルの深い位置に誤ってデータが入っている場合、意図せず大きな範囲が取得されてしまいます。スクリプトを実行していて意図しない範囲が取得されてくる場合はこのような意図しない値が入っていないか確認してみてください。

長すぎてログが途中で省略されている例

Logging output too large. Truncating output. [ [ '', '' ],
  [ '', '' ],
  [ '', '' ],
:
:

getDataRange関数を使うと便利な場面

ぴよこ

getDataRange関数はどんな時に使うんでしょうか?

getDataRange関数は、マスターデータや日々の帳簿などデータが追加されていくような表のデータを活用したい場合に便利です。

const sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet()

// データがある範囲の値をすべて取得する
const values = sheet.getDataRange().getValues()
console.log(values)
[ [ '社員番号', '氏名', '年齢' ],
  [ '00001', '田中太郎', 30 ],
  [ '00002', '佐藤義男', 28 ],
  [ '00003', '鈴木和也', 26 ] ]

例えば、社員名簿などで新入社員か来て行が増えた場合。

通常であれば取得範囲を毎回変更しなければいけませんが、getDataRange関数の場合はデータがある範囲を取得してくれますのでスクリプトの変更は必要ありません。

[ [ '社員番号', '氏名', '年齢' ],
  [ '00001', '田中太郎', 30 ],
  [ '00002', '佐藤義男', 28 ],
  [ '00003', '鈴木和也', 26 ],
  [ '00004', '高橋和美', 22 ] ]

ヘッダー(見出し)部分を除きたい場合

先ほどの例では1行目のヘッダー(見出し)部分まで範囲として指定されています。

2行目以降の実際のデータ部分だけ取得したい場合はどうしたらよいのでしょうか。

ヘッダーを除きたい場合は、getDataRange関数ではなくgetRange関数を利用する必要があります。

const sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet()
const values = sheet.getRange(2, 1, sheet.getLastRow()-1, sheet.getLastColumn()).getValues()

console.log(values)

実行結果

[ [ '00001', '田中太郎', 30 ],
  [ '00002', '佐藤義男', 28 ],
  [ '00003', '鈴木和也', 26 ] ]

getRange関数については下記の記事で紹介していますので、詳しく知りたい場合は読んでみてください。

まとめ

たけだ

以上、getDataRangeでデータが存在する範囲を取得する方法でした。

最後まで読んでいただきありがとうございました!

今回紹介したような知っていれば便利な関数がGASには多数用意されています。

当サイトでは、ほかにも関数ごとに紹介していきますので、よろしければ他の記事も見ていってくださいね。

GASをイチから学びたい方へ

このブログでは断片的な説明になってしまっていますが、本書は幅広いGASの内容が網羅的に学べる本です。イチから学びたい方は是非読んでみてください。

すでにGASをある程度マスターした方にも辞書的に手元に置いておくと便利です。