libro
www.tuyano.com
初心者のためのGoogle Apps Scriptプログラミング入門

スプレッドシート利用の基本 (2/5)

作成:2011-06-17 08:05
更新:2011-11-04 15:30

■Rangeの値を操作する

シートにある個々のセルを扱うためには、「Range」という範囲を示すオブジェクトを利用すればいい、ということはわかりました。では、このRangeで、どうやってセルの値を操作するのでしょうか。

Rangeには、値をやり取りするごくシンプルなメソッドがあり、これで簡単に値を操作できます。以下のようなものです。

・値を得る
変数 = 《Range》.getValue();

・値を設定する
《Range》.setValue( 値 );

非常に単純ですね。注意したいのは、「複数のセル範囲を指定するRange」の場合です。getValueでは、レンジの左上のセルの値だけが返されます。またsetValueでは、なんとレンジ内のセルすべての値が変わってしまいますので注意しましょう。

では、実際にセルを操作する例を挙げておきましょう。下のリスト欄のスクリプトは、A1~I9までのセルに、1×1~9×9の値(いわゆる九九の値です)を書き出し、その右側および下に、各行・各列の合計を計算し表示します。

ここでは、まず二重の繰り返しを使い、A1~I9までのすべてのセルに九九の答えを書きだしていきます。
for(var i = 1;i < 10;i++){
    for (var j = 1;j < 10;j++){
        sheet.getRange(i, j).setValue(i * j);
    }
}
getRangeで横・縦の位置を指定し、setValueで値を設定します。このように、Rangeの取得とgetValue/setValueさえわかれば、意外と簡単にセルを操作することができます。この後、縦横の合計を計算するのも、基本的には同様です。for (var i = 1;i < 10;i++)の繰り返しの中で、
for (var j = 1;j < 10;j++){
    rowTotal += sheet.getRange(i, j).getValue();
    colTotal += sheet.getRange(j, i).getValue();
}
このように、縦および横に順番にセルの値を取り出しては変数に加算をしていきます。そして繰り返しが終わったら(つまり、その列・行の合計を計算し終わったら)、その列・行の10番目に結果の値を設定します。
sheet.getRange(i, 10).setValue(rowTotal);
sheet.getRange(10, i).setValue(colTotal);
繰り返しによるセル操作は、スプレッドシートのマクロ作成の基本ともいえる処理ですので、まずはこのやり方に慣れておきましょう。

※プログラムリストが表示されない場合

AddBlockなどの広告ブロックツールがONになっていると、プログラムリスト等が表示されない場合があります。これらのツールをOFFにしてみてください。

●プログラム・リスト●

function myFunction() {
	var sheet = SpreadsheetApp.getActiveSheet();
	for(var i = 1;i < 10;i++){
		for (var j = 1;j < 10;j++){
			sheet.getRange(i, j).setValue(i * j);
		}
	}
	for (var i = 1;i < 10;i++){
		var rowTotal = 0;
		var colTotal = 0;
		for (var j = 1;j < 10;j++){
			rowTotal += sheet.getRange(i, j).getValue();
			colTotal += sheet.getRange(j, i).getValue();
		}
		sheet.getRange(i, 10).setValue(rowTotal);
		sheet.getRange(10, i).setValue(colTotal);
	}
}

※関連コンテンツ

「初心者のためのGoogle Apps Scriptプログラミング入門」に戻る