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

スクリプトの実行とイベントハンドラ (1/5)

作成:2011-06-22 07:47
更新:2011-11-04 15:48

■グラフィックボタンでスクリプトを実行する

スクリプトエディタで関数を書いて実行する――という、ごくごく初歩的な使い方についてはわかってきましたが、これだけではちょっと実用に使うことは難しいですね。もっとスクリプトを便利に使うための機能について、考えていくことにしましょう。

まずは、「スクリプトを実行する方法」についてです。スクリプトエディタで実行するのでなく、もっと簡単にスクリプトを実行できるようにする方法を考えましょう。誰もが思いつくのは、「スプレッドシートに何らかのGUIを用意して、スクリプトを呼び出せるようにする」ということでしょう。例えば、シートにボタンを置いて、それをクリックして実行する――これならだいぶ使いやすくなりそうです。

Googleドキュメントのスプレッドシートでは、シートにグラフィックを貼り付けることができます。<挿入>メニューの<図形描画...>メニューを選び、現れたダイアログで図形を作成して「保存して閉じる」ボタンを押せば、シートに描いた図形が貼り付けられます。

図形の形は、上にあるツールバーのアイコンから様々な形のものが選べます。「図形」アイコンからポップアップして現れる図形の中には、プッシュボタンの図形も用意されています。

シートに貼りつけた図形は、Ctrlキー+左ボタンクリックすると、図形の枠が表示され、「図形描画」というタイトルが表示されます。この部分をクリックするとメニューがプルダウンして現れます。このメニューから<スクリプトを割り当て...>というのを選んでみましょう。画面にスクリプトの名前を入力するダイアログが現れます。ここで、実行させる関数名を入力すると、このボタンをクリックして指定の関数を実行させることができるようになります。

では、簡単なサンプルスクリプトを用意して、これをボタンに割り当ててみましょう。下のリスト欄にサンプルとして「myFunction」関数のコードを挙げておきます。これは、セルの範囲を選択すると、その右側と下側に、縦横の合計を計算して出力するフォーミュラを設定する、というものです。

スクリプトエディタで関数を記述したら、グラフィックでボタンをシートに作成し、<スクリプトを割り当て...>メニューで「myFunction」と入力しましょう。そして、シートに適当に数値を入力し、その範囲を選択してからボタンをクリックしてください。選択されたレンジの右隣と下隣のセルに、各列と行の合計が計算され表示されます。

今回のスクリプトで行っていることは、すべて前回までに説明したことばかりです。getNumRows, getNumColumns, getRow, getColumnでレンジの範囲を調べ、これらの値を元に繰り返しで処理を行います。合計の式は、以下のようにして作成しています。

for(var i = x;i < (x + r);i++){
    sheet.getRange(i,y + c).setFormulaR1C1
        ('=SUM(R'+i+'C'+y+':R'+i+'C'+(y+c-1)+')');
}
for(var i = y;i < (y + c);i++){
    sheet.getRange(x + r,i).setFormulaR1C1
        ('=SUM(R'+x+'C'+i+':R'+(x+r-1)+'C'+i+')');
}
行と列の数字を元に、R1C1形式SUM関数の範囲を指定しています。セルに生成されたフォーミュラがどのようになっているか、実際に動かしてみて確認してみましょう。

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

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

●プログラム・リスト●

function myFunction() {
	var range = SpreadsheetApp.getActiveRange();
	var sheet = SpreadsheetApp.getActiveSheet();
	var r = range.getNumRows();
	var c = range.getNumColumns();
	var x = range.getRow();
	var y = range.getColumn();
	for(var i = x;i < (x + r);i++){
		sheet.getRange(i,y + c).setFormulaR1C1
			('=SUM(R'+i+'C'+y+':R'+i+'C'+(y+c-1)+')');
	}
	for(var i = y;i < (y + c);i++){
		sheet.getRange(x + r,i).setFormulaR1C1
			('=SUM(R'+x+'C'+i+':R'+(x+r-1)+'C'+i+')');
	}
}

※関連コンテンツ

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