エクセル入門
LET関数(数式で変数を使う)

Excelの初心者向け入門解説
公開日:2020-03-21 最終更新日:2020-10-03

LET関数(数式で変数を使う)


エクセル Excel LET関数 変数

LET関数は、関数内で計算結果やセル範囲に名前を定義できます。
これにより、数式の中間計算に名前を定義したり、後ろの引数で定義した名前を式に使う事が出来ます。
これはプログラミングにおける変数と同じ機能になります。


LET関数の機能をごく単純化して説明するなら、
作業列に名前を付けられる
というところでしょうか。
LET関数を使えば、作業列は大幅に減らせるようになりますし、
作業列を使わずに多重ネストしている数式なら、かなり見やすい数式にできます。

LET関数は、2020年3月時点ではOffice insiderでのみ利用できるベータ機能です。

2020年10月一般の365で使えるようになりました!

LET関数では、いくつかのバグと思われる挙動が見受けられます。

・LET関数に対して「数式の検証」を行うとエクセルが強制終了する。
・数式内の数値定数がEnter入力後に変更されてしまう場合がある。
恐らくさらに多くのバグが含まれていると思いますが、正式リリースまでには修正されることと思います。

LET関数の書式

=LET(名前1,値1,計算式)
=LET(名前1,値1,名前2,値2,[名前3,値3,...],計算式)

名前1
必須です。
値1に対して割り当てる名前です。
変数名と考えれば良いでしょう。

名前の規則は、ブック・シートの名前定義と同様になります。
英文字、カタカナ、ひらがな、漢字、数字、アンダースコア(_)
ただし、先頭に数字は使えません。
また、セル番地(A1やAB2等)は使えません。

※ブック・シートの名前定義と重複している場合は、ここで定義した名前が優先されます。
※関数名と重複していても、別のものとして解釈されます。

値1
必須です。
名前1に割り当てるセル範囲、定数値または数式です。
名前(変数)に入れる値です。

名前2,値2,...
省略可能。
名前と値をペアで指定します。

計算式
必須です。
LET関数は、この式の結果を戻します。
それまでに指定された名前,値のペアを使って数式を計算します。

LET関数の解説

LET 関数を使用するには、複数の名前とそれに関連付けられた値の組み合わせと、それらを使用する計算式を定義します。
少なくとも1つの名前と値のペア (変数) を定義しなければなりません。
名前と値のペア数は、最大で126個以内です。

名前の規則、適用範囲
LET関数内にのみ適用されます
 つまりLET関数の外側では使用できませんし、外側に影響を与えません。
・名前を定義した引数より後ろ(右)の引数内で使用可能
 後ろの引数内では、他の関数の引数等で自由に使えます。
名前定義と重複した場合はこの名前が優先されます。
・関数名との重複は許されます。
 ()の存在で名前か関数かが自動判別されます。、
・名前(変数)は重複できません。

LET関数のネスト
=LET(
 変数1,1,
 変数2,2,
 変数3,LET(変数3,変数2,変数2,3,変数2+変数3),
 変数1+変数2+変数3
)
この結果は、「8」となります。
内側のLET関数内の最初に出てくる、
変数3,変数2
これは、変数3を定義し外側の変数2、つまり2を入れています。
変数2,3
これは、新たに変数2を定義し3を入れています。
変数2を定義するまでは外側の変数2を参照し、変数2が定義されてからはそれが使われます。

もちろん、このような状態は、意図しているかどうかに関わらず好ましくありません。
LET関数をネストした場合、このような状態になってしまう事もありえますので、変数名の付け方には注意が必要です。
何より、LET関数をネストするほどの複雑な数式は作るべきではないでしょう。

LET関数の利点

パフォーマンスの向上
1つの数式で同じ式を複数回記述した場合、計算結果が複数回計算されます。
中間計算に名前を付けることで、当該式を1回だけの計算にできます。

=IF(VLOOKUP(A1,C:D,2,FALSE)=0,"-",VLOOKUP(A1,C:D,2,FALSE))
上記では、VLOOKUPの結果を判定し、さらに結果を戻すためにVLOOKUPが実行されます。

=LET(vl,VLOOKUP(A1,C:D,2,FALSE),IF(vl=0,"-",vl))
LET関数で、VLOOKUPの結果を名前(変数)vlに一度だけ入れていて、その後はこの変数を使っています。

読みやすさの向上
中間数式やセル範囲に適切な名前を付けることで、数式全体が行っていることを読み手に伝えやすくなります。
また、数式に名前をつけていくことで数式をネストしていることになり、全体の多重ネストを解消することができます。

=IF(AND(SUM(A2:C2)>=200,MIN(A2:C2)>=50),"合格","")
数式をよく読めば分かりますが、ぱっと見で意味が分かりづらい数式もあります。

