「この数式、長すぎて何をやってるかわからない…」。Excelで複雑な数式を組んでいると、こんな場面によく出くわしますよね。
しかも同じ計算を数式の中で何度も繰り返していると、修正するときにどこを直せばいいのか迷ってしまいます。1か所直し忘れてエラーになった経験がある人も多いのではないでしょうか。
そんなときに便利なのが LET関数 です。数式の中で「変数」を定義して、名前を付けて使い回せるようになります。
この記事では、LET関数の基本構文から、実務で役立つ数式の整理テクニック、パフォーマンス改善の仕組みまでまとめて紹介します。
LET関数とは?
LET関数(読み方: れっと)は、数式の中で変数を定義し、その変数を使って計算できる関数です。
名前は英語の「let(〜を〜とする)」からきています。プログラミングでも変数宣言に使われるおなじみの単語ですね。
たとえば VLOOKUP(A2,B:D,3,FALSE) の結果を何度も使いたいとします。LET関数で price という変数に入れておけば、数式の中で price と書くだけで参照できます。
LET関数にできることをまとめると、次のとおりです。
- 数式の中で変数(名前と値のペア)を定義する
- 同じ計算を何度も書かずに済むので数式が短くなる
- 変数名を付けることで数式の意味が読み取りやすくなる
- 同じ計算は内部的に1回だけ実行されるのでパフォーマンスが向上する
NOTE
LET関数はMicrosoft 365、Excel 2021以降、Excel for the webで使えます。Excel 2019以前では #NAME? エラーになるので、お使いのバージョンを確認しておきましょう。
LET関数の書き方(構文と引数)
基本構文
=LET(名前1, 値1, [名前2, 値2, ...], 計算式)
「名前」と「値」をペアで指定し、最後に「計算式」を書きます。計算式の中で定義した名前を使えるのがポイントです。
引数の説明
| 引数 | 必須/任意 | 説明 |
|---|---|---|
| 名前1 | 必須 | 変数の名前。アルファベット・数字・アンダースコアで構成する |
| 値1 | 必須 | 名前1に割り当てる値。セル参照・数式・直接値のいずれも可 |
| 名前2, 値2〜 | 任意 | 2組目以降の変数定義。最大126組まで指定可能 |
| 計算式 | 必須 | 定義した変数を使った計算式。最後の引数が計算式になる |
変数名にはセル参照と同じ名前(A1やB2など)は使えません。price や total のように、中身がわかる名前を付けておくと読みやすくなりますよ。
TIP
引数の数は必ず 奇数 になります。「名前, 値」のペアが1組以上 + 最後の「計算式」で、最低3つです。偶数個を指定するとエラーになるので注意してください。
LET関数の基本的な使い方
まずはシンプルな例で動きを確認してみましょう。
変数を1つ定義する
税込価格を計算する例です。
=LET(tax, 1.1, A2 * tax)
tax という変数に 1.1 を代入し、A2に掛けています。A2が1000なら結果は 1100 です。
この程度なら =A2*1.1 でも十分ですが、数式が長くなると変数の効果が実感できます。
変数を複数定義する
本体価格と税率をそれぞれ変数にして、税込価格を計算する例です。
=LET(price, A2, tax, 1.1, price * tax)
price にA2の値、tax に1.1を代入し、最後の price * tax で計算しています。
変数を複数使うと「どの値が何を意味しているか」が明確になります。数式だけ見ても意味がわかるのがLET関数の大きなメリットですよ。
変数に数式の結果を代入する
変数の「値」には数式を直接書くこともできます。
=LET(total, SUM(B2:B10), avg, total / COUNTA(B2:B10), avg)
total に合計値を代入し、avg に平均値を代入しています。total を avg の計算で再利用しているのがポイントです。
このように、先に定義した変数を後の変数で使えるので、段階的に計算を組み立てられます。
LET関数の実践的な使い方・応用例
複雑なIF + VLOOKUP数式をLETで整理する
LET関数が最も威力を発揮するのは、同じ計算が数式内で繰り返されるケースです。
Before(LETなし):
=IF(VLOOKUP(A2,商品マスタ!A:C,3,FALSE)>=1000, VLOOKUP(A2,商品マスタ!A:C,3,FALSE)*0.9, VLOOKUP(A2,商品マスタ!A:C,3,FALSE))
同じ VLOOKUP が3回も登場していて読みにくいですよね。
After(LETあり):
=LET(price, VLOOKUP(A2,商品マスタ!A:C,3,FALSE), IF(price>=1000, price*0.9, price))
VLOOKUPの結果を price に1回だけ代入しています。数式の長さが半分以下になり、何をしているかも一目でわかります。
IFERRORと組み合わせてエラーハンドリングする
VLOOKUPのエラー処理をLET関数で整理する例です。
=LET(result, VLOOKUP(A2,商品マスタ!A:C,3,FALSE), IFERROR(result * 1.1, "該当なし"))
VLOOKUPの結果を result に入れておき、エラーなら「該当なし」、正常なら税込価格を返します。IFERROR関数との組み合わせは実務で特によく使うパターンです。
同じ計算を繰り返さずパフォーマンスを改善する
LET関数を使うと、変数に代入した計算は内部的に 1回だけ 実行されます。
たとえば先ほどのBefore版では、VLOOKUPが3回実行されます。対してAfter版のLET関数では1回で済みます。
データ量が多いシートでは、この差が処理速度に影響してきます。数千行のデータでVLOOKUPやSUMIFSを繰り返している場合は要注意です。LET関数でまとめると、ブックの動作が軽くなることがありますよ。
FILTER関数と組み合わせる
FILTER関数の結果を変数に入れて、さらに加工する例です。
=LET(filtered, FILTER(A2:C20, B2:B20="東京"), SORT(filtered, 3, -1))
東京のデータだけをFILTERで抽出し、その結果を3列目(たとえば売上)の降順でソートしています。
FILTERとSORTを別々に書くと入れ子が深くなりますが、LET関数で段階的に処理すると読みやすくなります。
条件分岐をLETで見やすくする
IF関数で複数条件を判定する数式をLETで整理する例です。
=LET(score, B2, IF(score>=90, "S", IF(score>=70, "A", IF(score>=50, "B", "C"))))
B2を score という変数に代入しています。ネストしたIFS関数に書き換えることもできますが、LETで変数名を付けるだけでも何を判定しているかが明確になります。
よくあるエラーと対処法
LET関数で「思った結果にならない」ケースをまとめました。
| 症状 | 原因 | 対処法 |
|---|---|---|
| #NAME? エラーが出る | 変数名にセル参照と同じ名前(A1, B2など)を使っている | セル参照と重複しない名前に変更する(例: val, x) |
| #NAME? エラーが出る | Excel 2019以前を使っている | Microsoft 365またはExcel 2021以降にアップグレードする |
| #NAME? エラーが出る | 変数名にスペースや記号を含めている | アルファベット・数字・アンダースコアのみ使用する |
| #VALUE! エラーが出る | 引数の数が偶数になっている(計算式がない) | 最後に計算式を追加する。引数の数は奇数が正しい |
| 変数が認識されない | 数式の中でスペルミスがある | 変数名の大文字小文字を含めて正確に一致させる |
| 数式が長いまま変わらない | LET関数の効果を誤解している | LET関数は数式の「見た目」を整理するもの。セルに表示される結果は変わらない |
エラー値の詳細はExcelのエラー値一覧も参考にしてください。
TIP
変数名はシンプルに短く付けるのがおすすめです。
x,val,priceのように意味がわかる最小限の名前にしておくと、数式全体が読みやすくなります。
LAMBDA関数との違い・使い分け
LET関数とLAMBDA関数はどちらも数式を整理できる関数ですが、役割が違います。
| 比較項目 | LET関数 | LAMBDA関数 |
|---|---|---|
| 役割 | 数式の中で 変数を定義 する | カスタム関数を定義 する |
| 使いどころ | 同じ計算の繰り返しを減らす | よく使う計算ロジックを関数化する |
| 再利用の範囲 | そのセルの数式内のみ | 「名前の管理」に登録すればブック全体 |
| 構文 | =LET(名前, 値, 計算式) | =LAMBDA(引数, 数式)(値) |
| 対応バージョン | Microsoft 365 / Excel 2021以降 | Microsoft 365 / Excel 2024 |
使い分けのポイントは次のとおりです。
- 「この数式の中で同じ計算を何度も書いている」 → LET関数で変数にまとめる
- 「この計算ロジックを他のセルやシートでも使い回したい」 → LAMBDA関数で関数化する
両方を組み合わせることもできます。LAMBDA関数の中でLET関数を使えば、カスタム関数の内部でも変数を定義できますよ。
=LAMBDA(price, LET(tax, 1.1, discount, 0.9, price * tax * discount))(A2)
Googleスプレッドシートとの違い
GoogleスプレッドシートにもLET関数があり、基本的に同じ構文・同じ動作です。
| 項目 | Excel | Googleスプレッドシート |
|---|---|---|
| 対応バージョン | Microsoft 365 / Excel 2021以降 | 全アカウント対応 |
| 構文 | =LET(名前, 値, 計算式) | =LET(名前, 値, 計算式) |
| 変数ペアの上限 | 126組 | 126組 |
| パフォーマンス最適化 | あり(1回だけ計算) | あり(1回だけ計算) |
構文も動作もほぼ同じなので、Excelのファイルをスプレッドシートで開いてもLET関数はそのまま動作します。
まとめ
LET関数は、数式の中で変数を定義して再利用できる関数です。
ポイントを整理します。
- 構文は
=LET(名前, 値, 計算式)で、名前と値をペアで指定する - 同じ計算を何度も書かなくて済むので、数式が短くなる
- 変数名を付けることで、数式の意味が読み取りやすくなる
- 同じ計算は内部的に1回だけ実行されるため、パフォーマンスも向上する
- 引数の数は必ず奇数。偶数だとエラーになる
- 変数名にセル参照と同じ名前(A1など)は使えない
- LAMBDA関数は「関数を定義」、LET関数は「変数を定義」と覚えると使い分けやすい
まずは =LET(x, 10, x*2) で「変数xに10を入れて2倍 = 20」から試してみてください。
関連記事
関数一覧
Excel関数の一覧は下記の記事で確認できます。
エラー値が表示される場合は、下記の記事も参考にしてみてください。
