スプレッドシートのLET関数の使い方|変数定義で数式を簡潔にする実務パターン6選

スポンサーリンク

「この数式、長すぎて何をやってるかわからない…」「同じVLOOKUPを3回も書いてしまった」。複雑な数式を組んでいると、こんな場面によく出くわしますよね。

LET関数を使うと、数式の中で「変数」を定義して繰り返し使い回せます。 同じ計算を何度も書かなくてよくなるうえ、変数名を付けることで数式の意味が一目でわかるようになります。

この記事では、LET関数の基本構文から、実務で役立つパターン6選、パフォーマンス改善の仕組み、よくあるエラーの対処法まで解説します。

スプレッドシートのLET関数とは?

LET関数(読み方: れっと)は、数式の中で変数を定義し、その変数を使って計算できる関数です。名前は英語の「let(〜を〜とする)」からきています。

たとえば VLOOKUP(A2,商品マスタ!A:C,3,FALSE) の結果を何度も使いたいとします。LET関数で price という変数に入れておけば、数式の中で price と書くだけで参照できます。

LET関数にできることをまとめると、次のとおりです。

  • 数式の中で変数(名前と値のペア)を定義する
  • 同じ計算を何度も書かずに済むので数式が短くなる
  • 変数名を付けることで数式の意味が読み取りやすくなる
  • 同じ計算は内部的に1回だけ実行されるためパフォーマンスが向上する

NOTE

LET関数はGoogleスプレッドシートの全アカウントで使えます。ExcelにもLET関数はありますが、Microsoft 365またはExcel 2021以降が必要です。

LET関数の書き方(構文と引数)

基本構文

=LET(名前1, 値1, [名前2, 値2, ...], 数式)

「名前」と「値」をペアで指定し、最後に「数式」を書きます。数式の中で定義した名前を変数として使えるのがポイントです。

引数の説明

引数必須/任意説明
名前1必須変数の名前。アルファベット・数字・アンダースコアで構成する
値1必須名前1に割り当てる値。セル参照・数式・直接値のいずれも可
名前2, 値2〜任意2組目以降の変数定義。最大126組まで指定可能
数式必須定義した変数を使った計算式。最後の引数が数式になる

変数名にはセル参照と同じ名前(A1やB2など)は使えません。pricetotal のように、中身がわかる名前を付けておくと読みやすくなりますよ。

TIP

引数の数は必ず 奇数 になります。「名前, 値」のペアが1組以上 + 最後の「数式」で、最低3つです。偶数個を指定するとエラーになるので注意してください。

LET関数の基本的な使い方

変数を1つ定義する

税込価格を計算する例です。

=LET(tax, 1.1, A2 * tax)

tax という変数に 1.1 を代入し、A2 に掛けています。A2 が 1000 なら結果は 1100 です。

変数を複数定義する

本体価格と税率をそれぞれ変数にして、税込価格を計算する例です。

=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 に平均値を代入しています。totalavg の計算で再利用しているのがポイントです。

先に定義した変数を後の変数で使えるので、段階的に計算を組み立てられます。

LET関数の実務パターン6選

パターン1: 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回だけ代入しています。数式の長さが半分以下になり、何をしているかも一目でわかります。

パターン2: 同じ計算を繰り返さずパフォーマンスを改善する

LET関数を使うと、変数に代入した計算は内部的に 1回だけ 実行されます。

先ほどのBefore版ではVLOOKUPが3回実行されますが、After版のLET関数では1回で済みます。データ量が多いシートでは、この差が処理速度に影響してきます。数千行のデータでVLOOKUPやSUMIFSを繰り返している場合は要注意ですよ。

パターン3: FILTER + SORT の組み合わせ

FILTER関数の結果を変数に入れて、さらに加工する例です。

=LET(filtered, FILTER(A2:C20, B2:B20="東京"), SORT(filtered, 3, FALSE))

東京のデータだけをFILTERで抽出し、その結果を3列目(売上など)の降順でソートしています。FILTERとSORTを別々に書くと入れ子が深くなりますが、LET関数で段階的に処理すると読みやすくなります。

パターン4: IFS関数の条件をLETで整理する

IFS関数で複数条件を判定する数式をLETで整理する例です。

