ExcelのLET・LAMBDA関数の使い方|数式を自分の関数に変える方法

スポンサーリンク

「このVLOOKUPの数式、ネストが深すぎて自分でも何を書いたか分からない…」。Excelで複雑な数式を扱う方なら、一度はそんな経験があるのではないでしょうか。

同じ計算式を複数のセルや別のシートにコピペした後、参照範囲を1か所だけ変えたいとき。気づくと10か所も同じ修正を繰り返し、1つでも直し忘れると #N/A の嵐です。VBAでカスタム関数を作れば解決するとは分かっていても、「マクロは怖い」「セキュリティ警告が嫌だ」と踏み切れない方も多いはずです。

そこで本記事では、LET関数LAMBDA関数 の使い方を解説します。この2つを使えば、VBAを一切書かずに「数式の中で名前を付ける」「自分専用の関数を登録する」ことが可能です。読み終えたとき、長い数式は驚くほどスッキリし、コピペ地獄から解放されているはずです。

実務例は全部で8パターン用意しました。LET実務例4つ、LAMBDA実務例3つ、組み合わせ実務例3つです。社内の請求書テンプレートや勤怠データ、評価ランク判定などすぐに転用できるものばかりです。

  1. LET関数とLAMBDA関数、どう違う?1分でわかる役割整理
    1. LET関数=「セル内で変数を定義する」関数
    2. LAMBDA関数=「ブック内で再利用できる関数を定義する」関数
    3. LETとLAMBDAの使い分け早見表
  2. なぜ今LETとLAMBDAなのか|従来のExcel数式が抱えていた3つの痛み
    1. 痛み①:同じ式の二度書き地獄
    2. 痛み②:参照範囲の一括変更が漏れる
    3. 痛み③:VBA UDFのセキュリティ警告
  3. LET関数の基本:変数に名前をつけて数式をスッキリさせる
    1. LET関数の基本構文
    2. 実務例①:VLOOKUP+IFERRORを変数化してメンテナンスコストを削減
    3. 実務例②:FILTER+SORTを段階的に書いてデバッグしやすくする
    4. 実務例③:複雑な条件分岐の途中結果に名前を付ける
    5. 実務例④:経理の累進計算をLETで段階分解
    6. Before / After 比較
  4. LAMBDA関数の基本:名前定義で「自分の関数」を登録する手順
    1. LAMBDA関数の基本構文
    2. 名前の管理へ登録する手順
    3. 実務例⑤:消費税計算をLAMBDA関数化して毎月使い回す
    4. 実務例⑥:営業日換算LAMBDAで週末カウントを統一
    5. 実務例⑦:評価ランクLAMBDAで成績判定を関数化
  5. LAMBDA + ヘルパー関数で配列処理を一気に書く
    1. MAP関数との連携(要素ごとにLAMBDAを適用)
    2. BYROW/BYCOLとの連携(行・列ごとの一括処理)
  6. LET + LAMBDA を組み合わせる:実務頻出3パターン
    1. パターン1:LETで中間変数を整理してからLAMBDAに渡す
    2. パターン2:FILTER+SORTの組み合わせをLET変数で段階的に書く
    3. パターン3:LAMBDA内部でLETを使ってロジックを可読化する
  7. LET/LAMBDA vs VBA Function|使い分けの判断基準
  8. こんなエラーが出たら:つまずきポイントと対処法
    1. #NAME?エラーが出る原因と解決策
    2. #CALC!エラーが出る原因と解決策
    3. 変数名にセル参照と同名を使ったときの挙動
    4. LAMBDAの再帰呼び出しでスタックオーバーフロー
  9. よくある質問(FAQ)
  10. まとめ:LETは今日から、LAMBDAは次のステップで
    1. 関連記事で次のステップに進む

LET関数とLAMBDA関数、どう違う?1分でわかる役割整理

LET関数とLAMBDA関数は、どちらも「数式に名前を付けて整理する」ための関数です。ただし、名前を付ける対象とスコープが大きく異なります。まずは両者の役割を1分で押さえましょう。

LET関数=「セル内で変数を定義する」関数

LET関数は、1つのセルの中だけで通用する「変数」 を定義できる関数です。Excelの文脈では「数式の途中で計算結果に名前を付けておき、後で参照できる仕組み」と理解してください。プログラミング経験者なら「ローカル変数」のイメージです。

