概要
「途中計算でエラーが出て、そこから先が全部エラーになる」
「同じ安全チェックを何回も書いて数式がぐちゃぐちゃ」
こういう“計算途中のエラー”を、
すっきり・安全にコントロールできるのが LET 関数です。
LET は、数式の中で「変数(名前付きの値)」を定義し、
その名前を使い回せる関数です。
うまく使うと、
- 途中計算結果に名前を付けて、エラー対応済みの値だけを使う
- IFERROR や分母チェックを一か所にまとめて、安全な値だけで後半を計算
という「エラーが広がらない数式」を作れます。
LET の基本(“変数”のイメージ)
LET の書式とイメージ
LET の基本形はこうです。
=LET(
名前1, 値1,
名前2, 値2,
…(必要なら続ける)…,
最後の計算式
)
イメージとしては、数式の最初で
- 「この値を ○○ という名前で持っておく」
- 「その名前を使って最後の計算をする」
という“メモ帳”を数式の中に作る感じです。
簡単な例。
=LET(
単価, B2,
数量, C2,
単価 * 数量
)
内部では「単価=B2」「数量=C2」と覚えさせて、
最後に「単価 * 数量」を計算しているだけです。
ここに「エラー防止」の工夫を入れていきます。
パターン1:分母ゼロ・計算不能を「安全な値」に変えてから使う
まず LET で「安全な分母」を作る
よくあるのが、割合計算での #DIV/0! です。
普通の書き方。
=C2 / D2
D2 が 0 や空白だと #DIV/0! になり、
その値をさらに別の計算に使うと、エラーが連鎖していきます。
LET で「安全な分母」を一度だけ作り、
後半の計算はその“安全版”だけを使う形にします。
=LET(
分子, C2,
分母, D2,
安全な分母, IF(分母=0, NA(), 分母),
分子 / 安全な分母
)
ここでのポイント。
分子
C2 の値を保管
分母
D2 の値を保管
安全な分母
分母が 0 のときは NA() にして、
そうでなければ D2 の値
(NA にしておくと、後で ISNA などで「除外対象」にしやすい)
最後の計算
常に「安全な分母」だけを使う
このように、
「エラーが出やすい場所」を LET の最初のほうで一回だけ処理しておき、
以降の計算では、その“処理済みの値”だけを使うことで、
エラーが広がるのを防げます。
パターン2:中間計算を LET に退避して IFERROR を一度だけ書く
「何度も同じ IFERROR」を一か所にまとめる
例えば、長い計算の一部に VLOOKUP があり、
同じ VLOOKUP を何度も使っている、というケース。
エラー対策をしない書き方(よくある形)。
=VLOOKUP($A2, マスタ!$A:$D, 2, FALSE)
+ VLOOKUP($A2, マスタ!$A:$D, 3, FALSE)
- VLOOKUP($A2, マスタ!$A:$D, 4, FALSE)
検索失敗で #N/A が出ると、
全部エラーになってしまいます。
よくある対策は、1 個ずつ IFERROR をかぶせることですが、
それをやると数式が地獄のように長くなります。
LET で「VLOOKUP 結果(エラー処理済み)」を
一度だけ作って、それを使い回します。
=LET(
検索結果2, IFERROR(VLOOKUP($A2, マスタ!$A:$D, 2, FALSE), 0),
検索結果3, IFERROR(VLOOKUP($A2, マスタ!$A:$D, 3, FALSE), 0),
検索結果4, IFERROR(VLOOKUP($A2, マスタ!$A:$D, 4, FALSE), 0),
検索結果2 + 検索結果3 - 検索結果4
)
こうすると、
- IFERROR を書くのは「変数定義のところ」だけ
- 最後の計算式は、エラーを気にせず足し算・引き算を書ける
という構造になります。
「エラー処理した中間値」を最初に作り、
以降は“きれいな値”だけを使う。
これが「計算途中のエラー防止」としての LET の基本パターンです。
パターン3:途中結果を分けて「どこでエラーになるか」を切り分ける
デバッグしやすい形に分解して、原因を見つけやすくする
長い数式で、どこでエラーになっているのか分からない…。
そんなときも LET が使えます。
例えば、こんな式があるとします。
=(B2*C2 + D2) / (E2 - F2)
これがエラーになったとき、
原因は
- B2*C2 がエラー
- D2 がエラー
- E2-F2 が 0
- そもそもどこかに文字列が入っている
など色々考えられます。
LET で途中計算に名前をつけ、
どこがエラーかを切り分けやすくします。
=LET(
かけ算部分, B2*C2,
分子, かけ算部分 + D2,
分母, E2 - F2,
IF(
OR(ISERROR(かけ算部分), ISERROR(分子), ISERROR(分母), 分母=0),
NA(),
分子 / 分母
)
)
ここでは、
- かけ算部分
- 分子
- 分母
をそれぞれ名前付きで持ち、
最後の IF の中で「どれかがエラーか?分母は 0 か?」をまとめてチェックしています。
実務では、
まず LET の中の各変数を
一時的にセルにコピーしてみて、どこでエラーになるか見る、
といった“分解デバッグ”にも使えます。
パターン4:複数列で共通する“安全な値”を LET で共有する
同じ安全チェックを何列にも使いたいとき
例えば、「売上合計」「利益」「利益率」など複数列の計算で、
共通して使う
- 安全な単価
- 安全な数量
などがある場合、
1 セルの LET 内で「共通の安全値」を定義して、
それを使う形にできます。
=LET(
安全単価, IFERROR(B2, 0),
安全数量, IFERROR(C2, 0),
売上, 安全単価 * 安全数量,
売上
)
別セルでは
=LET(
安全単価, IFERROR(B2, 0),
安全数量, IFERROR(C2, 0),
売上, 安全単価 * 安全数量,
利益率, IF(売上=0, NA(), (売上 - D2) / 売上),
利益率
)
のように、「安全単価/安全数量/売上」を共通の土台として使い回せます。
同じ IFERROR や IF 分岐を何回も書かなくて済むので、
数式が短く・ミスも減り・エラーも広がりにくくなります。
LET を使うときの注意ポイント
どの Excel でも使えるわけではない
LET は Excel 365 / 2021 以降など新しめのバージョンで使える関数です。
古いバージョンでは動かないことがあります。
名前のつけ方ルール
名前(変数名)にはルールがあります。
- 先頭は文字(数字で始めない)
- セル参照っぽい名前(A1, B2 など)は NG
- 記号は基本「_」だけが安全
日本語の名前も使えますが、最初は
a, b, 分母, 安全分母, 検索結果
くらいの短めで意味が分かる名前にしておくと読みやすいです。
例題
問題1
C2 ÷ D2 で割合を計算したいが、D2 が 0 のときは #N/A を返し、
それ以外は C2/D2 を返す LET 関数の式を書いてください。
「分子」「分母」「安全な分母」という3つの名前を使ってください。
=LET(
分子, C2,
分母, D2,
安全な分母, IF(分母=0, NA(), 分母),
分子 / 安全な分母
)
問題2
次のような VLOOKUP を何度も使って計算していました。
=VLOOKUP($A2, マスタ!$A:$D, 2, FALSE)
+ VLOOKUP($A2, マスタ!$A:$D, 3, FALSE)
検索に失敗して #N/A のときは 0 として扱い、
同じ VLOOKUP を LET で「結果2」「結果3」という名前にしてから足し算する式を書いてください。
=LET(
結果2, IFERROR(VLOOKUP($A2, マスタ!$A:$D, 2, FALSE), 0),
結果3, IFERROR(VLOOKUP($A2, マスタ!$A:$D, 3, FALSE), 0),
結果2 + 結果3
)
問題3
=(B2*C2 + D2) / (E2 - F2) を LET で分解し、
「かけ算部分」「分子」「分母」という名前を付けたうえで、
分母が 0 またはどこかがエラーのときは #N/A、
それ以外は分子/分母 を返す式を書いてください。
=LET(
かけ算部分, B2*C2,
分子, かけ算部分 + D2,
分母, E2 - F2,
IF(
OR(ISERROR(かけ算部分), ISERROR(分子), ISERROR(分母), 分母=0),
NA(),
分子 / 分母
)
)
問題4
B2 に単価、C2 に数量が入っています。
B2 や C2 がエラーのときは 0 として扱い、
「安全単価」「安全数量」「売上」という3つの名前を LET で定義して
売上(安全単価×安全数量)を返す式を書いてください。
=LET(
安全単価, IFERROR(B2, 0),
安全数量, IFERROR(C2, 0),
売上, 安全単価 * 安全数量,
売上
)
問題5
A2:A20 に計算結果が入っています。
この中から「正常な値だけの平均」を取りたいとき、
LET で「正常データ」として FILTER 結果に名前を付け、
その平均を返す式の一例を書いてください
(ヒント:FILTER と NOT(ISERROR) を使います)。
=LET(
正常データ, FILTER(A2:A20, NOT(ISERROR(A2:A20))),
AVERAGE(正常データ)
)
まとめ
「計算途中のエラー防止 → LET」の本質は、
- まず LET の中で「エラー処理済みの中間値」に名前を付ける
- その“きれいな値”だけを後半の計算で使う
という流れを作ることです。
型はこうです。
=LET(
安全な中間値1, …エラー処理を含んだ計算…,
安全な中間値2, …,
最後の計算(安全な中間値1, 安全な中間値2 を使う)
)
いま「IFERROR だらけで長くなっている数式」や
「途中のどこでエラーが出ているか分からない数式」があれば、
一度 LET で分解してあげると、
エラーも減るし、何より“読みやすさ”が一気に変わります。
