ADVERTISEMENT

【Googleスプレッドシート】Apps Scriptのカスタム関数!セル内で呼び出せる関数化

【Googleスプレッドシート】Apps Scriptのカスタム関数!セル内で呼び出せる関数化
🛡️ 超解決

Googleスプレッドシートで独自の計算や処理をセル内で実行したいとお考えではありませんか。Apps Scriptを使えば、自分で定義した関数を「=関数名(引数)」の形で呼び出せるようになります。この記事では、カスタム関数の作成手順から注意点までを詳しく解説します。

カスタム関数を使うと、複雑な計算や繰り返しの処理を数式のようにシンプルに記述できます。例えば、消費税計算やテキストの加工など、組み込み関数では対応が難しい処理も自由に実装できます。初めての方でもステップバイステップで理解できるように、具体例を交えて説明します。

【要点】カスタム関数をセル内で使うための3つのポイント

  • =関数名(引数)の構文で呼び出す: 自作関数は組み込み関数と同じようにセルに数式として入力します。関数名は半角英数字で書きます。
  • スクリプトエディタで関数を定義する: 拡張機能メニューからApps Scriptエディタを開き、functionで処理を記述します。戻り値はセルの値になります。
  • 引数はセル範囲を配列で受け取る: セル範囲を渡すと2次元配列になるため、ループ処理などで扱います。単一セルはスカラー値として渡ります。

ADVERTISEMENT

カスタム関数の仕組みとできること

カスタム関数は、Googleスプレッドシートのセル内で「=関数名(引数)」と入力して呼び出せる関数です。この関数はGoogle Apps Script(JavaScriptベース)で記述します。組み込み関数では実現できない独自のロジックを数式のように使える点が最大のメリットです。

例えば、指定したセル範囲から条件に合う値だけを合計する、文字列を特定のルールで変換する、外部APIからデータを取得するといった処理も可能です。ただし、カスタム関数にはいくつかの制限があります。処理時間は30秒以内、ネットワーク呼び出しはサービス制限に従う、引数にセル範囲を渡すと2次元配列になる点を理解しておく必要があります。

カスタム関数を作成する手順

ここでは、実際にカスタム関数を作成してスプレッドシートで使う方法を説明します。例として、税抜価格から税込価格(消費税10%)を計算する関数を作ります。

手順1: スクリプトエディタを開く

  1. 拡張機能メニューを開く
    Googleスプレッドシートのメニューバーから「拡張機能」をクリックし、「Apps Script」を選択します。新しいタブでスクリプトエディタが開きます。
  2. プロジェクト名を設定する
    エディタ左上の「無題のプロジェクト」をクリックして、わかりやすい名前(例:カスタム関数)に変更します。

手順2: 関数を記述する

  1. 関数を定義する
    エディタのコード領域に以下のように関数を記述します。関数名は「TAX_INCLUDED」とします。引数は税抜価格(price)です。
function TAX_INCLUDED(price) {
  const taxRate = 0.1;
  return price * (1 + taxRate);
}
  1. 保存する
    「保存」アイコン(フロッピーディスク)をクリックするか、Ctrl+S(Mac: Cmd+S)で保存します。初回はプロジェクト名と一緒に保存されます。

手順3: スプレッドシートで呼び出す

  1. セルに関数を入力する
    スプレッドシートに戻り、任意のセルに「=TAX_INCLUDED(A1)」と入力します。A1セルに税抜価格(例:1000)が入っていれば、結果は1100と表示されます。
  2. オートフィルで適用する
    関数を入力したセルの右下をドラッグすると、他の行にも同じ計算を適用できます。

カスタム関数使用時の注意点とよくあるトラブル

引数にセル範囲を渡した場合の挙動

カスタム関数にセル範囲(例:=SUM_CUSTOM(A1:A10))を渡すと、引数は2次元配列になります。各行が内部配列、各列が要素です。例えば、=MY_FUNC(A1:B2)とすると、引数は[[A1,B1],[A2,B2]]のような配列になります。単一セルを直接指定した場合はスカラー値が渡ります。

