はじめに
Google Apps Scriptでは、GoogleドキュメントのみならずGoogleコンタクトやGoogleカレンダーなど多くのサービスにアクセスすることができます。それらをGoogleスプレッドシートから利用してみましょう。
対象読者
- Web版オフィスアプリケーションの導入を考えている方。
- GoogleドキュメントまたはGoogle Appsを既に使っている人。
- 各種のWebサービスの自動化を考えている人。
スクリプトを関数として使う
前回、Google Apps Scriptの基本操作と、スプレッドシートの基本的な扱いについて説明をしました。今回は、スクリプトの利用についてさらに深く考えてみましょう。まずは、「スクリプトを関数としてセルに設定する」ということからです。
Google Apps Scriptは、関数としてスクリプトを定義しますが、この関数は、Googleスプレッドシートに用意されている関数と同様にセルに設定し、自動的に計算させることが可能です。実際に簡単なサンプルを作ってみましょう。
function myFunc(n){ var total = 0; for(var i = 1;i <= n;i++) total += i; return total; }
これは、セルでの利用を考えた関数です。ゼロから、引数に渡された値(整数)までの合計を計算してreturnするというごく単純なものです。例えばA1セルに「100」と記述し、A2セルに「=myFunc(A1)」というように関数を設定してみましょう。「5050」という数字が自動的に計算され表示されます。セルでの利用を考えた関数は、以下の2点を考えて設計する必要があります。
- 他のセルの値などを利用して処理をする場合、引数にセルの指定を渡して処理をします。このとき、例えば「=myFunc(A1)」というようにA1セルが指定されると、myFunc関数の仮引数nにはA1セル(のRange)ではなく、A1セルの値が渡されます。
- 計算結果は、returnで返します。この値が、関数を設定したセルに表示されます。
セルの指定が引数で渡されると、スクリプトの仮引数にはセル自体ではなくその値が渡される、という点にさえ注意すれば、関数を作成するのはそれほど難しくはありません。ただし、ここでの例は、単純に「1つのセルが選択された場合」のみを想定していました。が、実際には多数のセルを範囲指定して処理をする場合もあります。
こうした場合、スクリプトの仮引数には、指定されたセル範囲の値が2次元配列としてまとめられて渡されます。ですから、二重の繰り返しなどにより渡された配列の要素を処理するようにスクリプトを記述する必要があります。例をあげましょう。
function myFunc(arr){ var total = 0; for(var i = 0;i < arr.length;i++) for (var j = 0;j < arr[i].length;j++) total += arr[i][j] * 1; return total; }
これは、選択されたセルの値すべてを合計する(つまり、SUM関数と同じ処理をする)サンプルです。二重の繰り返しを使い、仮引数のarrから順に値を取り出し処理しています。
このように単独セルと、複数セルの場合で引数の扱いが多少変わります。両方のケースに対応させたい場合は、渡された値の内容を確認し、単独セルか複数セルかで処理を分岐するなどすればよいでしょう。