私は何か基本的なことにこだわっています。 Googleスプレッドシートのカスタム関数に引数を渡すにはどうすればよいですか。
Apps Scriptコードエディターに次のように定義された関数があります。
function usageByMonth(range,theDate) {
[ do something with the arguments passed ]
}
私のGoogleシートでは、関数は次のように使用されています
=usageByMonth('Source Meter Readings'!A5:A,B1)
関数をデバッグしようとすると、2つの引数が「未定義」であることがわかりました。私は多くの投稿を見てきましたが、例から直接関数をコピーしても同じ結果が得られました。
コードエディターから関数を実行しても、引数は取得されません。その場合、引数は常に未定義になります。これは、onEdit()
単純トリガーを使用する場合などにも当てはまります。関数に渡された引数を取得する唯一の方法は、有効なカスタム関数をスプレッドシートのセルに入力することです。
コードエディターからカスタム関数のコードをテストする場合は、引数値を「ハードコード」する必要があります。
また、カスタム関数がシートで計算されるとき、Logger.log()
はログに何も記録しません。
機能する単純なカスタム関数から始めて、それを基に構築します。
カスタム関数のコードに範囲を渡したい場合は、2次元配列が何であるかを理解する必要があります。
[ [inner Array One], [inner Array Two], [etc] ]
範囲からのデータは、2次元配列に入れられます。外部配列は1つで、内部配列があります。内部配列には、範囲内の列数と同じ数の要素があります。
[ ['single value from first column', 'single value second column'] ]
上記の2D配列は、2行2列の1行のみです。
したがって、テストとして単純なカスタム関数を作成するには、関数を作成します。
function myCustomFunction(argOne) {
return argOne[0][0];
};
範囲がA1:B5の場合、カスタム関数はA1の値を返します。
=myCustomFunction(A1:B5)
確実に知る唯一の方法は、引数が.gsサーバー関数に渡されたかどうか、結果を返すかどうかです。
使用できない入力があります。許可されていない入力を使用する場合、(ドキュメントから引用するには):
カスタム関数がこれらの揮発性組み込み関数のいずれかに基づいて値を返そうとすると、Loading ...が無期限に表示されます。
たとえば、NOW()またはRand()を引数として使用することはできません。
関数の引数の区切り文字は、スプレッドシートのロケールに依存します。スプレッドシートロケールが10進数の区切り文字としてカンマを使用する場合、引数の区切り文字はセミコロンです。
=usageByMonth('Source Meter Readings'!A5:A; B1)
そうしないと、小数を関数に渡すことができなくなります。
A5:A
の範囲である可能性があります。A5:A1000
またはA:A
を試してください。セルアドレスA5
と列アドレスA
を混在させると、APIが混乱する可能性があります。