たとえば VLOOKUP(A2, $D:$E, 2, 0)result という名前で保存しておけば、後の式で result と書くだけで再利用できます。同じ式を2回書く必要がなく、計算も1回しか走らないのでパフォーマンスも向上します。

ただしLET関数のスコープは 「そのセル内のみ」 に限定されます。他のセルや他のシートから result を参照することはできません。あくまで「そのセルを書くときの一時メモ帳」というイメージです。

LAMBDA関数=「ブック内で再利用できる関数を定義する」関数

LAMBDA関数は、ブック全体で使い回せる「自分専用の関数」 を定義できる関数です。LAMBDA式を「名前の管理」に登録すると、ブックのどのシート・どのセルからも =MY_FUNC(引数) の形式で呼び出せます。

これまでカスタム関数を作るにはVBAでユーザー定義関数(UDF)を書く必要がありました。LAMBDAなら VBAを一切使わずに、数式だけでカスタム関数を作成できます。マクロのセキュリティ警告も出ません。まるでプログラムのようですが、あくまでセルに書く数式の延長です。

xlsx形式のまま配布できるため、メール添付やSharePoint共有もマクロ警告で止まらないという大きな利点もあります。

LETとLAMBDAの使い分け早見表

両者の違いを「スコープ」と「役割」の2軸で整理すると、次の表になります。

観点LET関数LAMBDA関数
役割変数の定義関数の定義
スコープセル内のみブック全体(名前定義で登録時)
再利用同じセル内のみ他セル・他シートからも呼び出し可
主な用途1つの長い数式の整理・可読性向上複数箇所で繰り返す計算ロジックの関数化
対応バージョンMicrosoft 365 / Excel 2021以降Microsoft 365のみ(Excel 2021非対応)
VBAの必要性不要不要
配布形式xlsxxlsx

ここで重要なのが バージョン差分 です。LET関数はExcel 2021でも使えますが、LAMBDA関数はMicrosoft 365専用です。自分のバージョンを確認するには「ファイル」→「アカウント」→「製品情報」を見てください。

!_images/excel-let-lambda-function-guide/01_data_let-lambda-comparison.png

なぜ今LETとLAMBDAなのか|従来のExcel数式が抱えていた3つの痛み

LETとLAMBDAの説明に入る前に、「なぜこの2関数が必要になったのか」を整理しておきます。従来のExcel数式には、慣れた人ほど直面する3つの痛みがありました。

痛み①:同じ式の二度書き地獄

最も典型的なのが「条件分岐の中で同じ計算を2回書く」パターンです。たとえばVLOOKUPで取得した値が空欄なら「未登録」、そうでなければそのまま表示したい場合、こう書くしかありませんでした。

'--- 二度書きが避けられない従来の数式 ---
=IF(VLOOKUP(A2,$D:$E,2,0)="", "未登録", VLOOKUP(A2,$D:$E,2,0))

VLOOKUP部分が2か所に出てきます。参照範囲を変えたいときは2か所同時に修正しなければなりません。1か所でも直し忘れると #N/A が混ざる悲劇が起こります。さらに同じVLOOKUPが2回実行されるため、データが大きいときは計算速度も無駄になります。

条件分岐の基本については ExcelのIF関数の使い方 で詳しく解説しています。

痛み②:参照範囲の一括変更が漏れる

数式を100セルにコピーした後で「参照範囲を $D:$E から $D:$F に変えたい」と思ったときが地獄です。すべての数式を編集モードで開き、置換ダイアログか手作業で書き換えるしかありません。

VLOOKUPを多用している方は ExcelのVLOOKUP関数の使い方 も合わせてご覧ください。参照範囲の管理が一気に楽になります。

痛み③:VBA UDFのセキュリティ警告

「だったらVBAでカスタム関数を作ればいい」と考える方もいるでしょう。実際 VBAのFunctionプロシージャ を使えばカスタム関数(UDF)が作れます。しかし配布時に問題が起きます。

VBA入りのブックは「マクロ有効ブック(xlsm)」になり、開いた人に「マクロを有効にしますか?」というセキュリティ警告が必ず出ます。社内ポリシーで「不明なマクロは無効化」が設定されている会社では、せっかくのUDFが動きません。

LET/LAMBDAなら xlsxのまま カスタム関数を作れるため、この壁を完全に回避できます。

LET関数の基本:変数に名前をつけて数式をスッキリさせる

