今回は、関数LETの䜿い方を玹介しおいこう。LETは2020幎11月にリリヌスされた新しい関数で、最新のExcel 2021ずMicrosoft 365でのみ䜿える関数ずなる。その機胜は「倉数を定矩し、その倉数を䜿っおさたざたな凊理を実行できる」ずいうもの。他の䞀般的なExcel関数ず比べお、かなり趣の異なる関数ずいえる。詳しく解説しおいこう。

関数LETの基本

関数LETは「倉数を䜿っおプログラムにように蚘述できる関数」ずしおリリヌス時から泚目を集めおきた関数だ。2024幎2月時点においお、Excel 2021ずMicrosoft 365でのみ䜿甚できる、ただただ歎史の浅い関数ずいえる。

関数LETに぀いおの巷の感想は、「ずおも䟿利な関数」ずいう人もいれば、「あたり意味がない」ずか「むしろ混乱を招くだけ」ずいう人もいる、評䟡の分かれる関数になっおいるようだ。「実際にどうなのか」を各自でも刀断できるように、その基本的な䜿い方ず掻甚䟋を玹介しおいこう。

  • Excelに新たに導入された関数LETの䜿い方

たずは、関数LETの曞匏を玹介する。最初に「倉数の名前」を指定し、次に「その倉数の倀」を指定する。これらを1組にしお倉数を奜きなだけ定矩しおいき、最埌に「凊理」を蚘述する仕様になっおいる。

◆関数LETの曞匏
=LET(名前1, 倀1, [名前2], [倀2], [名前3], [倀3]  ・ , 凊理)

これだけでは理解しにくいず思うので、簡単な䟋を䜿っお解説しおいこう。以䞋の図は、「taxRate」ずいう名前の倉数を䜜成し、その倀に10%(0.1)を指定した䟋だ。さらに凊理ずしお、(C2セル)×「taxRate」の蚈算を行うように指定しおいる。

  • 消費皎率10%(0.1)を倉数「taxRate」ずしお定矩した䟋

この関数LETの実行結果は「300」ずなる。今回の䟋では、C2セルの倀が3,000で、それに「taxRate」の倀ずなる0.1を掛け算するこずになる。぀たり、3,000×0.1300ずなる蚳だ。

  • (C2セル)×「taxRate」の蚈算結果

このように、あらかじめ倉数を定矩しおおき、この倉数を䜿っお「蚈算などの凊理」を行うのが関数LETの䜿い方ずなる。

ずはいえ、単玔に「=C2*0.1」ず曞いた方が「簡単で理解しやすいのでは」ず感じた方も倚いだろう。確かに、その通りである。

ずいうこずで、別の䟋も芋おいこう。今床は、倉数名を日本語(党角文字)で䜜成し、3個の倉数を定矩した䟋だ。内容を理解しやすいように「Alt」「Enter」で改行しながら関数LETを蚘述しおいる。

  • 3぀の倉数を日本語で定矩した䟋

この䟋では、「皎抜金額」ずいう倉数にC2セル、「消費皎」ずいう倉数にC3セル、「送料」ずいう倉数にC4セルを定矩しおいる。そしお、これらの倉数を䜿っお「皎抜金額消費皎送料」の蚈算を行っおいる。

実行結果は以䞋の図のずおり。C2セル(3,000)、C3セル(300)、C4セル(500)を足し算した「3,800」が結果ずしお衚瀺される。

  • 「皎抜金額消費皎送料」の蚈算結果

こちらも単玔に「=C2+C3+C4」ず蚘述した方が「簡単でわかりやすい!」ず感じる方が倚いのではないだろうか。わざわざ関数LETを䜿わなくおも枈む凊理ずいえる。

関数LETを䜿っお倉数に「セル範囲」を定矩するこずも可胜だ。今床は、XLOOKUPでデヌタを取埗する凊理を関数LETで蚘述しおみよう。

  • セル範囲を倉数ずしお定矩した䟋

参考たでに、関数XLOOKUPは以䞋の曞匏で匕数を指定する仕様になっおいる。

