×

[PR]この広告は3ヶ月以上更新がないため表示されています。
ホームページを更新後24時間以内に表示されなくなります。



>> ユーザーガイド >> スクリプトの実行 >> スクリプトエディタ | カスタム関数 | Web Apps | ガジェット | コンテナの拡張 | 時間駆動トリガー | コンテナ固有トリガー |


スプレッドシートのカスタム関数

カスタム関数はmyFunctionName()という構文を使います。スプレッドシートのセルから直接呼び出される関数です。


WWW GoogleStyle


カスタム関数を書く

カスタム関数は通常、次のような形式になっています。


function
customFunctionName(arg1, arg2, ..., argN) {
// The code for your custom function goes here ... // The value you return here will be displayed in the cell in the Spreadsheet // in which the custom function is entered
return
someValue; }

次に挙げる例は、インチをミリメーターに変換するカスタム関数の作成方法を手順を追って示したものです。

  1. カスタム関数は、スプレッドシートにバインドされているスクリプトにのみ適用されるので、最初にGoogle.Driveから既存のスプレッドシートを開くか新規に作成します。 そして、Tools > Script Editorと選択します。
  2. スクリプトエディタに下のコードをコピー・ペーストしてスクリプト名を与えた後保存します。

function
in2mm(inNum) {
// Function to convert from INCHES to MILLIMETERS
var
outNum =
0
;
// this will hold the answer
var
factor =
25.4
;
// multiply input by this factor to get output
if
(
typeof
inNum !=
"number"
) {
// check to make sure input is a number
throw
"input must be a number"
;
// throw an exception with the error message
} outNum = inNum * factor;
// calculate the answer
return
outNum;
// return the answer to the cell which has the formula
}

カスタム関数ができたので、スクリプトの一行毎の動きを分析していきましょう。


function
in2mm(inNum) {
// code
}

これはJavaScript関数の作り方と同じで、ここではin2mmという名前の付けられたスプレッドシートのカスタム関数です。 スプレッドシートの数式として呼び出されることを意図して作られるカスタム関数は、いくつかの入力値を受け入れるよう作成されていることに注意してください。上のコード例の変数名inNumがそれで、変数と呼ばれるinNumを媒介して参照される1つの入力値を受け入れます。

カスタム関数を作成する場合、これらが独立して実行されると思ってはいけません。いくつかの式によってスプレッドシートのセルに何らかの入力をする代役的なものだということです。
ここに示したコードは基本的なJavaScript以上のものを何ら必要としていません。また、ここでは特別なSpreadsheetオブジェクトやGoogle.Apps.Scriptからのメソッドなども利用していません。


 
var
outNum =
0
;

上のコードはoutNum(初期値は0に設定)と呼ばれる、スプレッドシートのセルに返す最終的な答えを保持する変数を作成しています。


 
var
factor =
25.4
;

ここで変換要因であるインチからミリメートルへの換算係数を変数factorに設定します。


  
if
(
typeof
inNum !=
"number"
) {
// check to make sure input is a number
throw
"input must be a number"
;
// throw an exception with the error message
}

上のコードは関数に入力された値が数値であるかどうかをチェックします。数値でない場合はエラーメッセージを含む文字値が例外としてスローされます。 Google.Apps.Scriptではスプレッドシートのセル内にエラーメッセージ -- #ERROR!を表示すると同時にコメント付けてこの例外を処理します。 return()が呼ばれたときに実行が終了してスプレッドシートのセル内に値が返ります。


outNum = inNum * factor;

上の行が変換係数により入力値を乗じてインチをミリメートルに変換するための計算を行います。そして、結果となる値は前もって宣言されているoutNum変数に格納されます。


return
outNum;

このようにして関数が、=in2mm()の式を含むスプレッドシートのセル内に結果を返します。



スプレッドシートのカスタム関数を利用する

カスタム関数を利用することは、スプレッドシート内で数式を使うこと(built-in Spreadsheet forumals and functions)に似ています。

これを試すには、上記で作成したin2mm関数を使用することができます。スプレッドシートのセルA1に=in2mm(10)と入力してEnterを押します。しばらくThinking...が表れ、結果の254がA1セルに表示されます。
代わりにもし、セルに"#NAME?"というエラーメッセージが表示された場合は、スプレッドシートが関数を発見できなかったということです。関数名を正しいスペルで入力したか確かめましょう。

スクリプトを再スキャンして正しい関数を見つけるためにしばらく時間がかかるかもしれません。
手動でTools>Script.Manager...と選択してReloadボタンをクリックすれば直ぐにスキャンを開始します。

カスタム関数への入力を他のセルの値の参照で行うこともできます。たとえば、セルA2に1を入力し、セルB2に=in2mm(A2)を入力すれば、セルB2に結果の25.4が表示されます。

カスタム関数は値を返しますが、カスタム関数のあるセル以外のセルに値を設定することはできません。つまりほとんどの環境では、セルA1のカスタム関数がセルA5に変更を加えることはできません。

ただし、カスタム変数がダブル配列を返す場合があります。
この場合、結果は関数を含むセルのオーバーフローとなって、セルの下側と右側を埋めてしまいます。サンプルコードをreturn[[1,2],[3,4]];としてみればテストできます。



権限とカスタム関数

カスタム関数は、現在のスプレッドシートからデータを読み取ることができ、SOAPなど、URLFETCHとGoogle翻訳のような匿名サービスを呼び出すことができます。 匿名サービスは、実行のためのユーザーの資格情報が不必要なサービスです。

ただし、カスタム関数は他の関数には無いいくつかの制約があります。たとえば、カスタム関数はサイレントモードで実行するとユーザー固有のサービスにアクセスすることが許可されません。 ユーザー固有のサービスとは、Googleカレンダーなどの特定のユーザに関連付けられているサービスで、個人データにアクセスしたり、メール送信などのタスクの実行をユーザーとして作用します。


2012-10-15


pageTOP