=LET(total,SUM(B2:B6),IF(total>500,total*0.9,total))は、B2:B6を一度だけ合計してその結果にtotalという名前を付け、その名前を2回使います。1回目は判定に、2回目は結果として返すためです。LETがないと、=IF(SUM(B2:B6)>500,SUM(B2:B6)*0.9,SUM(B2:B6))のようにSUMを3回書くことになります。
| A | B | C | D | |
|---|---|---|---|---|
| 1 | Order | Amount | Total to pay | |
| 2 | A-101 | 120 | 580.5 | |
| 3 | A-102 | 95 | ||
| 4 | A-103 | 210 | ||
| 5 | A-104 | 80 | ||
| 6 | A-105 | 140 |
注文の合計は645で500を超えるので、D2は580.5を表示します。B4を50に変えると合計は485に下がって上限を下回るので、D2は割引なしの485を表示します。
LET関数の構文
=LET(name1, value1, [name2, value2, ...], calculation)
- 各
name(名前)は自分で選ぶ単語で、その後に名前が表すvalue(値)を書きます。数値、範囲、数式のどれでも構いません。 - 組は126個まで定義できます。値には、それより前に定義したどの名前でも使えます。
- 最後の引数は
calculation(計算)で、名前を使って結果を出します。
LETにはExcel 2021、Excel 2024、Microsoft 365のいずれかが必要です。Excel 2019以前では#NAME?になります。Googleスプレッドシートにも同じ構文のLETがあります。
複数の変数を使うLET
名前を使うと、行ごとの数式が文のように読めます。ここでは各行で小計を出し、100を超えたら10%引きにしています:
| A | B | C | D | |
|---|---|---|---|---|
| 1 | Item | Price | Qty | To pay |
| 2 | Pen | 2.5 | 10 | 25 |
| 3 | Bag | 40 | 3 | 108 |
| 4 | Lamp | 35 | 2 | 70 |
| 5 | Mug | 8 | 15 | 108 |
| 6 | Desk | 150 | 1 | 135 |
バッグの120は108に、マグカップの120も108に、机の150は135になります。ペン(25)とランプ(70)はそのままです。数式はD2に書いて下にコピーしたもので、subtotalは行ごとに違う数値を表します。
名前は1つ前の名前を使って作れます。=LET(x,2,y,x*3,x+y)はxを2、yを6にして、8を返します。
検索を一度だけ計算して再利用する
IFの中に2回出てくる検索は2回実行されます。LETなら一度で済みます。次の数式は価格に20%を足したものを返し、商品がなければメッセージを返します:
| A | B | C | D | E | F | |
|---|---|---|---|---|---|---|
| 1 | Product | Region | Price | Look for | Price + 20% | |
| 2 | Apple | North | 1.2 | Pear | 1.8 | |
| 3 | Pear | South | 1.5 | Kiwi | Not found | |
| 4 | Carrot | East | 0.8 | |||
| 5 | Bread | North | 2.4 | |||
| 6 | Milk | South | 1.1 |
Pearは見つかるので、F2は1.8を表示します。Kiwiはリストにないので、XLOOKUPは4つ目の引数で指定した空の文字列を返し、F3はNot foundを表示します。A4にKiwiと入力すると、F3はその価格に20%を足した値に変わります。
FILTERと組み合わせたLET
LETが最も役に立つのは、抽出した範囲が2回以上必要になるスピルする配列です。次の数式は、1つの数式の中で一致する行に名前を付け、その行数を数え、売上の平均を出します:
| A | B | C | D | E | F | |
|---|---|---|---|---|---|---|
| 1 | Name | Region | Sales | Region | North | |
| 2 | Ann | North | 120 | Summary | 3 reps, average 126.7 | |
| 3 | Ben | South | 80 | |||
| 4 | Cara | North | 200 | |||
| 5 | Dan | East | 150 | |||
| 6 | Eve | South | 95 | |||
| 7 | Finn | North | 60 |
Northなら「3 reps, average 126.7」と表示されます。F1でSouthを選ぶと「2 reps, average 87.5」になります。INDEX(rows,0,3)は抽出した行の3列目を取り出します。LETがないと、FILTERを2回書くことになります。
ほかの月を空白にした月のカレンダー
SEQUENCEのページのカレンダーには、前後の月の日も表示されます。LETで月の初日と日付のマス目に名前を付け、その月以外の日付をすべて空白にします:
| A | B | C | D | E | F | G | |
|---|---|---|---|---|---|---|---|
| 1 | Sun | Mon | Tue | Wed | Thu | Fri | Sat |
| 2 | 1 | 2 | 3 | 4 | |||
| 3 | 5 | 6 | 7 | 8 | 9 | 10 | 11 |
| 4 | 12 | 13 | 14 | 15 | 16 | 17 | 18 |
| 5 | 19 | 20 | 21 | 22 | 23 | 24 | 25 |
| 6 | 26 | 27 | 28 | 29 | 30 |
DATE(2026,4,1)をDATE(2026,5,1)に変えると、マス目が5月に描き直されます。月の初日に一度だけ名前を付けているので、変える日付は3つではなく1つだけです。
練習: LETで送料を計算する
| A | B | C | D | |
|---|---|---|---|---|
| 1 | Order | Amount | To pay | |
| 2 | A-101 | 120 | ||
| 3 | A-102 | 95 | ||
| 4 | A-103 | 210 | ||
| 5 | A-104 | 80 | ||
| 6 | A-105 | 140 |
やってみよう: D2で、B2:B6の金額を合計してください。合計が800未満なら送料として25を足し、そうでなければ合計をそのまま返します。
LETの名前の規則とエラー
LETのエラーのほとんどは名前から来ます:
- 名前は英字で始め、スペースを含めてはいけません。
unit priceは失敗するので、unit_priceかunitPriceを使います。 - 名前はセル番地に見えてはいけません。
a1とtax2026はExcelではセル番地なので(TAXは列名です)、LETは#NAME?で受け付けません。rateやtax_2026なら使えます。 - 名前は使うたびにまったく同じ綴りで書きます。使う場所で打ち間違えると、Excelはその綴りの関数か名前付き範囲を探すので、#NAME?になります。
- 最後の引数は計算でなければなりません。
=LET(x,5)には名前と値はありますが返すものがないので、Excelは受け付けません。 - 名前はその数式の中にしか存在しません。多くのセルで計算を再利用するなら、代わりに名前付きのLAMBDAとして保存します。
=LET(a1,5,a1*2) #NAME? (a1 is a cell address)
=LET(rate,8%,100*rate) 8
よくある質問
ExcelのLET関数は何をする関数ですか?
1つの数式の中で値に名前を付けます。=LET(total,SUM(B2:B6),total*2)はSUM(B2:B6)を一度だけ計算してtotalと呼び、totalの2倍を返します。名前はその数式の中にしか存在しません。
LETで2つ以上の変数を使うには?
最後の計算の前に、名前と値の組を足します:=LET(price,B2,qty,C2,price*qty)。後の値は前の名前を使えます。=LET(x,2,y,x*3,x+y)は8を返します。
LETの数式が#NAME?を返すのはなぜですか?
ExcelにLETがない(Excel 2021かMicrosoft 365が必要)、使う場所で名前の綴りが違う、またはa1やtax2026のようにセル番地に見える名前や数字で始まる名前など、使えない名前を付けている、のどれかです。
LETを使うとExcelの数式は速くなりますか?
なることがあります。LETがないと、IFの中に2回書いた同じXLOOKUPのような繰り返しの式は、出てくるたびに計算されます。LETを使えば一度だけ計算され、その結果が再利用されます。