LET関数は、長くてネストが深い数式を「段階的に名前を付けながら組み立てる」イメージで使います。難しく考える必要はなく、「途中の計算結果に名前を付けておく」だけです。

LET関数の基本構文

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

項目内容
構文=LET(name1, value1, [name2, value2, …,] calculation)
必須引数最低1組の「名前・値」と、最後に必ず計算式
最大ペア数126個の名前/値ペア
変数名の制約文字で始まる/スペース不可/セル参照(A1等)と同名不可/TRUE・FALSE等の予約語不可
対応バージョンMicrosoft 365 / Excel 2021以降
出典Microsoft公式: LET関数

最もシンプルな例を見てみましょう。

'--- LET関数の最小サンプル ---
=LET(x, 5, SUM(x, 1))

この式は「x5 を代入し、SUM(x, 1) を計算する」という意味で、結果は 6 になります。Excelの文脈では「数式の中で名前付きの一時変数を作れる」と理解すれば十分です。

ここからは実務で本当に役立つLETの使い方を、4つの実例で解説していきます。

実務例①:VLOOKUP+IFERRORを変数化してメンテナンスコストを削減

LETが最も威力を発揮するのは、同じ式を複数回書かなければならない場面 です。代表例が「VLOOKUPの結果をIFERRORで包む」パターンです。

通常の書き方では、VLOOKUPを2回書く必要があります。

'--- LETなしの従来パターン(VLOOKUPが2回登場) ---
=IF(VLOOKUP(A2, $D:$E, 2, 0)="", "未登録", VLOOKUP(A2, $D:$E, 2, 0))

参照範囲を $D:$F に変えたいとき、2か所すべてを直さないと結果が狂います。これをLETで書き換えるとこうなります。

'--- LETあり:1か所修正で済む新パターン ---
=LET(
  result, VLOOKUP(A2, $D:$E, 2, 0),
  IF(result="", "未登録", result)
)

VLOOKUP部分が result という変数1か所だけになりました。参照範囲を変更したいときは result の定義行だけ直せばよく、メンテナンスコストが半分以下になります。さらにVLOOKUPは1回しか実行されないため、計算速度の面でも有利です。

VLOOKUPの基本的な使い方を再確認したい方は ExcelのVLOOKUP関数の使い方 を参照してください。エラー処理を厚くしたい方は ExcelのIFERROR関数の使い方 も合わせてご覧ください。

実務例②:FILTER+SORTを段階的に書いてデバッグしやすくする

動的配列関数(FILTER, SORT, UNIQUE等)を組み合わせると、1セルに長い式が並びがちです。LETを使うと「フィルタしてからソート」という処理を段階的に書けます。

'--- 動的配列関数を段階化したサンプル ---
=LET(
  filtered, FILTER(A2:C100, B2:B100="東京"),
  sorted,   SORT(filtered, 3, -1),
  sorted
)

filtered の段階だけ表示すれば「フィルタが正しいか」を確認できます。次に sorted を返せば「ソートも正しいか」が見えます。長い数式を1行ずつデバッグできる構造になるのが利点です。

慣れてくれば、最後の sortedINDEX(sorted, 1, 3) などに差し替えて「ソート後の1行目の3列目だけ抜く」という応用にもつなげられます。

実務例③:複雑な条件分岐の途中結果に名前を付ける

「売上が100万円以上、かつ達成率が80%以上ならA評価」のような複合条件は、IF/IFSの入れ子で書くと読みにくくなりがちです。LETで条件を変数化すると意図が明確になります。

'--- 複合条件をLETで整理した例 ---
=LET(
  sales,      B2,
  rate,       C2,
  isHighSale, sales >= 1000000,
  isHighRate, rate  >= 0.8,
  IF(AND(isHighSale, isHighRate), "A評価",
   IF(isHighSale, "B評価",
   IF(isHighRate, "C評価", "D評価")))
)

isHighSale isHighRate という変数名のおかげで、後から読み返したときに「何を判定しているか」が一目で分かります。半年後の自分にも親切な数式です。

条件分岐の組み合わせをさらに深掘りしたい方は ExcelのIF関数の使い方 で基本パターンを確認してください。

実務例④:経理の累進計算をLETで段階分解

経理処理で「税抜金額 → 消費税 → 端数処理 → 税込金額」という多段階計算は、LETの段階分解と相性が抜群です。

'--- 経理の段階計算を可視化 ---
=LET(
  taxRate,   0.1,
  netPrice,  B2,
  tax,       ROUND(netPrice * taxRate, 0),
  gross,     netPrice + tax,
  gross
)

