LET関数で数式内に変数を定義する|複雑なネスト解消・可読性向上・処理速度改善の実務パターンとMOS試験対策

「同じ計算を数式の中で何度も繰り返していて、修正が大変…」「ネストが深すぎて数式が読めない…」という悩みを一気に解決するのがLET関数です。LET関数は数式の中に「変数」を定義できる関数で、Microsoft 365およびExcel 2021以降で使えます。

プログラミングで変数を使うように、一度計算した値に名前を付けて数式内で再利用できます。複雑なSUMIFSやFILTERの中間計算を変数に置き換えると、数式が短く・読みやすく・修正しやすくなり、同一計算の繰り返しを排除することでシートの処理速度も向上します。

本記事では、LET関数の基本構文・変数の定義と参照の仕組み・複数変数の使い方・動的配列関数との連携・実務シナリオ別パターン・よくあるエラーと対処法・MOS Excel試験対策まで体系的に解説します。

目次

LET関数の基本構文

LET関数の構文は次の通りです。

=LET(変数名1, 値1, [変数名2, 値2, ...], 計算式)
引数説明省略
変数名数式内で使う名前(アルファベット・日本語可。スペース不可)必須(1組以上)
変数名に割り当てる値・数式・セル参照必須
計算式変数名を使った最終的な計算。ここが関数の戻り値になる必須

最もシンプルな例:税率を変数に入れて税込み金額を計算する

=LET(rate, 1.1, A2 * rate)

上の数式は「rateという変数に1.1を代入し、A2 × rateを返す」という意味です。税率変更時に1.1を1か所直すだけで済む点が変数定義の強みです。

複数変数を定義する:ネスト解消の実践

LETの真価は複数の変数を使って複雑なネスト数式を平坦化するときに発揮されます。変数名と値のペアは最大126組まで定義できます。

例:割引額・割引後単価・合計金額を変数で整理する

=LET(
  price,    A2,
  qty,      B2,
  disc,     C2,
  after_disc, price * (1 - disc),
  after_disc * qty
)

変数は定義された順番で上から参照できます。after_discの定義でpricediscを使えるのは、それらが先に定義されているからです。最後のafter_disc * qtyが関数の戻り値(表示される値)になります。

同じ計算をLETなしで書いた場合

=A2 * (1 - C2) * B2

単純な例では短い数式で済みますが、中間値を複数箇所で再利用する場合・数式を後から読む場合に、変数名による自己説明的な記述が保守性を大きく高めます。

実務シナリオ別パターン

シナリオ1:SUMIFSの参照範囲を変数化して数式を短縮する

複数条件の集計で同じ範囲を何度も書くSUMIFSを、LETで整理します。

=LET(
  tbl,   A2:A1000,
  amt,   D2:D1000,
  cat,   B2:B1000,
  rgn,   C2:C1000,
  SUMIFS(amt, cat, "食料品", rgn, "東日本") + SUMIFS(amt, cat, "食料品", rgn, "西日本")
)

範囲(tblamt等)を変数にまとめると、データ行数の変更時に変数の定義部分だけ修正すれば済みます。同じ範囲参照が数式内に散在しているとミスが起きやすいため、変数による一元管理は実務の保守コストを下げます。

シナリオ2:重複する中間計算を1回だけ実行してパフォーマンスを改善する

LETを使わない場合、同じ計算がIF文の条件部分と値部分に重複して書かれることがあります。

'LETなし(VLOOKUP が2回実行される)
=IF(VLOOKUP(A2,マスタ!A:C,2,FALSE)="", "未登録", VLOOKUP(A2,マスタ!A:C,2,FALSE))

'LETあり(VLOOKUP は1回だけ実行される)
=LET(val, VLOOKUP(A2,マスタ!A:C,2,FALSE), IF(val="", "未登録", val))

重い関数(VLOOKUP・SUMIFS・FILTER等)が同一数式内で複数回実行されると処理時間が倍増します。LETで計算結果を変数に格納すると、計算は1回だけ行われ結果が再利用されるため、大規模データのシートでは体感できるほど速度が改善するケースがあります。