=LET(score, B2, IFS(score>=90,"S", score>=70,"A", score>=50,"B", TRUE,"C"))

B2 を score という変数に代入しています。IFS関数の中で score を4回参照していますが、変数名のおかげで「何を判定しているか」が明確です。

パターン5: 中間計算を変数にして段階的に処理する

複数ステップの計算を変数で整理する例です。

=LET(
  raw_total, SUMIF(A:A, "東京", C:C),
  target_count, COUNTIF(A:A, "東京"),
  avg_sales, raw_total / target_count,
  avg_sales * 1.05
)

東京の合計売上を raw_total、件数を target_count、平均を avg_sales と段階的に定義し、最後に5%増しの値を返しています。計算の流れが一目でわかりますよ。

パターン6: XMATCH + INDEX の動的参照をLETで整理する

XMATCH関数INDEX関数の組み合わせをLETで整理する例です。

=LET(
  row_pos, XMATCH(G2, A:A),
  col_pos, XMATCH(H2, 1:1),
  INDEX(A:Z, row_pos, col_pos)
)

行方向・列方向のマッチ位置をそれぞれ変数に入れてから、INDEXで値を取り出しています。変数名がないと何を意味するのか読み解くのが大変になりますよ。

よくあるエラーと対処法

症状原因対処法
#NAME? エラーが出る変数名にセル参照と同じ名前(A1, B2など)を使っているセル参照と重複しない名前に変更する(例: val, x
#NAME? エラーが出る変数名にスペースや記号を含めているアルファベット・数字・アンダースコアのみ使用する
#VALUE! エラーが出る引数の数が偶数になっている(数式が抜けている)最後に数式を追加する。引数の数は奇数が正しい
変数が認識されない数式の中でスペルミスがある変数名の大文字小文字を含めて正確に一致させる

TIP

変数名はシンプルに短く付けるのがおすすめです。x, val, price のように意味がわかる最小限の名前にしておくと、数式全体が読みやすくなります。

ExcelとGoogleスプレッドシートの違い

項目ExcelGoogleスプレッドシート
対応バージョンMicrosoft 365 / Excel 2021以降全アカウント対応
構文=LET(名前1, 値1, …, 数式)=LET(名前1, 値1, …, 数式)
変数ペアの上限126組126組
パフォーマンス最適化あり(1回だけ計算)あり(1回だけ計算)

構文も動作もほぼ同じです。Excelのファイルをスプレッドシートで開いてもLET関数はそのまま動作します。ただし、Excel 2021より前のバージョンでは #NAME? エラーになります。

よくある質問

LET関数とLAMBDA関数の違いは何ですか?

LET関数は「数式の中で変数を定義する」関数です。LAMBDA関数は「再利用可能なカスタム関数を定義する」関数で、別のセルから呼び出せる点が異なります。「数式を読みやすくしたい」ならLET、「同じ処理を複数の場所で使い回したい」ならLAMBDAが適しています。

変数に範囲(配列)を代入できますか?

できます。=LET(data, A2:C20, SORT(data, 1)) のように、セル範囲やFILTER関数の結果など配列を変数に代入して使えます。

引数の最大数はありますか?

名前と値のペアを最大126組(252引数)と、最後の数式を合わせた253引数まで指定できます。実務ではここまで使うことはほとんどありませんが、上限として覚えておくとよいですね。

まとめ

LET関数は、数式の中で変数を定義して再利用できる関数です。

  • 構文は =LET(名前1, 値1, ..., 数式) で、名前と値をペアで指定する
  • 同じ計算を何度も書かなくて済むので、数式が短くなる
  • 変数名を付けることで、数式の意味が読み取りやすくなる
  • 同じ計算は内部的に1回だけ実行されるため、パフォーマンスも向上する
  • 引数の数は必ず奇数。偶数だとエラーになる
  • 変数名にセル参照と同じ名前(A1など)は使えない

まずは =LET(x, 10, x*2) で「変数 x に10を入れて2倍 = 20」から試してみてください。慣れてきたら、長いVLOOKUPやFILTER式を変数で整理することから始めると、数式の見通しが格段によくなりますよ。

関連記事: スプレッドシートのLAMBDA関数の使い方 / スプレッドシートのFILTER関数の使い方 / スプレッドシートのXMATCH関数の使い方

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