TL;DR —
LAMBDAは数式を、名前を付けて再利用できる関数に包みます。Excel で VBA なしに自作関数を作れるのは、これが初めてです。裸の=LAMBDA(x, x*2)が#CALC!を返すのは、定義は呼び出しではないからです。 末尾カッコ=LAMBDA(x, x*2)(5)を付ければ実行でき、名前の管理に 保存すればブック全体で=MyFunc(...)と呼び出せます。Excel 365 と 2021 以降。
=LAMBDA(x, x*2)(5) ' -> 10 (末尾カッコが引数を渡す)
=FtoC(212) ' -> 100 (=LAMBDA(t,(t-32)*5/9) を FtoC と命名した後)
ほかのすべての Excel 関数は Microsoft が書いたものです。LAMBDA は、あなたが書く 1 つ
です。セルからセルへとコピーし続けている数式のロジックを受け取り、名前とパラメーターを
与えて、SUM や XLOOKUP とまったく同じように振る舞う関数に変えます。ただし、その中身は
あなたが定義したとおりに動きます。マクロも、.xlsm も、Visual Basic エディターも要りません。
この記事でわかること
- 考え方の軸:これは結果ではなく、関数の定義である
- 誰もが戸惑うたった 1 つのルール:裸の LAMBDA は
#CALC!を返す — そして呼び出す 2 つの方法 - 名前の管理に LAMBDA を保存して、どこでも使えるようにする方法
- 再帰 — 自分自身を呼び出す LAMBDA。LAMBDA(と VBA)だけにできること
- LAMBDA が数式のコピペに勝つとき — そして勝たないとき
考え方の軸:LAMBDA は関数の定義である
LAMBDA(parameters, calculation) は、それ単体では何も計算しません。入力を待ちながら、
計算を記述するだけです。=LAMBDA(x, x*2) は*「x を受け取って x の 2 倍を返す関数」*
と読みます。これは定義であり、コードで function double(x) { return x*2 } と書くのと同じ
です。まだ何も呼び出されていません。だからこそ Excel は、それ単体では値を表示できないのです。
LAMBDA を壊すルール:定義は呼び出しではない
セルに =LAMBDA(x, x*2) と入力すると #CALC! が出ます。これが「LAMBDA が動かない」
という声の最大の原因ですが、バグではありません。関数を定義しただけで、一度も呼び出して
いないのです。呼び出す方法は 2 つあります:
=LAMBDA(x, x*2) ' #CALC! — 入力のない定義
=LAMBDA(x, x*2)(5) ' 10 — 末尾の (5) が x = 5 で呼び出す
末尾のカッコが呼び出しです。=LAMBDA(x, x*2)(5) は「この関数を定義し、すぐに 5 で
実行する」という意味です。テストには便利ですが、毎回定義をまるごと書くのでは本末転倒です。
本当の見返りは、名前を付けることにあります。
名前の管理で命名すれば = 自作のワークシート関数
LAMBDA をその場で呼び出すのは余興です。本題は、名前を付けて保存し、その名前をどこ からでも呼び出すことです。**[数式]▸[名前の管理]▸[新規作成]**を開き、名前を付けて、 LAMBDA を 参照範囲 に入れます:
Name: FtoC
Refers to: =LAMBDA(t, (t-32)*5/9)
これで =FtoC(212) は、ブックのどのシートのどのセルでも 100 を返します。組み込み関数と
まったく同じで、(...) の定義はどこにも見当たりません:
=FtoC(212) ' 100
=FtoC(A2) ' A2 の中身が何であれ変換する
あなたは Excel の語彙に関数を 1 つ追加したのです。ブックを共有すれば、関数も一緒に運ばれ ます。これが LET と LAMBDA の違いです。LET は1 つの数式の中 で値に名前を付け、LAMBDA はどこからでも呼び出せる関数に名前を付けます。(そして優れた LAMBDA の中身は、ほとんど必ず LET です。)
再帰:LAMBDA は自分自身を呼び出せる
名前付きの LAMBDA には名前があるので、自分自身を呼び出せます。これが再帰です。普通の 数式にはできず、以前は VBA が必要だったことです。落とし穴はこうです。名前は名前の管理に 保存して初めて存在するので、再帰が効くのは名前付きの LAMBDA だけで、裸のものでは決して 効きません。
Name: FACT
Refers to: =LAMBDA(n, IF(n<=1, 1, n*FACT(n-1)))
=FACT(5) は自分自身を下りていき — 5*FACT(4)、4*FACT(3)、… — 120 を返します。
下りを止める IF(n<=1)が基底条件です。これを忘れると Excel は限界まで再帰し続け
ます。再帰こそ、LAMBDA が本当に難しい仕事 — 区切り文字つきのリストをたどる、不正な文字
だらけの文字列をきれいにする、階層を解析する — を純粋な数式の形でこなす方法です。
判断のポイント:LAMBDA が真価を発揮するとき
同じ複雑な数式を多くのセルに貼り付けている自分に気づいたとき、あるいは普段なら VBA の ユーザー定義関数として書くようなロジックを組むときが、LAMBDA の出番です。一度名前を付けて おけば、直すのも一度で済みます。名前の管理で定義を変えれば、すべての呼び出しが更新されます。 正直な限界はこうです:
- 一度しか使わない 1 行の数式を包んではいけません — それはただの遠回りです。
- 1 つの数式の中で完結する計算なら、LAMBDA ではなく LET が欲しいところです。
- LAMBDA を配列全体(値の列、テーブルの各行)に対して走らせるには、LAMBDA ヘルパー — MAP, REDUCE, BYROW と組み合わせます。
この積み重ねこそが要点です。LET が変数を、LAMBDA が関数を、そしてヘルパーが ループを与えます。三つそろうと、Excel の数式は小さなプログラミング言語に変わります。
ExcelMaster はどう役立つか
正しい LAMBDA を書くこと — パラメーター、基底条件、末尾カッコでのテスト、名前の管理への 登録 — は細かくて面倒で、まさに AI コパイロットが一発で決めてくれる類の作業です。 ExcelMaster は、*「華氏を摂氏に変換する関数を作って」*や *「文字列から数字をすべて取り除く再帰関数」*を、動作する名前付き LAMBDA に変え、名前の 管理に定義まで登録し、再帰がちゃんと止まるよう基底条件まで説明してくれます。 ご自身のデータで試す。
よくある質問
Excel の LAMBDA 関数とは何ですか?
LAMBDA を使うと、VBA なしで数式から自分専用の再利用できる関数を作れます。パラメーターと
計算を定義し、名前の管理に名前を付けて保存すれば、あとは組み込み関数と同じように
=MyFunc(...) と呼び出せます。
LAMBDA が #CALC! を返すのはなぜですか?
裸の =LAMBDA(...) は定義であって呼び出しではないからです。引数を入れた末尾カッコを
付ける(=LAMBDA(x, x*2)(5))か、名前の管理で LAMBDA に名前を付けて、その名前を呼び出して
ください。
LAMBDA をブック全体で再利用するにはどうすればよいですか?
**[数式]▸[名前の管理]▸[新規作成]**を開き、名前(たとえば FtoC)を付けて、LAMBDA を
参照範囲 に入れます:=LAMBDA(t,(t-32)*5/9)。これで =FtoC(212) がブックのどのセルでも
動きます。
LAMBDA は自分自身を呼び出せますか(再帰)?
はい。名前付きの LAMBDA は自分の名前を参照できるので、FACT と命名した
=LAMBDA(n, IF(n<=1, 1, n*FACT(n-1))) は階乗を計算します。再帰が止まるよう、必ず基底
条件(ここでは n<=1)を入れてください。
Excel で自作関数を作るのに VBA は必要ですか?
いいえ。LAMBDA は純粋な数式で自作関数を作ります。マクロも、.xlsm ファイルも、Visual
Basic エディターも要りません。Excel 2021、2024、Microsoft 365 で使えます。
検証環境
検証環境: Excel 365(Windows 11)— 最終確認 2026年6月22日
関連ガイド: Excel LET · Excel MAP, REDUCE & BYROW · Excel FILTER · Excel SEQUENCE