シナリオ3:FILTER関数の条件を変数に分解して可読性を高める

FILTERの条件式が長い場合、各条件を変数にすると数式の意図が一目でわかります。

=LET(
  sales,     A2:D1000,
  cat_col,   B2:B1000,
  date_col,  C2:C1000,
  amt_col,   D2:D1000,
  cat_ok,    cat_col = "電子機器",
  date_ok,   date_col >= DATE(2026,1,1),
  amt_ok,    amt_col >= 50000,
  FILTER(sales, cat_ok * date_ok * amt_ok, "該当なし")
)

条件を変数に置くと「何を絞り込んでいるか」がコードのように読めます。条件が変わったときも変数の定義だけ変更すれば済み、FILTERの引数部分を触らずに済む設計になります。

シナリオ4:日付計算で中間値を複数回使いまわす

在籍日数・月数・年数を同じ基準日から計算するケースでは、基準日を変数にしておくと変更が容易です。

=LET(
  base_date,  TODAY(),
  start,      A2,
  days,       base_date - start,
  months,     DATEDIF(start, base_date, "M"),
  years,      DATEDIF(start, base_date, "Y"),
  TEXT(years, "0") & "年" & MOD(months, 12) & "ヶ月経過"
)

base_dateを1か所に定義することで、計算基準を変える際に1か所の変更だけで全変数に反映されます。

LET関数のパフォーマンスとスピル対応

LETは計算結果をセル内にキャッシュする仕組みを持っており、同じ計算を複数回繰り返すことなく効率的に処理します。また、最後の計算式が配列を返す場合はスピル(溢れ出し)に対応しており、FILTER・SORT・UNIQUEなどの動的配列関数と組み合わせると複数行・複数列の結果を一気に展開できます。

=LET(
  src, A2:C1000,
  cond, B2:B1000 = "完了",
  SORT(FILTER(src, cond, "該当なし"), 3, -1)
)

上の例はB列が「完了」の行だけFILTERで絞り込み、C列(日付等)の降順でSORT、その結果をスピルで展開します。FILTERとSORTの中間段階を変数に置かずとも1つのLEТ式にまとめられます。

よくあるエラーと原因・対処法

エラー・症状主な原因対処法
#NAME?変数名にスペースが含まれる・関数名のスペルミス・LET非対応バージョンで使用変数名にスペースを入れない(アンダースコアで代替)。Excel 2021/Microsoft 365 以降で使用する
#VALUE!値引数に配列とスカラーが混在し型が合わない変数ごとに型(数値・文字列・範囲)を統一する。中間値をイコールで確認する
変数が認識されない変数名と同名のExcel関数・名前付き範囲が存在する(名前の競合)変数名を変更してExcel組み込み名と重複しないようにする(例: rateをtax_rateに)
スピルしない最後の計算式が単一セルを参照している最後の式が配列を返す関数(FILTER・SEQUENCE等)を含むか確認する
数式が長すぎてエラー変数定義が多すぎて数式バーの上限に近い作業列を使って計算を分割する(LETは数式内の複雑さを減らすツール。無制限ではない)

変数名のルール:変数名には英字・数字・アンダースコア(_)・日本語が使えます。ただし、数字で始まる名前・スペースを含む名前・Excelの組み込み関数名(SUM、IFなど)は使用できません。シンプルで意味が伝わる英字スネークケース(sales_totaldisc_rate等)を推奨します。

LAMBDAとの違い:LETとLAMBDAの使い分け

LETと同じExcel 365の新関数であるLAMBDAと混同されることがありますが、目的が異なります。

関数目的再利用範囲典型的な用途
LET数式内に一時変数を定義してネストを解消・処理を効率化同一の数式セル内のみ複雑なSUMIFS・FILTER・IF数式の整理
LAMBDAカスタム関数を作成してブック全体で再利用する名前マネージャーで登録するとブック全体独自の業務ロジックを関数化(例: 消費税計算・評価ランク判定)

