Article

【Excel】LAMBDA関数で自作のワークシート関数を作る入門

この記事で分かること

ExcelのLAMBDA関数で自作のワークシート関数を作る方法を解説します。名前の定義への登録手順、省略可能パラメータの作り方、エラー対処法をスクリーンショット付きで紹介します。

同じ計算式を何箇所にもコピーしていると、仕様変更のたびに全セルを修正しなければなりません。LAMBDA関数を使えば、自分で名前を付けたオリジナルのワークシート関数を作れます。一度定義すれば =税込(A2) のように普通の関数と同じ感覚で使えるうえ、計算ロジックの変更は定義を1箇所直すだけで全セルに反映されます。

この記事では、LAMBDA関数の基本構文から「名前の定義」への登録手順、省略可能パラメータの作り方までを、実例とスクリーンショットで解説します。LAMBDA関数は Microsoft 365 / Excel 2024 / Excel for the web で利用できます。

記事の手順を試せるサンプルファイルを用意しました。税込計算・成績判定・デフォルト税率の3つの名前定義LAMBDAが登録済みです。

LAMBDA関数の基本の書き方

LAMBDA関数の構文は次のとおりです。

=LAMBDA(パラメータ1, パラメータ2, ..., 計算式)(引数1, 引数2, ...)

ポイントは、最後のパラメータが「計算式(戻り値)」になるルールです。LAMBDA に渡す値の受け口を先に並べ、最後に計算式を書きます。LAMBDA の後ろの丸括弧で実際の引数を渡すと、計算結果が返ります。

最もシンプルな例として、税抜価格を1.1倍して税込価格を返す式を見てみます。

=LAMBDA(x, x*1.1)(1000)

パラメータ x に 1000 が渡り、x*1.1 の計算結果 1100 が返ります。

パラメータは複数指定できます。金額と税率の2つを受け取り、端数を四捨五入する例です。

=LAMBDA(金額, 税率, ROUND(金額*(1+税率), 0))(1980, 0.1)

結果は 2178 です。パラメータ名は xa のような短い名前でも、金額税率 のような日本語でも自由に付けられます。

セルにLAMBDA関数を直接入力した数式バーと結果を表示している画面
セルF3の数式バー:=LAMBDA(x, x*1.1)(1000) と入力し、結果 1,100 が表示されている

ただし、この書き方ではセルごとに毎回 LAMBDA を書く必要があり、通常の数式と手間が変わりません。LAMBDA の真価は、次に説明する「名前の定義」に登録して、オリジナル関数として繰り返し使えるようにすることで発揮されます。

名前の定義に登録してオリジナル関数にする

LAMBDA を「名前の定義」に登録すると、Excel の組み込み関数(SUM や IF)と同じ感覚で呼び出せるオリジナル関数になります。税込価格を計算する関数「税込」を作る手順を見ていきます。

手順

  1. 数式タブ → 定義された名前グループ → 名前の定義をクリック(ショートカット: Ctrl+F3新規作成
  2. 「新しい名前」ダイアログが開く
  3. 名前欄に関数名を入力: 税込
  4. 参照範囲欄に LAMBDA 式を入力: =LAMBDA(金額, ROUND(金額*1.1, 0))
  5. OK で閉じる
新しい名前ダイアログの名前欄に税込と入力し、参照範囲欄にLAMBDA式の末尾が見えている画面
「新しい名前」ダイアログ:名前欄に「税込」と入力し、参照範囲欄に =LAMBDA(金額, ROUND(金額*1.1, 0)) を入力する。欄幅の都合で式の末尾だけが見えている

これで「税込」関数が使えるようになりました。セルに次のように入力すると、税込価格が返ります。

=税込(B2)
名前定義したLAMBDA関数で税込価格を計算したワークシートの画面
セルC2の数式バー:=税込(B2) と入力するだけで、名前定義したLAMBDA関数が計算を実行する

登録した名前の一覧は、数式タブ → 名前の管理Ctrl+F3)で確認できます。