=LET(
 合計,SUM(A2:C2),
 最低,MIN(A2:C2),
 合格,AND(合計>=200,最低>=50),
 IF(合格,"合格","")
)
LET関数を使う事で、名前で数式の意味を伝え、さらに関数ネストを解消しています。
LET関数では、読みやすさのために、数式内改行(数式内でAlt+Enter)をするようにしてください。


この関数の機能は単純なものになります。
セル範囲、数式、定数値に名前を付けるだけの機能と考えれば良いでしょう。
機能が単純な分、その使いどころはかえって難しいかもしれません。
以下、いくつかの使用例を見ていきましょう。

LET関数の基本的使い方

付けた名前はインテリセンス(候補表示)されます

エクセル Excel LET関数 変数

LET関数で付けた名前は、関数内ではインテリセンス表示されます。
上図では、SUM関数と名前が重複しますが、使う時に()を付けるかどうかで自動判別されます。
この場合は、SUM()は関数、sumは名前として判定されます。

名前の使い方の基本3パターン

以下の例を使い、名前の使い方の基本パターンを見ていきましょう。
3教科の合計が200点以上、かつ、3教科とも50点以上の場合に「合格」とします。

エクセル Excel LET関数 変数

今まで通り普通に書くと、

=IF(AND(SUM(A2:C2)>=200,MIN(A2:C2)>=50),"合格","")

この数式を、LET関数を使って書き直します。
以下では名前を画面で判別しやすいように漢字を使用しています。

セル範囲に名前を付ける

上記の数式はすっきり作成されていますが、A2:C2が2回登場しています。
他で使いまわそうとコピーした時や今後のメンテ時に面倒になる場合が出てきます。
出来れば、対象範囲は1回で済ませたいところです。

=LET(
 範囲,A2:C2,
 IF(AND(SUM(範囲)>=200,MIN(範囲)>=50),"合格","")
)
LET関数を使って、A2:C2に「範囲」と名前を付けて、その後はこの名前を使って式を作成しています。

LET関数を使用する場合は、数式内改行(数式内でAlt+Enter)をするようにしてください。
LET関数は引数が多くなりますので、改行せずに式を書き連ねた場合、かえって読みにくい数式になってしまいます。

数式自体はかえって長くなる場合もありますが、適宜改行することで可読性を向上させることができます。
この例のように、数式の先頭のみで対象範囲を指定する方法は、一般的な判断としては保守性、可読性は良いと言えます。

※セル範囲として、ブック・シートで定義されている名前定義も同様に指定できます。

定数値に名前を付ける

先の数式では、200、50という数値が数式内に突然現れています。
この程度の単純な式なら問題ありませんが、複雑な式の中でこのような定数値が突然現れることは式全体の意味するところの理解を妨げてしまいます。

=LET(
 合計最低,200,
 教科最低,50,
 IF(AND(SUM(A2:C2)>=合計最低,MIN(A2:C2)>=教科最低),"合格","")
)
定数値に名前を付けることで、定数値が何を意味するかを読み手に伝えることができます。

中間計算結果に名前を付ける

先の数式では、IF関数内に関数がネストされて複雑になっています。
IF関数の中にAND関数があり、AND関数の中にSUM関数とMIN関数が入っています。
関数を多重にネストさせると読み手は、数式の解読に苦労することになります。

=LET(
 合計,SUM(A2:C2),
 最低,MIN(A2:C2),
 合格,AND(合計>=200,最低>=50),
 IF(合格,"合格","")
)
中間計算に名前を付けることで、最終的な数式では関数のネストが無くなっています。
この例の場合は、「合否」は最後の数式内でも良いと思われますが、
中間計算が左から順次計算されていくことを理解してください。
「合計」「最低」で計算した結果を使って、「合否」が計算されています。
※「合格」はAND関数の戻り値で真偽値(TRUE/FALSE)ですので、IF関数で判定できます。

この例は単純な式なので、上記の対応を全て組み込むことはかえって複雑な式にしてしまいます。
LET関数をどのような使い方をするかは、その数式ごとに個別の判断が必要になります。
元の数式のどの部分が分かりづらいか等を考慮して、適宜名前の使い方を工夫してください。

LET関数の段階的作成

LET関数が完成するまでを順を追ってみていきましょう。
税抜き金額から税込み金額を算出します。

エクセル Excel LET関数 変数

=ROUNDDOWN(A5:A14*(1+IF(B5:B14="○",$B$2,$B$1)),0)

※上記数式は縦にスピルしています。
※スピルさせているので絶対参照にする必要がないので相対参照のままにしています。
これはこれで問題ないようですが、消費税計算部分が若干複雑でしょうか。
そこで、この数式をLETを使い書き直してみましょう。

本来なら消費税率を作業列にしたいところです。
D列に作業列を作って、