「1つの数式を整理したい」→ LET、「同じ計算ロジックを複数セルで使いまわしたい」→ LAMBDAという使い分けが基本です。LETはLAMBDA内でも使えるため、複雑なカスタム関数をLAMBDA + LETで組み合わせると高い可読性と保守性を両立できます。

MOS Excel試験でのLET関数出題ポイント

MOS Excel 365では「数式と関数の使用」スキル項目でLET関数が出題範囲に含まれます。以下の点を中心に準備してください。

  • 引数の順序:「変数名 → 値 → (変数名 → 値)× n → 計算式」という構造を正確に理解する。最後の引数が必ず「計算式」になる
  • 変数名の命名ルール:スペース不可・数字始まり不可・Excel組み込み名との競合に注意する
  • 変数の参照順序:後に定義する変数は先に定義した変数を参照できるが、逆はできない(前方参照のみ)
  • スピルとの組み合わせ:LETの計算式に配列を返す関数を使うとスピルが起きる動作を理解する
  • パフォーマンスの理由:同じ計算を変数にまとめると処理が1回になる、という概念を理解する(試験では記述問題や説明問題として出る場合がある)

MOS試験 LET関数関連チェックリスト

確認ポイント操作内容難易度
基本構文の入力=LET(名前, 値, 計算式)を正しく入力できる★☆☆
複数変数の定義変数名・値ペアを2組以上並べた数式を作成できる★★☆
変数の再利用後続の変数定義や計算式で先定義の変数名を正しく参照できる★★☆
IF・SUMIFSとの組み合わせ中間計算を変数に格納してIF・SUMIFSをシンプルに書き直せる★★☆
FILTER・SORTとの組み合わせ動的配列関数の条件や範囲を変数化してスピルさせる数式を作成できる★★★
エラー原因の特定#NAME?・#VALUE!の原因を変数名や型の問題から切り分けられる★★★

試験対策におすすめの書籍

PR

できるExcel関数 Copilot対応

LET・LAMBDA・FILTER・SEQUENCEなどExcel 365の新関数を含め、実務で使う関数を豊富な実例で解説。関数の引数の意味から組み合わせパターンまで体系的に学べる一冊で、MOS試験の関数問題対策としても定評があります。

PR

Excel関数[最強]時短仕事術

LETをはじめとした「数式を短くするテクニック」を業務シナリオ別に収録。ネストの複雑な数式を整理しながら処理速度も上げたい実務ユーザーに最適で、読んですぐ業務へ応用できる構成です。

まとめ:LET関数は「数式のリファクタリング」ツール

本記事のポイントをまとめます。

  • LETの役割:数式内に名前付き変数を定義して中間値を再利用できる。プログラミングの変数定義と同じ概念
  • 構文:=LET(名前1, 値1, [名前2, 値2…], 計算式)。最後の引数が必ず戻り値になる計算式
  • ネスト解消効果:IF・SUMIFS・FILTERなど引数が長くなりがちな関数の条件・範囲を変数化すると数式が読みやすくなる
  • パフォーマンス改善:同一の重い計算(VLOOKUP・FILTERなど)を変数に置くと実行回数が1回になりシートの動作が軽くなる
  • スピル対応:計算式が配列を返す場合は隣接セルにスピルする。FILTER・SORT等との組み合わせで威力を発揮
  • LAMBDAとの使い分け:1数式内の整理→LET、ブック内で繰り返し使うカスタム関数→LAMBDA
  • MOS試験対策:引数の順序・変数の前方参照ルール・#NAME?の原因(命名ルール違反・バージョン非対応)を中心に確認する

LET関数を使いこなすと、Excelの数式が「書いたときしかわからない複雑な式」から「後から読んでも意図が伝わる読みやすい式」へと変わります。特にSUMIFS・FILTERを日常的に使っている方は、まず既存の長い数式を1本LETで書き直してみることをおすすめします。変数名を付ける作業を通じて、数式の構造を自分で整理する習慣が身に付き、Excelスキルが一段階上がります。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

目次