この性質を利用して、範囲全体をループ処理することができます。ただし、配列の要素は空セルの場合も含まれるため、undefinedや空文字の扱いに注意が必要です。

再計算が行われない場合がある

カスタム関数は、引数として渡したセルが変更されたときだけ再計算されます。関数内で参照している他のセルや、スプレッドシート外のデータ(他のシートや外部API)を変更しても、自動的には再計算されません。強制的に再計算させるには、関数の引数にダミーのセルを追加するか、スプレッドシートの「ファイル」→「設定」→「計算」で再計算のトリガーを調整します。

Time Limitエラー(30秒制限)

カスタム関数の実行時間は30秒に制限されています。大量のセルに複雑な関数を適用するとタイムアウトする可能性があります。その場合は、処理を簡略化するか、関数の呼び出し回数を減らす工夫が必要です。また、無限ループに陥らないように注意してください。

権限の許可が必要な場合

カスタム関数が特定のサービス(スプレッドシートの別シートへのアクセス、メール送信など)を利用する場合、初回実行時に許可を求められます。ユーザーが承認しないとエラーになります。許可ダイアログが表示されたら、必要な権限を確認して「許可」をクリックしてください。

ADVERTISEMENT

カスタム関数と組み込み関数の比較

項目 カスタム関数 組み込み関数
定義方法 Apps ScriptでJavaScriptコードを記述 Googleが提供する既定の関数
柔軟性 高い(独自ロジック、外部APIなど) 低い(決められた機能のみ)
パフォーマンス 遅い(サーバーサイド実行) 高速(ネイティブ実行)
制限 実行時間30秒、引数はセル範囲で配列 引数や式の長さに制限あり
再利用性 複数のスプレッドシートで共有可能(スクリプトをコピー) すべてのスプレッドシートで利用可能
学習コスト JavaScriptの知識が必要 関数の使い方を覚えるだけ

よくある失敗例と対処法

関数名が正しく認識されない

カスタム関数を呼び出すとき、関数名は大文字小文字を区別しません。ただし、スペルミスや半角英数字以外の文字が含まれているとエラーになります。関数名は半角英数字とアンダースコアのみを使用し、先頭は数字にしないでください。

エラー「#ERROR!」が表示される

関数内で文法エラーがある場合や、戻り値がスプレッドシートで扱えない形式(例えばオブジェクトや配列のまま)だとエラーになります。戻り値は数値、文字列、日付、またはそれらの配列など、セルに表示可能な型にしてください。また、関数内で例外がスローされてもエラーになります。try…catchでエラーハンドリングを実装することをおすすめします。

同じ関数を何度も呼び出すと結果が変わらない

カスタム関数は、引数が変わらない限り前回の結果をキャッシュする場合があります。強制的に再計算するには、引数に現在時刻やセルの変更履歴を参照するダミー引数を追加する方法があります。ただし、キャッシュはスプレッドシートの設定に依存するため、頻繁に更新が必要な処理は注意してください。

まとめ

カスタム関数を使うことで、Googleスプレッドシートの可能性を大きく広げられます。この記事では、基本的な作成手順と注意点を学びました。最初は簡単な計算関数から始め、徐々に条件分岐や繰り返し処理を組み込んでみてください。例えば、指定した文字列を結合するCONCAT_CUSTOM関数や、条件に合う行だけを抽出するFILTER_CUSTOM関数など、応用の幅は無限です。また、引数にセル範囲を渡すときの配列処理に慣れれば、QUERY関数やFILTER関数の代わりになる処理も自作できます。ぜひ、実際にスクリプトエディタを開いて、あなただけの便利なカスタム関数を作ってみてください。


ADVERTISEMENT

この記事の監修者
✍️

超解決 第一編集部

疑問解決ポータル「超解決」の編集チーム。正確な検証と、現場視点での伝わりやすい解説を心がけています。