D5=IF(B5:B14="○",B2,B1)
C5=ROUNDDOWN(A5:A14*(1+D5),0)
もちろん、このようにするのはとても良い使い方ですが、
LET関数の練習として、作業列の代わりにLET関数使ってみます。

=LET(
 税率,IF(B5:B14="○",B2,B1),
 ROUNDDOWN(A5:A14*(1+税率),0)
)
税率に名前を付けました。
D列の作業列に「税率」と名前を付けた状態と理解すれば良いでしょう。
これだけでも良さそうですが、
さらに入力範囲にも名前を付けましょう。

=LET(
 税抜,A5:A14,
 軽減,B5:B14,
 税率,IF(軽減="○",B2,B1),
 ROUNDDOWN(税抜*(1+税率),0)
)
これは、ブック・シートの名前定義と同じ使い方になります。
この使い方は、一時的な名前定義と考えれば良いでしょう。
ついでに、税込みまで計算して名前を付けてしまいましょう。

=LET(
 税抜,A5:A14,
 軽減,B5:B14,
 税率,IF(軽減="○",B2,B1),
 税込,税抜*(1+税率),
 ROUNDDOWN(税込,0)
)
これも作業列代わりの使い方になります。
数式にコメント入れておきましょう。

=LET(
 ↓変数定義,変数名と値のペア,
 税抜金額,A5:A14,
 軽減対象,B5:B14,
 消費税率,IF(軽減対象="○",B2,B1),
 税込金額,税抜金額*(1+消費税率),
 ↓最終計算式,この値が関数の戻り値,
 ROUNDDOWN(税込金額,0)
)
作成した名前(変数)は、その後に使わなくても構いませんので、自由に追加できます。
↓変数定義,変数名と値のペア,
これは、名前と値なので、
↓変数定義,"変数名と値のペア",
このようにするべきですが、""が無ければ後半も未定義変数として解釈されるだけなので、数式の動作としては問題ありません。
(現時点では未定義変数はエラーになっていませんが、今後の修正でどうなるかは分かりません。)
このコメント的な使い方は、複雑な数式になった時には役に立つでしょう。
読みやすいコメントの書き方を工夫してみてください。

さすがに今回の例では、元々の数式が単純な数式なので、むやみに長い数式になってしまっていますが、これはあくまでサンプルという事で理解してください。
適切にLET関数の名前を使う事で、分かり易い数式にするようにしてください。

文字列分割での使用例

エクセル Excel LET関数 変数

スピルに対応したXSPLITユーザー定義関数(文字区切り)
・区切り位置ウィザード ・ワークシートの関数で文字区切りする場合 ・ユーザー定義関数のVBAコード ・XSPLIT関数の使用例 ・ユーザー定義関数の実践使用例
ここで紹介している数式です。

=IFERROR(MID(A1,
UNIQUE(IFERROR(FIND(",",","&A1,SEQUENCE(1,LEN(A1))),1),TRUE),
UNIQUE(IFERROR(FIND(",",A1,SEQUENCE(1,LEN(A1))),LEN(A1)+1),TRUE)
-UNIQUE(IFERROR(FIND(",",","&A1,SEQUENCE(1,LEN(A1))),1),TRUE)),"")
そもそもこの数式が良いかどうかは置いとくとして、
ぱっと見では、何をやっているのか全然分からない数式ではないでしょうか。
これをLET関数で書き直してみましょう。

=LET(
 対象,A1,
 数列,SEQUENCE(1,LEN(対象)),
 開始,UNIQUE(IFERROR(FIND(",",","&対象,数列),1),TRUE),
 終了,UNIQUE(IFERROR(FIND(",",対象,数列),LEN(対象)+1),TRUE),
 IFERROR(MID(対象,開始,終了-開始),"")
)
細部はともかくとして、全体として何をやっているかは伝わりやすくなっていると思います。

LET関数作成手順の参考例

連続数値部分を取り出し記号で連結

連続数値部分を取り出し記号で連結
・作成する関数の仕様 ・スピル前:2019永続版まで ・スピル後:Office365 ・LET関数:Office365 Insider 2020年3月現在 ・関数の作成手順 ・LET関数の作成手順
この中で、以下の数式を作成しています。
ab123cde45fg678hij

123-45-678

=LET(
  セル,A1,記号,"-",
  分割,MID(セル,SEQUENCE(LEN(セル)),1),
  数値,IF(ISNUMBER(分割*1),分割," "),
  SUBSTITUTE(TRIM(CONCAT(数値))," ",記号)
)
この数式の作成手順を、一つ一つの数式作成から順を追って説明しています。

スピルと新関数の練習(XLOOKUP関数、LET関数、VBAまで)

