TL;DR —
LETは 1 つの数式の中で名前付き変数を宣言します:=LET(name1, value1, name2, value2, …, result)。名前は必ずペアで並べ、 結果は常に最後の引数、そして Excel は名前付きの各値を一度だけ計算します。 だから LET は読みやすいだけでなく、同じ部分式を繰り返すよりも速いのです。 Excel 365 と 2021 以降。
=LET(revenue, B2, cost, C2, margin, (revenue-cost)/revenue, margin)
=LET(total, SUMIF(A:A,G1,B:B), IF(total>0, total, "none")) ' 列のスキャンは 2 回ではなく 1 回
長い Excel 数式は、変数のない小さなプログラムのようなものです。すべての値がその場で
計算され、しかも何度も計算されることが多く、どこにも名前がありません。LET は、その
プログラムに欠けていた冒頭の数行を補います。つまり、値を使う前に変数を宣言する場所
です。見返りは一石二鳥。読める数式が手に入り、しかも多くの場合は実行が速くなります。
この記事でわかること
- LET が腑に落ちる考え方の軸:変数を宣言する、関数の冒頭部分
- LET を壊すたった 1 つのルール:名前はペア、計算は最後 — そして外したときに出るエラー
- LET が読みやすさだけでなくパフォーマンスのツールである理由(各値は一度しか計算されない)
- LET をいつ使うか — そして命名の落とし穴(
A1は有効な名前ではない)
考え方の軸:LET は変数を宣言する場所
本物のプログラミング言語で関数の冒頭を思い浮かべてください。いくつかのものに名前を付け、
それから使います。LET はそれをセルに持ち込みます。形は決して変わりません。名前と値の
ペアが並び、最後にそれらを使う 1 つの計算が来ます:
=LET(name1, value1, name2, value2, calculation)
上から下へこう読みます。「rate を 0.2 とし、net を A2-B2 とし、それから
net * rate を返す」。LET を宣言、そして結果と捉えた瞬間、3 つのことが導かれます:
- 定義した名前は、最後の計算の中で好きなだけ何度でも使い回せます。ただし Excel がその値を評価するのは一度だけです。
- 名前は上から下へ組み立てます。後ろの名前は前の名前を参照できますが、その逆はできません。
- 最後の引数が答えです。 その手前はすべて名前と値のペアになります。
LET を壊すルール:ペア、そして結果
これは LET で最もよくあるエラーです。最後の引数より前は、すべて名前と値のペアでなければ なりません。 数えてみてください。名前、値、名前、値、…、結果。計算の前には偶数個の 引数が並び、最後に 1 つの計算で締めくくります。
=LET(x, 10, y, 20, x+y) ' ペア 2 組、そして結果 -> 30
=LET(x, 10, y, 20) ' 最後の計算がない -> 意図に反して 20 を返す
=LET(x, 10, x*2, y, x+y) ' "x*2" が名前として解釈される -> エラー
LET が入力値のどれかに似た数値を返したら、ほぼ確実に最後の計算を書き忘れていて、
Excel が最後の値をそのまま返しています。#VALUE! や #NAME? が出たら、計算を途中に
入れてしまったか、無効な名前を使った可能性が高いです。
命名の落とし穴:
- 名前はセル参照のように見えてはいけません —
A1、R2、Q4はすべて拒否されます。Q4ではなくqtr4を使いましょう。 - 名前にスペースは使えず、数字で始めることもできません。
- 名前は前の名前を参照できますが、自分自身や後ろの名前は参照できません — 必要な順序で宣言してください。
LET が本当はパフォーマンスのツールである理由
読みやすさは目に見える利点です。隠れた利点は速度です。Excel は名前付きの各値を、何度 参照されても一度だけ評価します。次の数式を比べてみましょう:
=IF(SUMIF(A:A,G1,B:B)>0, SUMIF(A:A,G1,B:B), "none")
この列全体に対する SUMIF は2 回実行されます。そうした数式が何百もある大きな
シートでは、作業量が倍になります。これを一度だけにまとめましょう:
=LET(total, SUMIF(A:A,G1,B:B), IF(total>0, total, "none"))
これで列のスキャンは一度で済みます。上級者が繰り返す部分式を LET で包む本当の理由は これです。整理のためではなく、再計算を半分(あるいはそれ以下)に減らすためです。 目安はこうです。同じ部分式が数式の中に 2 回以上出てくるなら、それは LET に入れるべきです。
動的配列のチェーンで、各ステップに名前を付ける
LET は現代のスピル数式の中でこそ真価を発揮します。各段階に名前を付ければ、解読不能な ネストが、読めて、しかも 1 行ずつデバッグできるものに変わります:
=LET(
data, FILTER(Sales, Sales[Region]="West"),
top, SORT(data, 3, -1),
TAKE(top, 5)
)
それぞれの名前はチェックポイントです。数式バーで data を選んで F9 を押せば、その段階
だけを確認できます。FILTER、
SORT、TAKE
と組み合わせれば、LET は 5 ステップのクエリを破綻させずに保つ要になります。
判断のポイント:LET は 1 つのセルに収まる — それを超えるなら LAMBDA
| 状況 | 使うもの | 理由 |
|---|---|---|
| 1 つの数式の中で部分式が繰り返される | LET | N 回ではなく一度だけ計算 |
| 誰にも読めないネスト数式 | LET | ステップに名前を付け、1 行ずつデバッグ |
| 他のセルやブックでもそのロジックを再利用したい | LAMBDA | LET は数式ごと、LAMBDA は呼び出せる |
| 1 ステップだけの単純な数式 | どちらも不要 | LET はノイズになるだけで見返りなし |
LET は 1 つの数式の中で生きます。同じロジックを多くのセルから — あるいは別のブックから
— 呼び出したくなった瞬間、LET では手狭になり、LAMBDA
の出番です。実際、優れた LAMBDA の中身はほとんどが LET です。1 ステップの数式に LET を
持ち出すのもやめましょう。=A1*2 に名前を付けても、誰の役にも立ちません。
ExcelMaster はどう役立つか
LET は、Excel の数式がコードのように読め始める地点です。そしてコードは、AI コパイロット が書くのが得意なものそのものです。ExcelMaster は、長くて 読めないネスト数式を、名前付きのステップを持つきれいな LET へと、Excel の中でそのまま リファクタリングします。しかも、一度だけ計算すべき繰り返しの部分式も見つけ出します。 計算したいことを普通の言葉で説明すれば、名前まで付いた LET を返してくれます。 ご自身のデータで試す。
よくある質問
Excel の LET 関数は何をする関数ですか?
LET は 1 つの数式の中で名前付き変数を宣言します。部分式を繰り返す代わりに
=LET(name, value, …, result) と書けます。数式が読みやすくなり、名前付きの各値を一度
しか計算しません。
LET の数式が間違った値を返すのはなぜですか?
ほぼ必ず、最後の引数が計算になっていないからです。最後の引数より前はすべて名前と値の
ペアでなければならず、最後の引数が結果です。=LET(x,10,y,20) がペアの後に計算がないため
20 を返してしまうのがその例です。
LET を使うと数式は速くなりますか?
部分式が繰り返される場合は速くなります。Excel は名前付きの各値を一度だけ評価するので、
=LET(t, SUMIF(A:A,G1,B:B), IF(t>0,t,0)) は列を 2 回ではなく 1 回だけスキャンします。
大きなシートでは、これは見た目がきれいになるだけでなく、本物の高速化になります。
LET で #NAME? エラーが出るのはなぜですか?
無効な名前を使ったからです。名前はセル参照のように見えてはならず(A1、Q4)、スペースを
含めることも、数字で始めることもできません。qtr4、rate、net_sales のように付け直して
ください。
LET はどの Excel バージョンで使えますか?
LET は Excel 2021、Excel 2024、Microsoft 365 の Windows 版と Mac 版で使えます。
Excel 2016 や 2019 では使えません。
検証環境
検証環境: Excel 365(Windows 11)— 最終確認 2026年6月22日
関連ガイド: Excel LAMBDA · Excel MAP, REDUCE & BYROW · Excel FILTER · Excel SORT
