さて、今回はGAS記事に戻ってまいりました。
今年はGAS・Python・管理系記事とバランスよく書いていこうかなぁと思い、常に小さなネタを探しております。(大きいの作るとどうしても連載になっちゃうんで汗)
そんな訳で、今回はGAS+spreadsheetを扱うなかで、シート内にあるデータの対象範囲を選択する方法としてgetRange系のメソッドが準備されていますが、その中でもgetRangeListを取り上げていきたいと思います。
配列が好きなGAS書きは多いと思うので、参考になればなと思います。
では、行ってみましょう。
getRangeListの用途
そもそも用途としては何か?って話なのですが、自分がよく使うのは以下のようなケースです。
- データ入力formをスプシないに作った時の入力後の一括クリア
- 選択したセルに同一数式展開
まぁシンプルにgetRangeで範囲指定すると、【column: column】とか【cell: cell】とかでうまく範囲指定できないけど、一括して処理したいときに利用します(本当はシートのデータ構成変えた方がいいんですけどね。。)
今回のサンプル
今回は以下のようなデータに対して、A列とB1セルだけ消去したいという場合のgetRangeListの有無での対応を紹介します。

getRangelistがなくても、実はそこまで大変ではないのですが、mapとかを利用しなくても一括で同一処理やってくれるので、jsになれていない初級者のうちは利用しやすいかと思います。実際にコードで比較してみましょう。
getRangeListを使わない場合
getRangListがない場合、自分だと以下のようなコードで対応します。
function wo_rangelist(){
const sht = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("シート1");
let clear_cells = [sht.getRange("A:A"), sht.getRange(1,2)];
clear_cells.map(a => a.clear());
}
clearしたい対象のセルを配列に自分で入れて、その配列に対してmap処理をする感じです。
別にこれでも十分シンプルではあるのですが、mapの動きがいまいちイメージできないなぁという人向けにはgetRangelistがいいです。
getRangeListを利用する場合
getRangeListを利用する場合、上のコードが以下のように書き換え可能です。
function w_rangelist(){
const sht = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("シート1");
let rangeList = sht.getRangeList(["A:A", "B1"])
rangeList.clear()
}
RangelistクラスがgetRangeListメソッドを利用すると生成され、RangeListクラスはそのままclearやclearcontentなどのメソッドを保持しているので、自分でmapなどで処理をしなくても対応可能というのがメリットでしょうか。
まぁコードが少しみやすくなる?かもしれません。劇的ではないにせよ、こんな方法もあります、って感じですかね。
まとめ
今回は、【getRangeListを使って一括処理を少しだけ楽にしてみる】というテーマで、getRangeListの紹介をしてきました。
まぁあってもなくてもいいのじゃないか、という感じも受けなくはないのですが、知ると楽になる人もきっとどっかにはいてくれるはず、と思いw
なれちゃうと、なんだかんだmapとかでやりたくなっちゃうのですが、GAS自体もいろんなクラスやメソッドが用意されているので、たまにはドキュメントも読み返してみようかと思うネタの一個です。