消費税率が変わったときも、最初の taxRate の値だけを直せば全体に反映されます。各ステップに変数名が付いているため、デバッグで「途中の tax の値が想定と違う」と気づきやすくなります。

Before / After 比較

LETを導入する前と後で、数式の見た目がどう変わるかを比較します。

Before(LETなし)

'--- 従来:氏名と部署を1セルに連結する力技 ---
=IFERROR(VLOOKUP(A2,$D:$E,2,0),"該当なし")&" / "&IFERROR(VLOOKUP(A2,$D:$F,3,0),"該当なし")

After(LETあり)

'--- After:1行ずつ意味が読み取れる ---
=LET(
  name,  IFERROR(VLOOKUP(A2,$D:$E,2,0),"該当なし"),
  dept,  IFERROR(VLOOKUP(A2,$D:$F,3,0),"該当なし"),
  name & " / " & dept
)

After版は1行ずつ「何を計算しているか」が読み取れます。半年後に自分が見直しても、別の担当者が引き継いでも理解しやすくなります。

02 result let before after

LET関数のもっと詳しい仕様や応用例については ExcelのLET関数の使い方|変数定義で数式を短く整理する方法 で個別に解説しています。深掘りしたい方はそちらもご参照ください。

LAMBDA関数の基本:名前定義で「自分の関数」を登録する手順

LAMBDA関数は、LETの一歩先にある「数式を関数化して使い回す」ための仕組みです。冒頭で触れたとおり Microsoft 365専用 なので、Excel 2021ユーザーは利用できない点にご注意ください。

LAMBDA関数の基本構文

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

項目内容
構文=LAMBDA([parameter1, parameter2, …,] calculation)
必須引数最後の計算式(パラメータは省略可)
最大パラメータ数253個
即時呼び出し=LAMBDA(temp, (5/9)*(temp-32))(100) のように末尾に引数を渡す
名前定義への登録「数式」タブ→「名前の管理」→「新規」から登録
対応バージョンMicrosoft 365専用(Excel 2021は非対応)
出典Microsoft公式: LAMBDA関数

LAMBDAを単独でセルに書くだけでは関数の「定義」しかできません。末尾に引数を渡さないと #CALC! エラーが出ます。本来の使い方は「名前の管理」に登録してから呼び出す形です。

名前の管理へ登録する手順

