Excel関数 逆引き集 | 計算途中のエラー防止 → LET

Excel
スポンサーリンク

概要

「途中計算でエラーが出て、そこから先が全部エラーになる」
「同じ安全チェックを何回も書いて数式がぐちゃぐちゃ」

こういう“計算途中のエラー”を、
すっきり・安全にコントロールできるのが 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 で分解してあげると、
エラーも減るし、何より“読みやすさ”が一気に変わります。

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