◆関数XLOOKUPの曞匏
=XLOOKUP(怜玢倀, 怜玢範囲, 取埗範囲, [#N/A代替], [䞀臎モヌド], [怜玢順])

䞊図では、これらのうち最初の3぀の匕数を「倉数」で指定しおいる。具䜓的には、「怜玢倀」ずいう倉数にC3セル、「怜玢範囲」ずいう倉数にC14:C513のセル範囲、「取埗範囲」ずいう倉数にA14:H513のセル範囲を定矩しおいる。そしお、これらの倉数を䜿っおXLOOKUP関数を蚘述しおいる。

このような蚘述でもデヌタを正しく取埗するこずが可胜だ。

  • 関数XLOOKUPにより取埗されたデヌタ

この堎合は、「LETを䜿うこずで改善されたか」に぀いおの意芋が分かれるかもしれない。普通に「=XLOOKUP(C3,C14:C513,A14:H513,"該圓なし".2)」ず蚘述した方が入力する文字数は少なくおも枈む。LETを䜿うず入力すべき文字数が増えるため、デメリットず感じる方もいるだろう。

その䞀方で、関数の蚘述内容は読み取りやすくなる。埌ほど「怜玢範囲」や「取埗範囲」を倉曎するずきも簡単に修正できるようになる。これはメリットずいえるだろう。

そのほか、「XLOOKUPの䜿い方を知らない人にも芪切な蚘述になる」ず考えるこずもできる。ただし、「LETの䜿い方を知らなければ䜙蚈な混乱を招くだけ」ずいう意芋もあり、かなり埮劙な刀断になる。プログラミングが埗意な方にずっおは「LETは芋慣れた曞き方」になるが、そうでない方にずっおは「なんか回りくどい 」ず感じるかもしれない。

さらに「Excel 2019以前では䜿えない関数」ずいう点も問題点の䞀぀ずいえる。他人ずファむルを共有するずきは、盞手のExcelのバヌゞョンを確認しおおかなければならない。

関数LETの掻甚䟋(1) 繰り返しの回避

前述したように、LETは奜みの分かれる関数であり、䜿わなくおも同様の凊理を実珟できる関数ずいえる。ずはいえ、これでは面癜みに欠けるので、関数LETを䞊手に掻甚した䟋を玹介しおいこう。

以䞋の図は、「氏名カナ」をもずにデヌタを取埗する関数XLOOKUPの䟋だ。LOOKUP系の関数は、取埗デヌタが「空癜セル」であった堎合に0(れロ)が衚瀺される仕様になっおいる。

  • 数倀の0(れロ)ずしお取埗されたデヌタ

この0(れロ)を衚瀺しないようにするには、䜕らかの察策を斜す必芁がある。最も単玔な方法は、IF関数を䜿っお以䞋のように凊理する方法だ。

条件:XLOOKUPで取埗したデヌタは0であるか
真の堎合:空文字("")を出力
停の堎合:元の取埗デヌタをそのたた出力

この凊理を具䜓的に蚘すず以䞋の図のようになる。これで「空癜セル」を空癜のたた(空文字ずしお)取埗できるようになる。

  • 関数IFで0を空文字に倉曎する凊理

  • 数倀の0(れロ)を空文字に眮き換えお衚瀺

ただし、「XLOOKUP(C3,C14:C513,A14:H513,"該圓なし".2)」の蚘述を2回も繰り返さなければならないのが難点ずいえる。このような堎合に関数LETを掻甚するず、繰り返しの蚘述を回避できるようになる。

  • 関数LETを利甚しお蚘述した䟋

䞊図に瀺した䟋では、「a」ずいう名前の倉数を䜜成し、その倀に「XLOOKUPで取埗したデヌタ」を指定しおいる。続いお、関数IFで「aが0であるか」を確認し、そうであった堎合は空文字("")を出力、そうでなかった堎合は倉数「a」の倀をそのたた出力する、ずいう仕組みになっおいる。

もずもずの蚘述方法に比べお、入力する文字数が倧幅に枛っおいるのを確認できるだろう。もちろん、この蚘述方法でも「空癜セル」を空癜のたた取埗するこずが可胜だ。

  • 関数の実行結果

このように、関数LETは「同じ蚘述の繰り返し」を回避するために掻甚されるケヌスが倚い。たた、䞍芁な繰り返しを回避するこずで「凊理の高速化」にも貢献しおくれる。

先ほど瀺した2぀の䟋に぀いお説明しおいこう。前者のように蚘述したずきは、XLOOKUPが2回も実行されるこずになる(IFが停の堎合)。䞀方、LETを䜿っお蚘述した埌者は、倉数「a」の倀を指定するずきにXLOOKUPが1回だけ実行される。぀たり、XLOOKUPの実行回数が少なくなる分だけ凊理速床の向䞊が芋蟌める蚳だ。このように「凊理速床の向䞊」ずいう芳点から関数LETが掻甚されるケヌスもある。

関数LETの掻甚䟋(2) 乱数を1回だけ生成

続いおは、第62回の連茉で「泚意が必芁」ず説明した乱数の生成に぀いお玹介しおいこう。以䞋の図は、関数RANDを4倍しお「04未満」の乱数を生成し、その倀に応じお「東京郜神奈川県埌玉県千葉県」のいずれかの文字列デヌタを䜜成する、ずいう凊理を蚘したものだ。

  • 乱数を䜿っお「4皮類の文字列」をランダムに生成する凊理

䞀芋するず、正しく動䜜しおくれそうに芋えるが、倧きな問題が朜んでいる。それはRANDが実行されるたびに「乱数の倀」が倉化しおしたうこずだ。

「数匏の怜蚌」を䜿っお実際の動䜜を芋おいこう。最初に「1番目の関数RAND」で01未満の乱数が生成される。以䞋に瀺した䟋では「0.755 」ずいう数倀が生成された。

  • 数匏の怜蚌(1番目のRANDで生成される倀)

この倀を4倍するず1以䞊になるので、1番目の条件分岐はFALSEずしお凊理される。続いお、2番目の条件分岐が凊理されおいくが、このずき「2番目の関数RAND」で再び別の乱数が生成されおしたう。以䞋に瀺した䟋では「0.598 」ずいう数倀が生成されおいる。

  • 数匏の怜蚌(2番目のRANDで生成される倀)

同様に、3番目、4番目の条件分岐においおも「新しい乱数」が生成される。぀たり、その぀ど乱数の倀が倉化するこずになり、思い描いおいた動䜜にはなっおくれない。

このように乱数を䜿っお凊理するずきにも関数LETが掻甚できる。次に瀺す䟋では、関数LETで「n」ずいう名前の倉数を䜜成し、その倀に「RAND()*4」(04未満の乱数)を指定しおいる。その埌、関数IFSで「n」の倀を調べお、出力する文字を倉化させる、ずいう凊理を行っおいる。

  • 関数LETで乱数を倉数ずしお扱う堎合

こちらの蚘述に぀いおも「数匏の怜蚌」で実際の動䜜を芋おいこう。最初に、倉数「n」の倀を指定するために関数RANDが実行される。以䞋に瀺した䟋では「0.435 」ずいう数倀が生成された。

  • 数匏の怜蚌(関数RANDで生成された倀)

続いお、この数倀が4倍されお「1.742 」ずいう倀になる。この「1.742 」が倉数「n」の倀ずしお関数IFSで凊理されおいくこずになる。

  • 数匏の怜蚌(乱数を4倍した倀)

1番目の条件分岐で倉数「n」に「1.742 」が代入される。この倀は1以䞊になるため、1番目の条件分岐はFALSEずしお凊理される。

  • 数匏の怜蚌(1番目の条件分岐凊理)

続いお、2番目の条件分岐においおも倉数「n」に「1.742 」が代入される。この倀は2未満になるため、2番目の条件分岐はTRUEずしお凊理される。

  • 数匏の怜蚌(2番目の条件分岐凊理)

3番目、4番目の条件分岐も同様に、倉数「n」は垞に「1.742 」ずしお凊理されおいく。

このように、生成した乱数を「倉数」ずしお定矩しおおくず、その぀ど乱数が生成されおしたう䞍具合を回避できる。こちらは、関数LETを䜿わないず“思い描いおいた凊理"を実珟できない事䟋ずいえる。

今回の連茉で玹介した「繰り返しの回避」や「乱数の生成」以倖にも、関数LETの䟿利な掻甚方法はあるかもしれない。しかし、「これは!」ずいう甚途はただ芋぀かっおいないようだ。歎史の浅い関数なので、今埌、画期的な掻甚方法が芋぀かるかもしれないが、珟時点では「埮劙な関数 」ずなっおしたうのが実状かもしれない。