【Excel 関数】LET関数で長い数式を整理する — 読めて・直せる数式の書き方

この記事は約7分で読めます。

この記事で分かること

  • LET 関数の基本的な書き方
  • 複雑な数式を LET で整理してどう変わるか
  • 変数名を使って数式を読みやすくする方法
  • LET が使えるバージョンの確認

「ネストが深くて自分でも何をしているか分からない数式になってしまう」「同じ計算を数式内で何度も書いている」という方に向けて書いています。


どんな場面で使うか

  • 同じセル範囲や計算結果を数式内で複数回参照している
  • IF の条件式が長くてネストが深くなっている
  • XLOOKUP や FILTER の引数が長くて読みにくい
  • 数式をレビューしたり後から修正したりすることが多い

基本説明

この記事では、次の2つのシートを例に使います。数式で使う列は全体を通して B列=単価、C列=数量 で統一しています。

「売上データ」シート(メインの表):

A: 商品名 B: 単価 C: 数量
商品A 5000 10
商品B 3000 5

「商品マスター」シート(商品名をキーにした属性表。後半のXLOOKUP例で使用):

A: 商品名 B: カテゴリ C: 在庫
商品A 家電 15
商品B 文具 0

LET 関数とは

LET 関数は、数式内で変数(名前付きの値)を定義してから計算するための関数です。プログラミングの変数宣言に近い概念です。

書式:

=LET(変数名1, 値1, [変数名2, 値2, ...], 計算式)
  • 変数名と値をペアで定義する(いくつでも追加できる)
  • 最後の引数が返す計算式
  • 変数名はその数式内でのみ有効

一見複雑に見えますが、「長い数式を短い名前に置き換える」だけの機能です。

LET を使う前と後の比較

「売上データ」シートで、小計(単価×数量)が3万円を超えたら10%引きという金額を求める例です。B2=単価、C2=数量です。

使用前(同じ計算が3回書かれている例):

=IF(B2*C2 > 30000, B2*C2 * 0.9, B2*C2)

B2*C2(単価×数量)という部分が3回出てきます。計算を変更するときは3箇所すべてを直す必要があり、見落とすリスクがあります。

LET を使った場合:

=LET(
  小計, B2 * C2,
  IF(小計 > 30000, 小計 * 0.9, 小計)
)
  • 小計:単価(B2)× 数量(C2)の計算に名前をつけた
  • 最後の IF が実際に返す計算式

小計 の定義が1箇所にまとまり、計算を直すときもここだけを直せばよくなります。サンプルデータでは、商品A(単価5000×数量10 = 50000)は3万円超なので10%引きの 45000、商品B(3000×5 = 15000)は3万円以下なので定価のままです。


手順

基本の書き方を覚える

まず単純な例で構造を確認します。

例: 消費税込みの金額を計算する

=LET(
  税率,   0.1,
  税込,   B2 * (1 + 税率),
  税込
)
  1. 税率 = 0.1 という変数を定義
  2. 税込 = B2 * (1 + 税率) という変数を定義
  3. 最後に 税込 を返す

サンプルデータでは B2(単価)が 5000 なので、結果は 5500 になります。

シンプルなケースでは LET を使う必要はありませんが、この構造を理解しておくと複雑な数式で役立ちます。

改行とインデントで読みやすくする

数式バーでは改行(Alt+Enter)とスペースが使えます。変数が増えると改行を入れることで見やすくなります。

=LET(
  対象範囲, A2:A100,
  基準値,   AVERAGE(対象範囲),
  偏差,     対象範囲 - 基準値,
  SQRT(SUMPRODUCT(偏差^2) / COUNT(対象範囲))
)

これは A2:A100 に測定値などの数値データが入っている想定で、標準偏差を手動計算している例です。途中の計算結果に名前をつけることで、「何を計算しているか」が読み取りやすくなります。数式バーの中でも、上のコードブロックと同じ見た目のまま表示されます。


サンプル例

複数条件の割引計算

「金額が5万円以上なら5%引き、10万円以上なら10%引き、それ以外は定価」という計算です。

LET を使わない場合:

=IF(B2*C2>=100000, B2*C2*0.9, IF(B2*C2>=50000, B2*C2*0.95, B2*C2))

B2*C2(単価×数量)が3回出てきます。

LET を使った場合:

=LET(
  小計, B2 * C2,
  IF(小計 >= 100000, 小計 * 0.9,
   IF(小計 >= 50000,  小計 * 0.95,
      小計))
)

小計の計算が1箇所にまとまりました。サンプルデータでは、商品A(5000×10 = 50000円)は5%引きの 47500、商品B(3000×5 = 15000円)は5万円未満なので定価のままになります。

同じ XLOOKUP を複数回使う数式

XLOOKUP 関数 で商品名からマスターを参照して「カテゴリ」「在庫」など複数の値を使う場合、通常は項目ごとに XLOOKUP を書くことになります。この例は「売上データ」シートのA2(商品名)・B2(単価)・C2(数量)と、「商品マスター」シート(商品名・カテゴリ・在庫)を使います。

=LET(
  マスター行, XLOOKUP(A2, 商品マスター!A:A, 商品マスター!A:C, ""),
  カテゴリ,   INDEX(マスター行, 2),
  在庫,       INDEX(マスター行, 3),
  IF(在庫 > 0, B2 * C2, カテゴリ & "は在庫なし")
)

1回の XLOOKUP で商品マスターの行全体を取り出し、INDEX で必要な列(カテゴリ・在庫)を取り出しています。XLOOKUP を項目ごとに書かずに済むため、参照先を変えるときも1箇所だけ直せばよくなります。サンプルデータでは、商品Aはカテゴリ 家電・在庫 15(0より大きい)なので、結果は 単価5000×数量10 で 50000 になります。在庫が0の商品B(文具)は「文具は在庫なし」と表示されます。


よくあるエラー

変数名に使えない文字がある

変数名には英字・日本語の組み合わせが使えますが、スペースは使えません。スペースが必要な場合はアンダースコア(_)か日本語(「税込金額」など)で区切ります。

最後の引数が変数名だけになっている

LET の最後の引数は「返す値の計算式」です。変数名を書くだけでも動きますが(その変数の値を返す)、意図が分かるようにコメント代わりの変数名をつけるのも有効です。

「名前が無効」エラーが出る

LET 関数は Microsoft 365 または Excel 2021 以降 が必要です。それ以前のバージョンでは使えません。


まとめ

  • LET は数式内で変数を定義するための関数
  • 同じ計算が何度も出てくる場合や、引数が長くなった数式に効果的
  • 変数に意味のある名前をつけることで「何を計算しているか」が読み取りやすくなる
  • 改行(Alt+Enter)とインデントを使うと複数変数でも見やすく書ける

すでに動いている複雑な数式を全部 LET に書き直す必要はありません。「同じ計算を3回以上書いている」「後から自分で読めなくなった数式がある」という場面から少しずつ使ってみてください。


対応バージョン: Microsoft 365 または Excel 2021 以降


関連記事

サンプルファイル

記事中で使用しているサンプルデータはこちらからダウンロードできます。

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