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

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

作成:2011-06-17 08:09
更新:2011-11-04 15:31

■選択されたRangeの操作

セルの範囲(レンジ)の操作は、特定のエリアを指定して行う他に、「現在、選択されている範囲のセルを操作する」というようなやり方も用いられます。

選択された範囲は、SpreadsheetAppオブジェクトのgetActiveRangeメソッドで得ることができます。
変数 = SpreadsheetApp.
    getActiveRange();
これで、その範囲を示すRangeオブジェクトが得られます。ここから必要な情報をとり出し、処理を行っていくことになります。

○選択された範囲の値を利用する
まず、「選択された範囲の値を取り出して利用する」ということから考えてみましょう。値を利用するのは、比較的簡単です。以下のようにしてRangeから値の情報だけをまとめて取り出せるのです。
変数 = 《Range》.getValue();
変数 = 《Range》.getValues();
getValueは、1つの値だけが得られます。複数のセルを選択してあった場合には、それらの中から一番最初に位置するセル(基本的には左上にあるセル)の値のみが得られます。

これに対し、getValuesは、すべての値を返します。縦横に複数の列と行が選択された状態でもその状態のまま値が得られるよう、値は2次元配列の形となっています。従って、取り出した値を繰り返しなどで処理することで、すべての値をしょりすることもできるようになります。

下のリスト欄に「選択範囲の値を合計」としてサンプルを挙げておきました。これは、選択された範囲の値をすべて合計し、結果をmsgBoxで表示するものです。

○選択された範囲のセルを操作する
単に値を取り出すだけでなく、選択された範囲のセルを扱うためには、自分でその範囲内の1つ1つのセルを取り出していくしかありません。Rangeでは「getCell」というメソッドで、特定のセルのRangeを取り出すことができます。
変数 = 《Rnage》.getCell( 行 , 列 );
このgetCellでは、選択範囲内の相対位置として行と列を指定します。例えば、getCell(1,1)ならば、選択範囲の左上にあるセルを示すRangeが返されます。シート全体における絶対位置ではないのです。ですから、Rangeから縦横の行数・列数だけ繰り返しを行うことで、選択されたすべての範囲を操作できるようになります。

ただし、そのためには「選択された範囲の列数・行数」の数を調べなければいけません。これは以下のようなものを使います。
変数 = 《Range》.getNumRows();
変数 = 《Range》.getNumColumns();
これで選択範囲の列数・行数がわかりますから、これらの値を元にして繰り返しを行い、各セルを操作していけばよいでしょう。この他、選択されたセルがどこから始まっているのかを調べるのに、
変数 = 《Range》.getRow();
変数 = 《Range》.getColumn();
このようなメソッドも用意されています。これはそのレンジが、シートの左上から何行目・何列目に位置しているかを調べるものです。これと、先ほどのgetNumRows/getNumColumnsを組み合わせることで、選択された範囲がシート内のどの領域にあるかを知ることができるでしょう。

下のリスト欄に「選択範囲のセルを操作」としてサンプルをあげておきました。選択された範囲に、掛け算(九九)の式をずらっと書きだしていくものです。ここでは、getValuesで値をとり出し、二重の繰り返しの中で、total += vals[objs][obj] * 1;というようにして2次元配列から値を順にとり出しています。

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

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

●プログラム・リスト●

※選択範囲の値を合計
function myFunction() {
	var range = SpreadsheetApp.getActiveRange();
	var vals = range.getValues();
	var total = 0;
	for(objs in vals){
		for(obj in vals[objs]){
			total += vals[objs][obj] * 1;
		}
	}
	Browser.msgBox(total);
}


※選択範囲のセルを操作
function myFunction(){
	var range = SpreadsheetApp.getActiveRange();
	var r = range.getNumRows();
	var c = range.getNumColumns();
	var total = 0;
	for(var i = 1;i <= r;i++){
		for(var j = 1;j <= c;j++){
			range.getCell(i,j).setValue(i + " * " + j + " = " + (i * j));
		}
	}
}

※関連コンテンツ

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