名前の管理ダイアログに税込・成績・税込Dの3つのLAMBDA関数が登録されている画面
名前の管理ダイアログ:参照範囲にLAMBDA式が入っている。名前を選択するとダイアログ下部に定義全体が表示される

覚えておきたいポイント

  • 関数名は日本語OK(「税込」「成績」など)。パラメータ名も日本語が使える
  • 登録した関数は同じブック内でのみ有効。別のブックからは #NAME? エラーになる
  • SUM や IF など組み込み関数と同じ名前で定義を作ること自体はできるが、呼び出し時は組み込み関数が優先されて LAMBDA は使われない。エラーにはならず意図と違う結果になるため、組み込み関数と同名にしないこと

引数の意味と設定のルール

LAMBDA のパラメータの仕組みを整理します。

引数の位置役割
1番目〜最後から2番目関数に渡す値の受け口(パラメータ)。名前は自由金額税率x
最後(必須)計算式。パラメータを使った計算結果がこの関数の戻り値になるROUND(金額*(1+税率), 0)

パラメータは最大253個まで指定できます。名前にはセル参照と同じ文字列(A1、B2 など)は使えません。

対象バージョン: LAMBDA関数は Microsoft 365 / Excel 2024 / Excel for the web で利用できます。この記事で紹介する MAP / REDUCE などのヘルパー関数も同じバージョンで利用可能です。

省略可能パラメータの作り方

パラメータ名を [ ] で囲むと、呼び出し時にそのパラメータを省略できるようになります。省略されたかどうかは ISOMITTED 関数で判定します。

次の例では、税率を省略すると10%で計算し、指定すればその税率で計算する関数を作ります。

=LAMBDA(金額, [税率], IF(ISOMITTED(税率), ROUND(金額*1.1,0), ROUND(金額*(1+税率),0)))

この LAMBDA を名前「税込D」として登録すると、次のように使い分けられます。

  • =税込D(98000) → 107,800(税率省略 → 10%で計算)
  • =税込D(98000, 0.08) → 105,840(8%を明示)
省略可能パラメータ付きLAMBDA関数で税率を省略した場合の計算結果の画面
C列は税率を省略(10%で計算)、D列は8%の軽減税率を明示して計算している

途中のパラメータだけを省略することもできます。=FLEX(1, , 300) のようにカンマの間を空にすると、2番目のパラメータだけが省略扱いになります。

実践例 ― 3つの自作関数を作ってみる

例1: 税込計算(基本)

名前の定義に登録する LAMBDA 式:

=LAMBDA(金額, ROUND(金額*1.1, 0))

名前: 税込

セルには =税込(B2) と入力するだけです。消費税率が変更になった場合は、名前の定義の LAMBDA 式を1箇所修正すれば、全セルの計算結果が自動で変わります。

例2: 成績判定(IFを組み込む)

名前の定義に登録する LAMBDA 式:

=LAMBDA(点数, IF(点数>=80,"A",IF(点数>=60,"B",IF(点数>=40,"C","D"))))

名前: 成績

IF のネストを LAMBDA に閉じ込めることで、セルの数式は =成績(B2) だけになります。判定基準を変更する場合も定義の修正だけで済みます。

LAMBDA関数で作成した成績判定関数の実行結果を表示しているワークシートの画面
セルC2の数式バー:=成績(B2) と表示されている。85点→A、62点→B、38点→D のように判定される

例3: デフォルト税率付き(省略可能パラメータ)

名前の定義に登録する LAMBDA 式:

=LAMBDA(金額, [税率], IF(ISOMITTED(税率), ROUND(金額*1.1,0), ROUND(金額*(1+税率),0)))

名前: 税込D

標準税率(10%)の商品は引数1つで、軽減税率(8%)の食品は税率を明示して呼び出します。

省略可能パラメータに8%の税率を指定した場合の計算結果の画面
セルD2の数式バー:=税込D(B2, 0.08) のように税率を指定すると、8%の軽減税率で計算される

