この記事で分かること
結論:LAMBDAは「関数を作る機能」、LETは「1つの数式の中で名前を付ける機能」
LAMBDA関数とLET関数は名前が似ているためセットで語られがちですが、役割はまったく別です。LAMBDA関数は、SUMやIFのようなExcelの標準関数と同じ感覚で呼び出せる「自分専用の関数」をユーザー自身が作る機能です。数式タブの名前の管理に登録すれば、ブック内のどのセルからでも関数名で呼び出せるようになります。一方LET関数は、1つの数式が長くなったときに、その途中の計算結果に名前を付けて、同じ計算を数式内で繰り返し書かずに済ませる機能です。LETで名前を付けた値はその数式の外では使えません。両者は独立して使える別の機能ですが、実務ではLAMBDA関数の中でLET関数を使って計算を整理する組み合わせがよく使われます。以下では、Excel動的配列関数の実務|FILTER・SORT・UNIQUE・スピルで財務分析を速くするで扱ったFILTER・SORT・UNIQUE・SEQUENCEとスピルの話には立ち入らず、LAMBDA・LETによる「数式の部品化・再利用」に絞って、IRRのスプレッド計算や利率換算といった財務モデルの設例で実務的な使い方を確認します。
前提の確認:LAMBDA関数とLET関数の構文と対応バージョン
LAMBDA関数の構文は=LAMBDA([引数1, 引数2, …,] 計算式)です。引数は省略可能で最大253個まで指定でき、最後に置く計算式が関数の戻り値になります。Microsoft公式のリファレンスは、引数の数が253個を超えると#VALUE!エラーになること、セル上でLAMBDA式単体を書く場合は呼び出し用の値まで含めないと#CALC!エラーになることを明記しています。LET関数の構文は=LET(名前1, 値1, 名前2, 値2, …, 計算式)で、名前と値のペアを最大126個まで定義でき、最後の引数が数式全体の戻り値になります。名前は文字で始まる必要があり、セル参照の記法(R1C1形式など)と衝突する名前は使えないとされています。
実務でつまずきやすいのが対応バージョンの違いです。Microsoft公式のApplies To(対応情報)によると、LAMBDA関数はExcel for Microsoft 365とExcel 2024(Windows・Mac)に対応する一方、LET関数はこれに加えてExcel 2021(Windows・Mac)にも対応しています。つまりLETのほうが対応レンジが1世代広く、永続ライセンス版のExcel 2021を使っている職場ではLETは使えてもLAMBDAは使えない、という状況が起こり得ます。社内で永続ライセンス版のExcel 2019以前を使っている場合は、いずれの関数も利用できません。自分やチームの環境がどちらに該当するか、実装前に必ず確認してください。
| 項目 | LAMBDA関数 | LET関数 |
|---|---|---|
| 主な役割 | 独自のカスタム関数を作る | 1つの数式の中で値に名前を付けて使い回す |
| 値・引数の上限 | 引数(パラメータ)最大253個 | 名前と値のペア最大126個 |
| 対応バージョン | Excel for Microsoft 365/Excel 2024 | Excel for Microsoft 365/Excel 2024/Excel 2021 |
| 名前の管理への登録 | 任意(登録すると関数名で再利用できる) | 不要(その数式の中だけで有効) |
| 主なエラー | #CALC!(呼び出し値の不足)/#NUM!(過度な再帰)/#VALUE!(引数超過) | LET固有のエラーは少なく、内部の計算式のエラーがそのまま伝わる |
LET関数の実務:IRRのスプレッド計算を1つの式で完結させる
以下は説明用の仮設例です。ある投資案件Aについて、投資時点(0年目)に1,000百万円を投じ、1〜5年目に順次分配を受けたうえで5年目にExitするキャッシュフローを想定します。
| 時点 | キャッシュフロー |
|---|---|
| 0年目(投資) | −1,000百万円 |
| 1年目 | 150百万円 |
| 2年目 | 200百万円 |
| 3年目 | 250百万円 |
| 4年目 | 300百万円 |
| 5年目(Exit) | 900百万円 |
式1:IRRとハードルレートのスプレッド(LETを使う場合)
=LET(spread_bp, (IRR(B2:B7)-8%)*10000, “IRRスプレッド “&TEXT(spread_bp,”0″)&”bp/”&IF(spread_bp>=500,”優良水準”,”許容水準”))
ExcelのNPV・IRR関数の1つであるIRR関数でキャッシュフローB2:B7の内部収益率を求め、ハードルレート8%との差を万分率(bp)に換算し、そのスプレッドが500bp以上かどうかで判定文言を出し分ける、という1つのセルにまとめた数式です。B2:B7に対してIRR関数を計算すると17.0325%となり、ハードルレート8%との差は9.0325ポイント、bp換算で903.25bpです。TEXT関数で整数に丸めて表示すると、このセルは「IRRスプレッド 903bp/優良水準」という文字列を返します。
ここでLETを使わずに同じ結果を1つの数式で書こうとすると、=”IRRスプレッド “&TEXT((IRR(B2:B7)-8%)*10000,”0″)&”bp/”&IF((IRR(B2:B7)-8%)*10000>=500,”優良水準”,”許容水準”)のように、IRR(B2:B7)とそこから導くスプレッドの計算式を数式の中に2回書くことになります。Microsoft公式のLET関数リファレンスは、同じ式を数式内で複数回使うとExcelはその結果を複数回計算する、LETを使えばその式は一度だけ計算されると説明しています。件数が少ない本設例では体感できる速度差はほとんどありませんが、実務上より重要なのは保守性です。後日キャッシュフローの範囲をB2:B8に広げるような修正が入ったとき、LETなしの数式では2箇所ある「B2:B7」をどちらも書き換える必要があり、片方だけ直し忘れると数式内で矛盾した計算をしてしまいます。LETで一度だけ名前を付けておけば、修正箇所は1箇所で済みます。
LAMBDA関数の基本:名前を付けずにセル内だけで使う
LAMBDA関数は、名前の管理に登録しなくても、セルの中だけで完結する無名関数として使うこともできます。以下は説明用の仮設例です。年利で表示されているローン金利を、月次の実効利率に換算する場面を考えます。
式2:無名のLAMBDA関数による月次実効利率の換算
=LAMBDA(annual_rate, (1+annual_rate)^(1/12)-1)(8%)
LAMBDA(annual_rate, …)で「annual_rateという引数を1つ受け取り、(1+annual_rate)の12乗根から1を引いた値を返す」という計算式を定義し、末尾の(8%)でその場ですぐに8%という値を渡して呼び出しています。年率8%を12回複利で積み上げると年率8%になるような月次利率を逆算する式で、結果は0.643403%(小数第4位で四捨五入すると0.6434%)です。この数式はLAMBDA式そのものをセルに直接書き、その場で1回だけ使う用途に向いています。ただし同じ換算を別のセルでも使いたい場合、この書き方だと(1+annual_rate)^(1/12)-1という計算式をセルごとにコピーすることになり、後で換算方法を修正したくなったときに全セルを直す手間が生じます。この問題を解決するのが、次に説明する「名前付きLAMBDA」です。
名前付きLAMBDA:カスタム関数として登録し、複数セルで再利用する
LAMBDA式を名前の管理に登録すると、SUMやIFと同じ感覚で自分の関数名を使い回せるようになります。Microsoft公式のリファレンスが示す「数式をテストする→セル内でLAMBDA関数を作成・テストする→名前管理ツールに登録する」という流れを、実際の操作単位に分解すると次の4ステップになります。
この手順でMLYRATE(annual_rate)という名前付きLAMBDA関数を登録すると、年利が異なる複数のトランシェに対しても同じ関数を使い回せます。以下は説明用の仮設例です。あるLBO案件の資金調達で、シニアローン(年利6.0%)、メザニンローン(年利10.0%)、劣後ローン(年利12.0%)の3トランシェを組成したとします。
| トランシェ | 年利 | 数式 | 月次実効利率 |
|---|---|---|---|
| シニアローン | 6.0% | =MLYRATE(6%) | 0.4868% |
| メザニンローン | 10.0% | =MLYRATE(10%) | 0.7974% |
| 劣後ローン | 12.0% | =MLYRATE(12%) | 0.9489% |
MLYRATEを名前付きLAMBDA関数として登録しておけば、換算ロジックを直接コピーする必要がなく、3つのセルはいずれも「=MLYRATE(該当する年利)」という短い数式で済みます。同じ考え方で、s3で扱ったIRRスプレッド計算も名前付きLAMBDA関数にできます。
式3:名前付きLAMBDA関数IRRSPREAD_BP
名前欄「IRRSPREAD_BP」、参照範囲欄「=LAMBDA(cashflows, hurdle, (IRR(cashflows)-hurdle)*10000)」で登録し、セルでは「=IRRSPREAD_BP(B2:B7, 8%)」のように呼び出す。
| 案件 | 投資額(0年目) | Exit時CF(5年目) | IRR | ハードル比スプレッド |
|---|---|---|---|---|
| 案件A | 1,000百万円 | 900百万円 | 17.03% | 903bp |
| 案件B | 1,000百万円 | 850百万円 | 10.79% | 279bp |
| 案件C | 800百万円 | 700百万円 | 12.12% | 412bp |
案件ごとにキャッシュフローの行数や年数が変わっても、範囲とハードルレートをIRRSPREAD_BPに渡すだけで同じロジックのスプレッドを計算できます。案件を横に並べた比較表を作るときに、IF文やIRR関数の入れ子を案件数だけコピーしなくて済む点が、名前付きLAMBDA関数の実務上の利点です。
自分のモデルでLAMBDA・LETを組んでみたい方へ
本記事の式1〜式3は、実際にExcelの数式バーへそのまま入力して検算できます。名前の管理への登録操作を含め、関数の基本的な組み方から確認したい場合はExcel関連教材が出発点になります。
LAMBDA×LETの組み合わせと、動的配列関数との住み分け
実務ではLAMBDA関数の計算式の内部にLET関数を組み込み、複数ステップの計算を1つの名前付き関数にまとめることがよくあります。たとえば式3のIRRSPREAD_BPをLETで書き直すと、「=LAMBDA(cashflows, hurdle, LET(irr_value, IRR(cashflows), (irr_value-hurdle)*10000))」のように、IRR(cashflows)の計算結果にirr_valueという名前を付けたうえでスプレッドを算出する形にできます。今回のように参照が1回だけの単純な式ではLETを挟む効果は限定的ですが、同じirr_valueを判定文言の生成など複数箇所で再利用する場合には、s3で確認したのと同じ理由でLETを挟む価値が出てきます。
なお、LAMBDA・LETは「1つの計算ロジックを名前で部品化する」機能であり、複数セルにまたがる配列を絞り込んだり並べ替えたりする機能ではありません。案件一覧からハードルレートを上回った案件だけを抽出したい、金額の大きい順に並べ替えたいといった処理は、冒頭で触れた動的配列関数(FILTER・SORT)の領域です。両者は組み合わせて使えます。たとえばFILTER関数で条件に合う案件行を抽出したうえで、その結果に対してIRRSPREAD_BPのような名前付きLAMBDA関数を適用する、という使い方が実務では自然です。条件付きの合計・加重平均を1つの数式でまとめたい場合はSUMPRODUCT関数の使い方|財務モデリングで強力な理由と実務例も参考になります。
実務での注意点:エラー・監査性・命名規律
LAMBDA関数特有のエラーとして、Microsoft公式のリファレンスは、呼び出しが循環的で再帰の回数が多すぎる場合に#NUM!エラーが返される可能性があること、引数の数が253個を超えると#VALUE!エラーになることを挙げています。LAMBDA式単体をセルに書いて呼び出し用の値を書き忘れると#CALC!エラーになる点も含め、これらは循環参照とは別の現象です。循環参照は財務モデル全体の参照関係が輪になって発生するエラーで、LAMBDA関数内の自己再帰とは仕組みが異なります。想定外の値が渡された場合に備えてIFERROR関数で名前付きLAMBDA関数をラップしておくと、エラーの伝播先を制御しやすくなります。
もう1つの注意点は監査性です。名前付きLAMBDA関数を呼び出しているセルは、数式バーに「=MLYRATE(6%)」のように関数名と引数しか表示されず、実際の計算ロジック((1+annual_rate)^(1/12)-1の部分)は数式タブの名前の管理を開かないと見えません。他人が作ったモデルにLAMBDA関数が使われている場合、その中身を確認せずに数値だけを信用するのは危険です。数式バーとF2・F9キーを使ってセルの中身を1段階ずつ検証する技術はExcelの数式監査の技術|F2・F9・数式表示・トレースで他人のモデルを読み解くにまとめてあります。名前付きLAMBDA関数の場合はこれに加えて、名前の管理を開いて参照範囲欄のLAMBDA式そのものを確認する一手間が必要になります。
命名についても規律が必要です。名前付きLAMBDA関数は、セルの名前定義(名前付き範囲)と同じ「名前」の仕組みを使って登録されるため、両者は同じ名前空間を共有します。IRRSPREAD_BPのような関数名と、B2:B7に付けた「案件A_CF」のような範囲名が誤って重複すると、意図しない置き換えが起こりかねません。名前を乱用しない・命名規約を統一するという規律は、名前定義と構造化参照|使いどころと「乱用しない」規律で扱った考え方がそのまま当てはまります。
よくある質問(FAQ)
Q. LAMBDA関数とLET関数はどちらを先に覚えるべきですか。
A. 目安として、計算がまだ1つの数式の中に収まる規模ならLET、複数のセルや複数のブックで同じロジックを繰り返し使うならLAMBDAが適しています。ただし実務ではLAMBDAの内部でLETを使う組み合わせも一般的なので、どちらか一方だけを覚えるより、両方を並行して試すほうが理解が進みます。
Q. 名前付きLAMBDA関数は他のブックでも使えますか。
A. 名前の管理に登録したLAMBDA関数は既定でそのブック単位のスコープを持ち、別のブックへは自動的には引き継がれません。組織で使い回すには、あらかじめLAMBDA関数を登録したひな型ブックやテンプレートを用意し、そこから新規ブックを作成する運用が現実的です。
Q. LAMBDA関数とLET関数はどのバージョンのExcelで使えますか。
A. Microsoft公式のサポートページによると、LAMBDA関数はExcel for Microsoft 365とExcel 2024(Windows・Mac)で利用でき、LET関数はこれに加えてExcel 2021(Windows・Mac)でも利用できます。永続ライセンス版のExcel 2019以前を使っている場合、いずれの関数も利用できません。
Q. LAMBDA関数の中で自分自身を呼び出す(再帰)ことはできますか。
A. 名前付きLAMBDA関数であれば自分自身を呼び出す再帰的な定義が可能ですが、Microsoft公式のドキュメントは、呼び出しが循環的で再帰の回数が多すぎる場合に#NUM!エラーが返される可能性があると明記しています。本記事で扱った設例はいずれも再帰を使わない単純な構成です。
Q. LET関数を使うと計算速度はどれくらい変わりますか。
A. Microsoft公式のドキュメントは、同じ式を数式内で複数回使う場面でLET関数を使うと計算が一度で済むと説明しており、フィルター処理を伴う複雑な例では処理速度が2倍になったと紹介しています。本記事のIRRスプレッド計算のように参照範囲が小さい設例では体感できる差は小さく、実務上は可読性・保守性の向上を主な目的と捉えるほうが現実的です。
まとめ
LAMBDA関数とLET関数は、どちらも「同じ計算式を繰り返し書かない」ための機能ですが、対象が異なります。LAMBDA関数はブック内で使い回せる独自の関数を作る機能、LET関数は1つの数式の中で途中の計算結果に名前を付けて整理する機能です。ここまで、IRRとハードルレートのスプレッド計算をLETで1つの数式にまとめる方法、年利から月次実効利率への換算をLAMBDA関数として名前付き登録する方法を、実際に検算できる数値例で確認しました。名前付きLAMBDA関数はブック単位のスコープしか持たない点、数式バーからは中身が見えないため数式監査の手間が増える点には注意が必要です。まずは自分がよく使う計算式を1つ選び、式1〜式3の書き方を参考にLETでの整理、次にLAMBDA関数としての登録まで試してみてください。
数式の部品化を財務モデル全体に広げたい方へ
LAMBDA・LETで整理した計算式は、LBOモデルやDCFモデルのような複数シートにまたがるモデルの中でこそ効果を発揮します。関数の基礎から財務モデルへの組み込み方まで、体系的に確認したい方はExcel関連教材を活用してください。
出典・参考(2026年8月確認)
- Microsoft公式サポート「LAMBDA function」(構文・引数上限・エラー・名前の管理への登録手順・対応バージョン)(support.microsoft.com)
- Microsoft公式サポート「LET function」(構文・名前と値のペアの上限・命名規則・パフォーマンス上の利点・対応バージョン)(support.microsoft.com)
※本記事は教育目的の一般的な解説であり、法務・税務・投資助言ではありません。設例は理解のための仮設例です。