名前付き関数を使用すると、スプレッドシートの組み込みの数式を使用するカスタム関数を作成できます。名前付き関数をインポートする機能により、複数のシートで名前付き関数を使い回すことができます。
サンプル スプレッドシートを入手し、動画を見ながら実際に使ってみるには、以下の [コピーを作成] をクリックしてください。
名前付き関数を開く
- 新規または既存のスプレッドシートで、[データ] [名前付き関数] をクリックします。
数式を含むセルの場合は、以下の操作を行います。
- 数式を含むセルを右クリックします。
- [セルでの他の操作項目を表示] [名前付き関数を定義] をクリックします。
名前付き関数を作成する
名前付き関数を作成する際は、テキストを入力のプレースホルダとして使用します。
たとえば、IF 関数
は、最大 3 つの引数を取ります。
IF(論理式, TRUE値, FALSE値)
「logical_expression
」、「value_if_true
」、「value_if_false
」というテキストを引数としてセルに挿入すると、エラーが発生します。これらの引数はプレースホルダであり、関数が想定する入力の種類を説明します。さまざまな入力を取る関数を作成したい場合は、名前付き関数を作成する際に引数のプレースホルダを定義する必要があります。
これまで、カスタム関数を作成するには Apps Script を使って JavaScript で関数を記述する必要がありました。名前付き関数により、コードを書かなくても直感的なインターフェースを使ってカスタム関数を作成することが可能になります。
- 関数名
- 関数をセルに挿入するために使用する関数の名前です。大文字で表記します。
- 要件は次のとおりです。
- スプレッドシートの組み込みの関数(
SUM
など)と同じ名前を使用することはできません。 TRUE
やFALSE
という名前は使えません。- 「A1」や「R1C1」の構文では使用できません。
- たとえば、関数に「A1」や「AA11」などの名前を付けると、エラーが発生します。
- 名前の先頭を数字にすることはできません。
- 254 文字以下にする必要があります。
- スペースは使用できません。
- アンダースコア以外の特殊文字は使用できません。
- スプレッドシートの組み込みの関数(
- 関数の説明
- 関数の説明です。関数のヘルプボックスの [概要] セクションに表示されます。
- 引数のプレースホルダ(省略可)
- プレースホルダは、その関数が要求する入力の種類の記述です。たとえば、「
CELL
」や「RANGE
」という引数名は、関数が参照する入力値が 1 つのセルまたはセルの範囲になると考えられる場合に使用します。 - 要件は次のとおりです。
- 同一の名前付き関数内の別の引数のプレースホルダと同じ名前にすることはできません。
- 「A1」や「R1C1」の構文では使用できません。
- たとえば、プレースホルダに「A1」や「AA11」などの名前を付けると、エラーが発生します。
- スペースは使用できません。
- アンダースコア以外の特殊文字は使用できません。
- プレースホルダは、その関数が要求する入力の種類の記述です。たとえば、「
- 数式の定義
- セルに挿入する数式です。定義済みの引数を関数に含めると、セルに関数を挿入する際に各引数の入力が要求されます。
- 要件は次のとおりです。
- 解析可能な数式である必要があります。
- 括弧の抜けがないようにします。
- カンマが正しく配置されている必要があります。
その他の情報
上記の主要要素を設定したら、2 ページ目でさらに詳細を追加できます。定義するすべての引数のプレースホルダに対し、次の項目を設定できます。
- 引数の説明
- その関数が想定する引数の簡単な説明です。たとえば、「検索する単一の値」といった説明を記載します。
- 引数の例
- その引数の入力例です。たとえば、セル範囲を入力する引数の場合は、「B3:B14」という例を記載します。
これらの情報は、主要要素とともに、名前付き関数をセルに追加する際の関数のヘルプボックスに表示されます。
名前付き関数をインポートする
名前付き関数をさらに作成したり、他のユーザーが作成した便利な関数を見つけたりしたら、それらの関数をさまざまなシートで使えるようにします。作成した名前付き関数を再利用するには、次の手順に沿ってそれらの関数を別のシートから現在のシートにインポートします。
- パソコンで Google スプレッドシートを開きます。
- 名前付き関数の読み込み先となるシートを開きます。
- 上部の [データ] [名前付き関数] [関数をインポート] をクリックします。
- 読み込み元のシートを選択します。
- インポートする名前付き関数を選択します。
- すべての名前付き関数をファイルからインポートする場合は、[すべてインポート] をクリックします。
- [Import(インポート)] をクリックします。
ヒント:
- インポート対象として選択した名前付き関数と同じ名前の名前付き関数が、現在開いているファイル内に存在する場合: インポートされた関数が既存の名前付き関数をオーバーライドします。
- 数式の定義のように、インポート対象として選択した名前付き関数が、別の名前付き関数に依存している場合: スプレッドシートが依存関係に関して警告し、他の関数に依存する関数をハイライト表示します。
- インポート対象として選択した名前付き関数が、外部のソースとやり取りする数式を使用している場合(
IMAGE
など): Google スプレッドシートは、外部ソースとのやり取りに関する警告を表示します。
例
2 つの引数のプレースホルダがある名前付き関数
- 関数名:
CONTAINS
- 説明: 指定された値が範囲内に存在するかどうかを確認します。値が存在する場合は
TRUE
、存在しない場合はFALSE
を返します。 - 引数のプレースホルダ:
search_query
、search_range
- 定義:
=NOT(ISERROR(MATCH(search_query,search_range,0)))
- 詳細:
- 引数の説明:
search_query
- 検索する値を指定します。
- 引数の例:
search_query
- B3
- 引数の説明:
search_range
- 値を検索する範囲を指定します。
- 引数の例:
search_range
- B3:B14
- 引数の説明:
引数のプレースホルダのない名前付き関数
- 関数名:
NAMED_FUNCTIONS_SLOGAN
- 説明: 名前付き関数の魅力的な説明文を出力します。
- 定義:
="名前付き関数を使用すると、数式の使いやすさと読みやすさが向上します。"
再帰呼び出しを使用する名前付き関数
- 関数名:
REVERSE_WORDS
- 説明: 文字列内の単語の順序を逆にします。
- プレースホルダ:
str
- 定義:
=IF(ISERROR(FIND(" ", str)), str, REVERSE_WORDS(RIGHT(str, LEN(str)-FIND(" ", str)))&" "&LEFT(str, FIND(" ",str)-1))
- 詳細:
- 引数の説明:
str
- 語順を逆にしたい文字列を指定します。
- 引数の例:
str
- "reversed need you String"
- 引数の説明:
LAMBDA を使用した名前付き関数
- 関数名:
COUNT_FORMULAS
- 説明: 指定した範囲内に存在する数式の数を計算します。
- プレースホルダ:
range
- 定義:
=COUNTIF(MAP(range,LAMBDA(cell, ISFORMULA(cell))),"TRUE")
- 詳細:
- 引数の説明:
range
- 数式を検索する範囲を指定します。
- 引数の例:
search_range
- A2:D7
- 引数の説明:
よくある質問
名前付き関数内で、相対参照を使って範囲を指定することはできますか?できません。数式の定義に含まれる範囲はすべて絶対参照で指定する必要があります。定義に含まれる範囲が相対参照だった場合は、絶対参照の範囲に変換されます。たとえば、「A1:B3」という範囲が指定された場合、シートへの保存時に「1!$A$1:$B$3」に変換されます。引数として相対参照の範囲を名前付き関数に渡すことは可能です。
はい。引数のプレースホルダには、組み込み関数と同じ名前を付けることができます。たとえば、引数のプレースホルダに「SUM」という名前を付けてもかまいません。ただし、一緒に使用した場合、引数のプレースホルダが組み込み関数よりも優先されます。
はい。パラメータなしで定義した名前をスプレッドシートにインポートできます。ただし、括弧を付けずに呼び出す必要があります。
はい。Google スプレッドシートは、スプレッドシートの名前付き関数の構文に従って、定義された名前を更新します。すべてのセル参照に括弧を追加する必要があります。
いいえ。シート内に存在する Apps Script のカスタム関数と同じ名前の名前付き関数を作成することはできません。既存の名前付き関数と同じ名前のカスタム関数をシートに追加することは可能です。ただし、既存の名前付き関数が優先されます。
次の 2 つの原因が考えられます。
- 数式の計算に時間がかかりすぎる。
- メモリを使いすぎる。
解決するには、あまり複雑でないシンプルな数式を使ってください。
名前付き範囲が名前付き関数よりも優先されます。