複数列に渡す範囲の処理
ここまで行ってきたのは、基本的に「1列のみの処理」でした。しかし、表計算では複数列にまたがったデータを処理するのが一般的です。
複数列に渡る範囲指定はgetValueの戻り値が二次元配列で返されるため注意が必要です。二重の繰り返しを用意して処理する必要があります。
function myFunction() {
var range= SpreadsheetApp.getActiveRange()
var values = range.getValues();
var total = 0;
for(var i = 0;i < values.length;i++){
for(var j = 0;j < values[0].length;j++){
total += values[i][j];
}
}
Browser.msgBox("合計:" + total);
}

先ほどのスクリプトを修正したものです。ここでは、二重のforを使い、getValuesで取得した配列から値を取得しています。このやり方であれば、選択されたセル範囲が1列であろうと複数列であろうと、正しく値が計算できます。
セルをまとめて操作する
セルの値を取り出して処理するだけならgetValuesですみますが、セルを操作するとなるとまた話は変わってきます。単純に、Rangeのセルをまとめて操作するなら、作業は簡単です。そのままRangeの設定を変更すればいいだけですから。
function myFunction() {
var range= SpreadsheetApp.getActiveRange()
range.setValue("※選択されたセル");
}

これは、選択されたセルすべてに「※選択されたセル」と表示させるものです。ここではgetActiveRangeで取得したRangeをそのままsetValueで設定しています。このRangeで示されているセルがいくつあろうと、すべてひとまとめにして操作を行うことができます。これは非常に簡単ですね!
セルの値を変更する
問題は、1つ1つのセルを個別に設定する必要がある場合です。この場合は、各セルのRangeを取得し、それぞれを操作することになります。では、1つ1つのセルの値を設定するサンプルを考えてみましょう。
function myFunction() {
var range= SpreadsheetApp.getActiveRange()
var cols = range.getNumColumns();
var rows = range.getNumRows();
var total = 0;
for(var i = 1;i <= rows;i++){
for(var j = 1;j <= cols;j++){
var cell = range.getCell(i, j);
cell.setValue(i + "," + j);
}
}
}

これは、選択されたセルすべてに、そのセルの行・列の相対番号を表示する例です。セルをいろいろと選択して動作を確かめてみるとよいでしょう。
ここでは、選択されているRangeの範囲を調べ、その範囲内のすべてのセルについてRangeを取得しsetValueする処理を行っています。まず選択されたRangeの範囲ですが、これは次のようなRangeのメソッドで調べることができます。
| メソッド名 | 概要 |
| getNumColumns | Rangeの列数を返す。 |
| getNumRows | Rangeの行数を返す。 |
これで行・列それぞれの数が分かります。後は繰り返しを使い、Range内のそれぞれのセルのRangeを取得し、setValueで値を設定します。
var cell = range.getCell(i, j); cell.setValue(i + "," + j);
セルの取得は、Rangeに用意されている「getCell」で行います。これは引数に列・行の相対番号(Range内の何番目にあるかという番号)を指定して呼び出します。これで、そのセルのRangeが得られますので、後はsetValueを呼び出し値を設定するだけです。
