earthpg:GAS専門のプログラミングスクール

GASで複数の範囲を取得する方法を詳しく解説!

GASを使ってスプレッドシートの複数の範囲を取得したいんですけど、どうやったらいいのか分からなくて…
猫男
猫男
catman
catman
なるほど。今日はGASを使ってスプレッドシートの複数の範囲を取得する方法を教えてあげよう。

GASで複数の範囲を取得する基本

まずはGASで基本的な範囲を取得する方法を理解しよう。スプレッドシート上で上手にセル範囲を取得するには、getRangeを使うんだ。

基本のgetRangeメソッドの使い方

通常、スプレッドシート上の一つの範囲を取得するには以下のように書く。

var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
var range = sheet.getRange('A1:B2');

このコードはシートのA1からB2までの範囲を取得するんだ。

複数の範囲を一度に取得する方法

実際に複数の範囲を一度に取得するには工夫が必要だ。

GASでは直接複数の範囲を取得するメソッドはないが、複数のgetRangeコールを配列などで管理すれば可能だ。

え、直接できないんですか?
猫男
猫男

GASで複数getRangeを管理する方法

複数の範囲を取得するにはリスト(配列)で管理するのが賢いやり方だ。

配列で範囲を管理

以下のようにそれぞれの範囲を配列に保存することで一括で管理できる。

var ranges = [];
ranges.push(sheet.getRange('A1:B2'));
ranges.push(sheet.getRange('C3:D4'));
ranges.push(sheet.getRange('E5:F6'));

空の配列を作って、そこに範囲を入れていく処理だ。

ループで範囲を処理

取得した範囲をループで順に処理できる。

for (var i = 0; i < ranges.length; i++) {
  var values = ranges[i].getValues();
  Logger.log(values);
}

これで、配列内にある各範囲の値を取得してログに出力できるはず。

やってみると意外とシンプルですね。配列での管理、覚えておきます!
猫男
猫男

練習問題

次のコードを完成させて、スプレッドシートの範囲を取得し、コンソールにログを出力してください。

var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
var ranges = [];

// 複数の範囲を取得し、配列に追加する
ranges.push(______);

// 配列の各範囲のデータをログに出力
for (var i = 0; i < ranges.length; i++) {
   var values = ranges[i].getValues();
   Logger.log(values);
}

 

 

解答・解説

以下が練習問題の解答だ。空欄に適切なコードを挿入しよう。

var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
var ranges = [];

// 複数の範囲を取得し、配列に追加する
ranges.push(sheet.getRange('A1:B2'));
ranges.push(sheet.getRange('C3:D4'));

// 配列の各範囲のデータをログに出力
for (var i = 0; i < ranges.length; i++) {
   var values = ranges[i].getValues();
   Logger.log(values);
}

ここではgetRangeで取得した各範囲オブジェクトを配列に保存して、ループ内で各範囲の値を取得してログ出力している。

getRangeは指定した範囲をセル範囲オブジェクトとして返すメソッドだ。

複数の範囲を簡単に扱えるのは便利ですね。これでプロっぽくコードを書いてみます!
猫男
猫男
catman
catman
その意気だ。頑張って、もっとスクリプトを活用してみよう。