Excel(MS365): LET関数の使いどころ

バージョン2009 ビルド13231.20262 から提供されるようになったらしい新関数 LET。
限定的ではありますが、数式内で変数を使えるというオモシロ関数なわけですよ。

まあその変数をほかの数式から参照できるわけでもなし、1セル内の数式を複文にできるわけでもなしなので、有用性は思ったよりも限定されるわけですが。

ハシクレ的には、LET関数のポイントは以下のふたつだと認識しています。


1.「( )」の入れ子を回避できる

たとえば

  =A(B(C(),D()),E(),F())

なんて数式があった場合、「(」と「)」の組み合わせを目でたどるのが大変つらい。
一応セットになる「( )」は色分けしてわかりやすくなるよう努力してくれているのはわかるんですが、ロジック追っかけているときに「( )」の組み合わせまで認識し続けるのはけっこうな難行です。

そこでLET関数。上記の数式を

  x=B(C(),D())
  =A(x,E(),F())

のふたつに分けられるので、「( )」の入れ子を意識しなくて済むようになる、ロジックの理解検証に集中できるようになるんですね。

具体的には、

  =LET(x,B(C(),D()),A(x,E(),F()))

みたいな感じで。

……あまりわかりやすくないか。
セルへの入力文字列は、途中でAlt+Enter押してセル内で改行ができます。
これは数式に対しても有効なので、数式を途中で改行して

  =LET(
      x,B(C(),D())
     ,A(x,E(),F())
  )

とすれば見た目的にもかなり把握しやすくなります。

xの部分の数式を一旦別セルにおいて、Aの数式ではそのセルを参照するという手法でも同じ効果は得られますが、本来表示したいものとは関係ないデータをセルに出力するのは見苦しいですし、見苦しさを回避するために中間出力セルを非表示にしたり文字色を白にしたり別シートに置いたりするとどこで何やっているのかがどんどんわかりにくくなり、もう河野さんも怒っちゃうほどのメンテナンス性の悪さにつながっていくわけです。

やっぱひとつの数式内で取り扱うデータは、その数式内で完結できた方がいいですよね。


2. 冗長な部分数式の繰り返しを回避できる

たとえば、

  =A(100/(B()+C()+D()),9/(B()+C()+D()))

などと同じ部分数式を切り返し使わなければならない場合。

実際には各関数の名前もそんな短いものではありませんし、切り返し記述しているうちのひとつだけ入力ミスがあったりするとどこで間違っているのかを探すのに目を皿にしなきゃならないのはかなりつらいところです。

そこでLET関数。上記の数式を

  x=B()+C()+D()
  =A(100/x,9/x)

とすれば繰り返しによる冗長も防げますし何計算しようとしているか把握しやすくなりますしタイプミスも起こりにくくなるという一石三鳥なお得感が。

具体的には、

  =LET(
      x,B()+C()+D()
     ,A(100/x,9/x)
  )

となりますか。


3. まとめと所感

ということで、LET関数は「新しく何かができる」のではなく、「今までよりわかりやすく、効率的に、間違えにくくする」ための新関数だとハシクレ的には認識しました。

ここからは本筋ではない所感。

変数名に数字は使えない

  =LET(x1,1,x1+1)

はエラーになります。変数名に数値は使えないんですね。

=LET(x,1,x+1)

はOK。

途中までのプロセスを変数に切り出して数珠つなぎにしたいときなんか、つい

  =LET(x1,1,x2,x1+2,x3,x2+4,x2+5)

とかしたくなるんですがこれはだめ。

  =LET(x,1,y,x+2,z,y+4,z+5)

とかにしないと。

まあ他人様の書いたプログラム解析しててワーク変数をx1、x2、x3……とかやられてると「何したいんだかわかんねぇよ!」とむきーっとかなりがちですので、そのへんを防止してくれていると思えば許容できる仕様かもしれません。

再帰って言うな

これはLET関数を紹介してくれているあちこちのサイト記事への愚痴なんですが。

上記の「xの結果を参照したyの結果を参照したzの結果を参照した数式」という数式の数珠つなぎ構造が可能なことをさして「再帰」「再帰的」との説明を時折見かけます。

が、こんなんぜんぜん再帰じゃないよ。

再帰ってなぁ「自分自身を呼び出すことでロジックの入れ子を実現する」ことであって、「途中までのロジックを格納した変数を参照することで数珠つなぎにする」ことじゃないよ。

期待しちゃったじゃないですかもう。


確認環境: Excel for Microsoft365 MSO バージョン2011 ビルド13426.20330  16.0.13426.20308

1 件のコメント :