Google Apps Script(GAS)を使ってGoogleスプレッドシートを操作する際、複数の離れた範囲のセルを一度に設定したいことがありますよね。
しかし、getRangeメソッドだけでは、この操作を直接行うことができません。
本記事では、GASで複数の離れた範囲のセルを操作する、効果的な方法を紹介します。
getRangeメソッドの制限
getRangeメソッドは、GASでスプレッドシートの特定の範囲を取得するための基本的なメソッドです。
このメソッドを使用すると、指定したセルの範囲(例:A1:B4)に対してアクセスし、その範囲の値を読み取ったり、書き込んだりすることができます。
var range = sheet.getRange("A1:B4");
しかし、このメソッドには制限があります。
getRangeメソッドは、1回の呼び出しで1つの連続した範囲しか取得できません。
つまり、下記のようにA1:B4とD1:E6のような離れた範囲を一度に取得することはできないのです。
var range = sheet.getRange("A1:B4, D1:E6"); // これは動作しません
この制限は、複数の離れた範囲を同時に操作したい場合に課題となります。
複数範囲を操作する2つの方法
では、どうすれば複数の離れた範囲を効率的に操作できるでしょうか?
ここでは、2つの有効な方法をご紹介します。
1. 複数のgetRange呼び出し
一番シンプルな方法は、離れた範囲ごとに個別にgetRangeを呼び出す方法です。
var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
var range1 = sheet.getRange("A1:B4");
var range2 = sheet.getRange("D1:E6");
var values1 = range1.getValues();
var values2 = range2.getValues();
この方法では、それぞれの範囲に対して別々にgetRangeを使用し、必要な値を取得します。
シンプルで直感的に使える方法ですが、範囲が多くなるほどコードが長くなり、全体の処理時間を増加させる可能性があります。
扱う範囲の数が少ない場合や、簡単な操作を行う場合に、こちらの方法を使うことをおすすめします。
2. getRangeListの使用
より効率的に複数の範囲を扱いたい場合は、getRangeListメソッドを使用することをおすすめします。
var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
var rangeList = sheet.getRangeList(["A1:B4", "D1:E6"]);
var ranges = rangeList.getRanges();
var values = ranges.map(range => range.getValues());
getRangeListを使用すると、複数の範囲をリストとして扱うことができます。
getRangeListを使う方法は、大規模なスプレッドシートや多数の範囲を扱う場合におすすめです。
getRangeList:使用上の注意
- getRangeListの基本
getRangeList()
を使用した場合、直接値を取得することはできませんgetRanges
メソッドを使用して個々のRangeオブジェクトにアクセスする必要があります
- getRangeListで取得した範囲の処理
- getRangeListで取得した複数の範囲を処理する際は、必ずループ処理が必要です。
【ループ処理の例】
var ranges = rangeList.getRanges();
var values = ranges.map(range => range.getValues());
for (var i = 0; i < ranges.length; i++) {
var range = ranges[i];
var rangeValues = values[i];
// ここで各範囲に対する処理を行う
}
- 各ループ処理で、現在の範囲(range)とその値(rangeValues)を個別に取得し処理します。
これらの点に注意することで、getRangeListを使用した複数範囲の処理が可能になります。
まとめ
GASでスプレッドシートの複数の離れた範囲のセルを操作する場合、getRangeメソッド単体ではこの操作を実現することはできません。
今回ご紹介した、複数回のgetRange呼び出しやgetRangeListの使用により、この課題を簡単に解決することができます。
ぜひ、ご自分のプロジェクトでも活用してみてください!
コメント