スピルと新関数の練習(XLOOKUP関数、LET関数、VBAまで)
・スピルとXLOOKUP関数の練習問題 ・従来の関数+スピルで数式を作る ・ XLOOKUP関数に書き換える ・LET関数に書き換える ・VBAでユーザー定義関数を作成 ・スピルと新関数の練習のまとめ
=LET(
    メニュー,A1,
    材料,XLOOKUP(メニュー,材料!$1:$1,材料!$2:$100,0),
    グラム,OFFSET(材料,0,1),
    カロリー,XLOOKUP(材料,カロリー!A:A,カロリー!B:B,0),
    SUM(IFERROR(グラム/100*カロリー,0))
)
この中では、以下の順に数式を作成しています。
1つ1つの関数でスピルを確認

VLOOKUP関数+INDEX関数+MATCH関数で作成

XLOOKUP関数+OFFSET関数に書き換え

LET関数に書き換え

VBAでユーザー定義関数の作成

LET関数の今後について

LET関数は、2020年3月時点ではOffice insiderでのみ利用できるベータ機能です。
正式リリースまでには、何らかの変更が加えられると思います。

この記事作成に当たって、バグと思われる挙動にも遭遇しています。
insiderでのみ提供されている間は、使用に際しては注意してください。

LET関数は、今までの関数とは全く違う関数です。
この関数が使えるようになると、数式の書き方が大きく変化することになるでしょう。
今後の動向に注目していきます。


ワークシート関数一覧

・文字列関数 ・日付と時刻の関数 ・情報関数 ・論理関数 ・検索/行列関数 ・数学/三角関数 ・統計関数 ・財務関数 ・エンジニアリング関数 ・データベース関数 ・アドイン/オートメーション ・キューブ ・Microsoft Office のサポート

ワークシート関数の一覧(2010以降)
・Excel2010で追加されたワークシート関数 ・Excel2013で追加されたワークシート関数 ・Excel2016/Excel2019で追加されたワークシート関数 ・Excel2021で追加されたワークシート関数 ・Excel2021より後の365で追加されたワークシート関数 ・Microsoft 365 Insider ・Microsoft「Office のサポート」



同じテーマ「エクセル入門」の記事

SEQUENCE関数(連続数値)
XLOOKUP関数(VLOOKUP関数を拡張した新関数)
XMATCH関数(MATCH関数を拡張した新関数)
LET関数(数式で変数を使う)
スピルと新関数の練習(XLOOKUP関数、LET関数、VBAまで)
スピルとは:スピル基礎から応用までの問題集
スピルとは:スピル入門の問題と解説
スピルとは:旧関数でスピルを使う問題と解説
スピルとは:スピルの新関数を使う問題と解説
スピルとは:ここまでの総合演習問題と解説
LAMBDA以降の新関数について


新着記事NEW ・・・新着記事一覧を見る

ブール型(Boolean)のis変数・フラグについて|VBA技術解説(2024-04-05)
テキストの内容によって図形を削除する|VBA技術解説(2024-04-02)
ExcelマクロVBA入門目次|エクセルの神髄(2024-03-20)
VBA10大躓きポイント(初心者が躓きやすいポイント)|VBA技術解説(2024-03-05)
テンキーのスクリーンキーボード作成|ユーザーフォーム入門(2024-02-26)
無効な前方参照か、コンパイルされていない種類への参照です。|エクセル雑感(2024-02-17)
初級脱出10問パック|VBA練習問題(2024-01-24)
累計を求める数式あれこれ|エクセル関数応用(2024-01-22)
複数の文字列を検索して置換するSUBSTITUTE|エクセル入門(2024-01-03)
いくつかの数式の計算中にリソース不足になりました。|エクセル雑感(2023-12-28)


アクセスランキング ・・・ ランキング一覧を見る

1.最終行の取得(End,Rows.Count)|VBA入門
2.セルのコピー&値の貼り付け(PasteSpecial)|VBA入門
3.RangeとCellsの使い方|VBA入門
4.ひらがな⇔カタカナの変換|エクセル基本操作
5.繰り返し処理(For Next)|VBA入門
6.変数宣言のDimとデータ型|VBA入門
7.ブックを閉じる・保存(Close,Save,SaveAs)|VBA入門
8.並べ替え(Sort)|VBA入門
9.セルのクリア(Clear,ClearContents)|VBA入門
10.Findメソッド(Find,FindNext,FindPrevious)|VBA入門




このサイトがお役に立ちましたら「シェア」「Bookmark」をお願いいたします。


記述には細心の注意をしたつもりですが、
間違いやご指摘がありましたら、「お問い合わせ」からお知らせいただけると幸いです。
掲載のVBAコードは動作を保証するものではなく、あくまでVBA学習のサンプルとして掲載しています。
掲載のVBAコードは自己責任でご使用ください。万一データ破損等の損害が発生しても責任は負いません。


このサイトがお役に立ちましたら「シェア」「Bookmark」をお願いいたします。
本文下部へ