セルのプロパティを操作する
続いて、セルのプロパティを操作してみましょう。例として、セルの背景色を変更してみます。ここでは、各セルの値をチェックし、プラスなら青、マイナスなら赤の背景色に設定してみましょう。
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);
if (cell.getValue() < 0)
cell.setBackgroundColor("#fAA");
else
cell.setBackgroundColor("#AAf");
}
}
}

基本的な流れは前回のサンプルとほぼ同じです。背景色を設定するのに、「setBackgroundColor」というメソッドを使っています。これは文字通り背景色を指定するものです。値は、CSSで使われる値(色の名前や16進数による指定)をそのまま使います。例えば、赤に設定するなら、「setBackgroundColor("red")」「setBackgroundColor("#F00")」というように値を設定します。
このsetBackgroundColorのようなプロパティを操作するメソッドも、setValueなどと同様に、Rangeで指定されているすべてのセルに対して実行することが可能になります。例えば、このようにすれば、選択したすべてのセルの値と背景色がまとめて変更されます。
function myFunction() {
var range= SpreadsheetApp.getActiveRange()
range.setBackgroundColor("#fAA");
range.setValue("※選択されたセル");
}

Rangeは、このようにそれが示すセルが1つでも複数でも同じようにメソッドを呼び出すだけで処理を実行することが可能です。
メニューを作成する
最後に、作成したスクリプトを簡単に利用できるようにする方法として、オリジナルのメニューを作成する方法について説明しておきましょう。メニューはSpreadsheet単位で独自に組み込むことができます。これはSpreadsheetにある次のようなメソッドを呼び出して行います。
《Spreadsheet》.addMenu( メニュー名 , 配列 );
第1引数には表示するメニュー名、第2引数には組み込むメニューに関する情報をまとめた配列を渡します。この配列には、組み込むメニューの名前と実行する関数名を次のような形でまとめておきます。
[
{ name: メニュー項目名 , functionName: 関数名 },
{ name: メニュー項目名 , functionName: 関数名 },
……必要なだけ記述……
]
これで、nameに指定した名前のメニュー項目が作成され、そのメニューを選ぶと、functionNameに指定された関数が実行されるようになります。
このaddMenuによるメニューの組み込みは、スプレッドシートを開いたときに実行するのが最もベストでしょう。これには「onOpen」というイベントを利用します。これはGoogleスプレッドシートに用意されているイベントで、スプレッドシートを開く際に、onOpen関数を自動的呼び出すようになっています。これを利用することで、スプレッドシートを開くとメニューが自動的に設定されるようにできます。
では、実際に簡単なメニューを組み込むサンプルを作ってみましょう。
function onOpen() {
var arr = [
{name: "背景色の設定", functionName: "changeBgColor"},
{name: "文字色の設定", functionName: "changeTxtColor"}
];
var spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
spreadsheet.addMenu("マイメニュー", arr);
}
function changeBgColor() {
var value = Browser.inputBox("背景色を入力:");
if (value != ""){
var range= SpreadsheetApp.getActiveRange();
range.setBackgroundColor(value);
}
}
function changeTxtColor() {
var value = Browser.inputBox("テキスト色を入力:");
if (value != ""){
var range= SpreadsheetApp.getActiveRange();
range.setFontColor(value);
}
}

スクリプトエディタでスクリプトを記述し、それを[ファイル]メニューの[保存]で保存してください。そして、一度スクリプトエディタとスプレッドシートを閉じ、再び開いてみましょう。メニューバーの[ヘルプ]の右側に、自動的に[マイメニュー]というメニューが追加されます。
このメニューには、選択されたセルの背景色とテキスト色を変更するメニュー項目を用意してあります。メニューを選んで色の値を入力すると、選択されたセルの背景色やテキスト色が変更されます。背景色はsetBackgroundColorで変更できますが、テキストの色はRangeの「setFontColor」というメソッドで変えることができます。使い方はsetBackgroundColorと同じですので、それぞれで試してみてください。
まとめ
以上、Google Apps Scriptの基本的な使い方から、セル関係のごく初歩的な操作までを一通り説明しました。一読してどのような印象を持ったでしょうか。既にExcelなどのマクロを使ったことがあれば、感覚的にほぼ同じような形でシートやセルを操作できることに気がついたでしょう。使用する言語はJavaScriptですが、既にExcelなどを使いこなしているユーザーのことを考え、それほど違和感なくスクリプトが書けるように配慮しているのでしょう。
現時点で、スクリプトエディタも、またシートやセルの実装についても、ほぼ基本的なものは一通り揃っており、すぐにでも実用として使えるようになっています。とはいえ、もちろんまだ足りない機能もあります。例えば、Excelではマクロの自動記録機能などがあり、これで簡単にマクロを生成できましたが、こうした機能はまだGoogle Apps Scriptにはありません。またスクリプトエディタも、デバッグ環境などの整備は今後の課題と言えるでしょう。
しかしながら、Webアプリケーションでありながら、こうした実用レベルのスクリプト言語が搭載されたという点は、高く評価されるべきでしょう。単なる表計算としてしか使っていないのであれば、基本的な表の機能と関数程度が揃っていれば十分でしょうが、本格的な業務にExcelなどを使っているユーザーにとって、「マクロすらない表計算ソフト」は貧弱でとても移行する気にはなれません。Google Apps Scriptにより、Googleドキュメントはようやく「本格的な業務利用に耐えうるスプレッドシート」と認められるようになった、と言えるのではないでしょうか。