LAMBDA関数を実用するには「名前の管理」への登録が必須です。Windows版Excelでの手順は以下のとおりです。

  1. 「数式」タブ をクリックする
  2. 「名前の管理」 をクリック(ショートカット: Ctrl + F3
  3. ダイアログ右上の 「新規」 をクリック
  4. 「新しい名前」ダイアログで以下を入力する
  • 名前: 関数名(例: TAX_CALC)。Excelの既存関数名と被らないようにする
  • 範囲: 通常は「ブック」を選択(シートを選ぶと他シートから呼び出せない)
  • コメント: 関数の説明(後で見返したときに役立つ)
  • 参照範囲: LAMBDA式を貼り付ける(例: =LAMBDA(price, price*1.1)
  1. 「OK」 をクリックして登録完了

登録が成功すると、そのブック内のどのセルでも =TAX_CALC(1000) のようにネイティブ関数と同じ感覚で呼び出せるようになります。

※ 名前の管理ダイアログの操作画面は、デスクトップ版Excel(Windows)でご確認ください。

実務例⑤:消費税計算をLAMBDA関数化して毎月使い回す

毎月の請求書で「税抜価格 × 1.1」の式を何十か所にも書いているなら、LAMBDA化の絶好のチャンスです。次のLAMBDA式を TAX_INCLUDED という名前で登録してみましょう。

'--- 名前の管理に登録するLAMBDA式 ---
=LAMBDA(price, ROUND(price*1.1, 0))

登録後はどのセルでも次のように使えます。

'--- 通常の関数として呼び出し可能 ---
=TAX_INCLUDED(B2)

将来、消費税率が変わったり端数処理を「切り捨て」に変えたいときは、「名前の管理」のLAMBDA式を1か所書き換えるだけ で全体に反映されます。コピペした数式を100か所修正する必要は一切ありません。

実務例⑥:営業日換算LAMBDAで週末カウントを統一

「ある日付からN営業日後の日付を返す」という処理は、社内の勤怠管理や納期計算で頻出です。NETWORKDAYSやWORKDAYを毎回書くのではなく、LAMBDA化すると統一できます。

'--- WORKDAY_AFTER として名前登録 ---
=LAMBDA(startDate, days, WORKDAY(startDate, days))

呼び出し例:

'--- 5営業日後の日付を取得 ---
=WORKDAY_AFTER(TODAY(), 5)

祝日リストも引数に加えたければ、次のように拡張できます。

'--- 祝日対応版 WORKDAY_AFTER ---
=LAMBDA(startDate, days, holidays, WORKDAY(startDate, days, holidays))

このようにLAMBDAは「あとから引数を増やす」拡張も柔軟にできます。

実務例⑦:評価ランクLAMBDAで成績判定を関数化

「点数からA/B/C/D評価を返す」というような判定ロジックは、複数のシートで同じ閾値を使うことが多く、LAMBDA向きです。

'--- RANK_GRADE として名前登録 ---
=LAMBDA(score,
  IF(score >= 80, "A",
   IF(score >= 60, "B",
    IF(score >= 40, "C", "D")))
)

呼び出し:

'--- セルB2の点数から評価を取得 ---
=RANK_GRADE(B2)

評価基準が「80→85」に変わったとしても、名前の管理にあるLAMBDA式の1か所を直すだけで、社内の全シートに反映されます。担当者ごとの判定ブレも防げます。

LAMBDA + ヘルパー関数で配列処理を一気に書く

LAMBDA関数の真価は、MAP/BYROW/BYCOL/REDUCE等のヘルパー関数と組み合わせたとき に現れます。これらは「LAMBDA式を受け取って、配列の各要素に適用する」高階関数です。

MAP関数との連携(要素ごとにLAMBDAを適用)

MAP関数は、配列の各要素に対してLAMBDAを実行し、結果を配列で返します。たとえば「A2:A10 の全ての値に税込計算を適用したい」とき、次のように書けます。

'--- A2:A10の全要素にTAX_INCLUDEDを適用 ---
=MAP(A2:A10, LAMBDA(x, ROUND(x*1.1, 0)))

これでスピル動作により、隣の列に税込価格が9行分一気に展開されます。LAMBDAを毎セルにコピーする必要はありません。

MAP関数の詳しい使い方は ExcelのMAP関数の使い方 で個別解説しています。

BYROW/BYCOLとの連携(行・列ごとの一括処理)

BYROW関数は「行ごと」に処理をかけ、BYCOL関数は「列ごと」に処理をかけます。たとえば「各行の最大値を取り出す」ならBYROWが便利です。

'--- 各行の最大値を取得 ---
=BYROW(A2:D10, LAMBDA(row, MAX(row)))

3列の合計を行単位で出したいなら次のとおりです。

'--- 各行の合計を取得 ---
=BYROW(A2:C10, LAMBDA(row, SUM(row)))

集計関数(SUM/MAX/MIN/AVERAGE)をLAMBDA経由で渡すだけで、行・列単位の一括処理が完了します。SUMPRODUCTや配列数式の代わりに使えるシーンが多く、慣れると手放せません。

LET + LAMBDA を組み合わせる:実務頻出3パターン

LETとLAMBDAは単独でも便利ですが、組み合わせると真価を発揮します。ここでは実務頻出の3パターンを紹介します。

パターン1:LETで中間変数を整理してからLAMBDAに渡す

外側の数式でLETを使ってデータを整え、整えた結果をLAMBDAベースのカスタム関数に渡す書き方です。

'--- LETでデータ整形→LAMBDA関数を呼び出す ---
=LET(
  raw,    FILTER(A2:C100, B2:B100="東京"),
  sorted, SORT(raw, 3, -1),
  TAX_INCLUDED(INDEX(sorted, 1, 3))
)

中間結果に名前を付けることで「フィルタ→ソート→税込変換」という処理の流れが明確になります。

パターン2:FILTER+SORTの組み合わせをLET変数で段階的に書く

LAMBDAを使わなくても、LET単体で動的配列関数を段階的に書けます。

'--- 動的配列関数を段階化 ---
=LET(
  filtered, FILTER(A2:C10, B2:B10="東京"),
  SORT(filtered, 3, -1)
)

東京のデータだけを抽出し、3列目で降順ソートする処理を「2段階」で書いています。中間結果の filtered だけを表示すれば動作確認ができるため、デバッグも容易です。

パターン3:LAMBDA内部でLETを使ってロジックを可読化する

LAMBDAで複雑な計算をするとき、内部にLETを入れ子にして中間変数を整理できます。

'--- LAMBDA内部にLETを入れ子で書く ---
=LAMBDA(price,
  LET(
    base, price * 1.1,
    tax,  base * 0.1,
    base + tax
  )
)

この式を TAX_DETAIL として登録すれば、=TAX_DETAIL(1000) で呼び出せます。LAMBDAの引数 price を受け取り、LETで段階的に basetax を計算してから合計を返す構造です。

LET/LAMBDA vs VBA Function|使い分けの判断基準

「カスタム関数を作るならLAMBDAとVBA UDF、どちらを選ぶべきか」は多くの方が悩む点です。両者を実務観点で比較します。

観点LAMBDA関数VBA Functionプロシージャ
作成手段数式のみVBAコード(VBE)
配布形式xlsxxlsm(マクロ有効ブック)
セキュリティ警告出ない出る
計算速度数式と同等やや遅い場合あり
対応バージョンMicrosoft 365のみVBA対応のExcel全般
可能な処理数式で書ける範囲ファイル操作・API呼出・複雑制御も可
デバッグLETの中間変数で確認ブレークポイント・イミディエイト
学習コストExcelの数式知識のみVBA文法を学ぶ必要あり

判断基準を実務シーン別に整理すると次のとおりです。

  • xlsxのまま配布したい・社内のマクロ警告を回避したい → LAMBDA
  • 計算式の延長で済む処理(税込・営業日・評価判定など) → LAMBDA
  • Excel 2021や旧バージョンのユーザーがいる → VBA Function(LAMBDAは使えない)
  • ファイル操作・正規表現・WEB API呼び出しが必要 → VBA Function
  • 長年VBA UDFで運用していて移行コストが高い → VBA Functionを継続

VBAのFunctionプロシージャの基本については VBA Functionプロシージャの使い方 で詳しく解説しています。両者の使い分けを社内で標準化したい方は、まずLAMBDAで実装してみて、できない処理だけVBAに移すアプローチが現実的です。

こんなエラーが出たら:つまずきポイントと対処法

LET/LAMBDAは強力ですが、慣れないうちはエラーに遭遇します。代表的な4つのケースと対処法をまとめます。

#NAME?エラーが出る原因と解決策

#NAME? エラーは、Excelが関数名や変数名を認識できないときに発生します。主な原因は3つです。

  1. バージョン非対応: Excel 2019以前でLETを使うと出ます。LAMBDAはExcel 2021でも非対応なので注意してください
  2. 関数名のスペルミス: =LET=LTE などとタイプミスしている
  3. 名前定義の未登録: =TAX_CALC(100) と呼んでも、「名前の管理」に未登録なら認識されません

対処は「バージョン確認 → スペル確認 → 名前の管理で登録状態を確認」の順で切り分けます。エラー処理を厚くしたいなら ExcelのIFERROR関数の使い方 を組み合わせてください。

#CALC!エラーが出る原因と解決策

#CALC! エラーは、LAMBDAをセルに書いた際に 末尾の引数渡しを忘れた ときの典型エラーです。たとえば次の式はエラーになります。

'--- これは#CALC!エラーになる ---
=LAMBDA(temp, (5/9)*(temp-32))

セル内で即時呼び出しするには末尾に (100) のように引数を付けます。

'--- 末尾に引数を渡せば正常動作 ---
=LAMBDA(temp, (5/9)*(temp-32))(100)

なお、名前定義に登録したLAMBDAを呼び出す場合は =MY_FUNC(100) の形で問題ありません。

変数名にセル参照と同名を使ったときの挙動

LETの変数名に A1B2 のような「セル参照と同名」を使うと、Excelは予期しない動作をする可能性があります。たとえば以下の式は本来意図した動作にならない恐れがあります。

'--- セル参照と同名はNG ---
=LET(A1, 10, A1*2)

LETの仕様上「変数名はセル参照と同名にしない」というルールがあります。pricetaxRate のように 意味のある名前 を必ず付けてください。可読性の面でも重要です。

LAMBDAの再帰呼び出しでスタックオーバーフロー

LAMBDAは自分自身を呼び出す「再帰」が可能ですが、停止条件を書き忘れるとExcelがフリーズします。階乗計算の例で見てみましょう。

'--- FACT_LAMBDA として登録するイメージ ---
=LAMBDA(n, IF(n<=1, 1, n * FACT_LAMBDA(n-1)))

n<=1 という停止条件を抜くと無限ループになり、最悪Excelが応答不能になります。再帰LAMBDAを書くときは必ず停止条件を最初に書く癖を付けてください。

よくある質問(FAQ)

[faq q="LET関数とLAMBDA関数の最大の違いは何ですか?" a="スコープと役割が違います。LET関数は「1つのセル内だけで使える変数」を作るためのもの、LAMBDA関数は「ブック全体で使い回せるカスタム関数」を作るためのものです。LETは長い数式を整理する用途、LAMBDAは複数箇所で同じ計算ロジックを再利用する用途で使い分けます。"]
[faq q="Excel 2019や2016ではLET・LAMBDAは使えますか?" a="使えません。LET関数はExcel 2021 / Microsoft 365以降が必須、LAMBDA関数はMicrosoft 365専用です。Excel 2019以前のバージョンで開くと#NAME?エラーになります。社外に共有する場合は、相手のExcelバージョンを必ず確認してください。"]
[faq q="LAMBDA関数で作ったカスタム関数は他のブックでも使えますか?" a="そのままでは使えません。LAMBDA関数は「名前の管理」に登録するため、登録したブック内でのみ有効です。他のブックでも使うには、各ブックで同じLAMBDA式を再登録するか、テンプレートブックを共有して全員にコピーしてもらう運用が一般的です。"]
[faq q="LAMBDA関数にマクロのセキュリティ警告は出ますか?" a="出ません。LAMBDAは数式の延長なので、ファイル形式もxlsxのままで配布できます。VBAのユーザー定義関数(UDF)と違い、開いた人にマクロ警告が出ないため、社内ポリシーでマクロが制限されている環境でも安心して配布できます。"]
[faq q="LET関数の変数名に使ってはいけないものはありますか?" a="4つの制約があります。1. 数字や記号で始まる名前(例: 1stValue)、2. スペースを含む名前、3. A1やB2などのセル参照と同じ名前、4. TRUE・FALSE・NULLなどの予約語、これらは使えません。安全な命名は「英小文字で始まる意味のある名前(例: result, taxRate, totalPrice)」です。"]
[faq q="LAMBDAとVBAのユーザー定義関数(UDF)はどちらを使うべきですか?" a="数式で書ける範囲ならLAMBDAを優先するのがおすすめです。xlsxのまま配布でき、セキュリティ警告も出ないからです。ただしファイル操作・正規表現・WEB API呼び出しなど数式で書けない処理はVBA UDFが必要です。Microsoft 365が使えない環境ではVBA UDFを選びましょう。"]

まとめ:LETは今日から、LAMBDAは次のステップで

LET関数とLAMBDA関数は、ExcelをVBAなしで「自分仕様」にカスタマイズできる強力な仕組みです。最後に本記事の要点を整理します。

  • LET関数: セル内で変数を定義し、長い数式を整理する。Excel 2021以降で利用可
  • LAMBDA関数: ブック全体で再利用できるカスタム関数を定義する。Microsoft 365専用
  • 使い分け: 1セル完結ならLET、複数箇所で繰り返すならLAMBDA
  • 組み合わせ: LAMBDA内部でLETを使えば、関数の内部ロジックを段階的に書けて可読性が大幅向上
  • エラー対処: #NAME? はバージョン・スペル・名前登録、#CALC! はLAMBDA末尾の引数渡し忘れ
  • VBAとの違い: xlsxのまま配布可・セキュリティ警告なし・ただしMicrosoft 365専用

まずは今日からLETを試してみてください。長いVLOOKUP+IFERRORの数式を result という変数1つで括るだけで、メンテナンス性が大きく変わります。LETの操作に慣れたら、次のステップとしてLAMBDA関数を1つだけ「名前の管理」に登録してみましょう。消費税計算でも単価計算でもかまいません。1つでも自作の関数がブックに登録できると、Excelとの付き合い方そのものが変わります。

VBAに踏み込まなくても、数式だけでここまで自動化できる時代になりました。「数式に名前を付ける」 という小さな一歩から、メンテナンスしやすく再利用可能なExcel運用を始めていきましょう。

関連記事で次のステップに進む

LET/LAMBDAを使いこなすうえで、合わせて押さえておきたい関数記事を紹介します。

タイトルとURLをコピーしました