応用パターン

LETと組み合わせて数式内だけで使う

名前の定義に登録せず、1つのセル内で LAMBDA を使い捨てる方法もあります。LET 関数の中で LAMBDA を変数に入れ、その場で呼び出します。

=LET(判定, LAMBDA(x, IF(x>=60,"合格","不合格")), 判定(B2))

この方法では他のセルからは使えませんが、複雑な数式を整理するのに便利です。LET 関数の詳しい使い方は「LET関数で長い数式を分解して読みやすくする方法」で解説しています。

LET関数の中でLAMBDAを使って判定関数を定義した数式の結果の画面
LET の中で LAMBDA を定義し、その場で呼び出す。75点を渡して「合格」が返っている

名前定義LAMBDA同士を組み合わせる

名前定義した LAMBDA の中から、別の名前定義 LAMBDA を呼び出すこともできます。小さな部品を組み合わせて複雑な関数を作れます。

  • 倍にする = =LAMBDA(x, x*2)
  • 4倍にする = =LAMBDA(x, 倍にする(倍にする(x)))

=4倍にする(10)倍にする(倍にする(10))倍にする(20) → 40 と計算されます。

MAP / REDUCE との連携

Microsoft 365 / Excel 2024 には、LAMBDA を引数に取るヘルパー関数が用意されています。

関数できること
MAP配列の各要素に同じ計算を適用=MAP(A1:A10, 税込)
REDUCE配列を1つの値に集約=REDUCE(0, A1:A3, LAMBDA(累積,x, 累積+x))
BYROW行ごとに集計=BYROW(A1:C3, LAMBDA(行, SUM(行)))

たとえば =MAP(A1:A10, 税込) と書くだけで、A1:A10 の全セルに一括で税込計算を適用できます。

エラーが出たときの確認ポイント

エラー原因対処
#CALC!LAMBDA を定義しただけで呼び出していない(引数を渡していない)LAMBDA の後ろに (引数) を付ける。名前の定義に登録する場合は問題ない
#VALUE!渡した引数の数がパラメータの数と合わない定義と呼び出しのパラメータ数を一致させる。[ ] で囲んでいないパラメータは省略できない
#NAME?名前の定義が見つからない(別ブック、スペルミス)名前の管理で登録状況を確認する。名前定義は同一ブック内でのみ有効
#NUM!再帰が深すぎる(上限は約8,190回)再帰の終了条件を見直す。実用上この上限に当たることはほぼない
LAMBDA関数を呼び出さずに入力してCALCエラーが表示されている画面
セルF8:=LAMBDA(x, x+1) だけを入力し引数を渡していないため #CALC! エラーになっている。その下のF9は引数不足による #VALUE! エラー

そのほかの注意点

  • SUM や IF など組み込み関数と同じ名前で定義を作ること自体はできるが、呼び出し時は組み込み関数が優先されて LAMBDA は使われない。エラーにはならず意図と違う結果になるため、組み込み関数と同名にしないこと
  • 空セルを引数に渡すと数値の 0 として扱われる。意図しない計算結果になることがある

まとめ

  • LAMBDA 関数で「パラメータ → 計算結果」のオリジナル関数を作れる
  • 名前の定義に登録すると、=税込(A2) のように通常の関数と同じ感覚で使える
  • 日本語の関数名・パラメータ名が使える
  • [ ] で省略可能パラメータを作り、ISOMITTED でデフォルト値を設定できる
  • 定義した関数は同じブック内でのみ有効
  • 計算ロジックの変更は定義を1箇所直すだけで全セルに反映される
  • Microsoft 365 / Excel 2024 / Excel for the web で利用可能

コピペ用の基本構文:

=LAMBDA(パラメータ, 計算式)

Next Read

このあと読む記事

今の内容に近い記事から、次の1本と補助記事を続けて見つけられるようにしています。

Keep Exploring

このテーマをさらに探す

同じテーマの入口記事と更新記事を、一覧の形でまとめています。

コメント