Excelに変数を定義できるLET関数が追加されるらしいぞ
- KotorinChunChun
- 90035
- 239
- 274
- 544
あれ、なんか勘違いしていたかも。 =LET( _v1, 1, _v2, LET( _v1, _v1+2, _v2, _v1+3, _v2 ), _v2 ) も通った(結果は6)。
2020-03-20 19:10:23#LET関数 の名前はJavaScriptのconstと似た挙動だが、微妙に仕様が異なる。 LET関数の名前は値が確定した時点で初めてそのスコープ内で有効となる一方、JavaScriptのconstはスコープに入った直後に『存在するが初期化されていない』状態となるため、親スコープの同一名の変数にはアクセス不可となる。
2020-03-21 02:40:31例えば、JavaScriptで次のコードはエラーが発生する。 console.log((()=>{ const _v1 = 1, _v2 = (()=>{ const _v1 = _v1+2, // Uncaught ReferenceError: Cannot access '_v1' before initialization _v2 = _v1+3; return _v2; })(); return _v2; })());
2020-03-21 02:40:32Excel の #LET関数 では単純に =LET( _v1, ERROR.TYPE(_v1), _v1 ) としたとき、5(#NAME?) support.microsoft.com/en-us/office/e… が返ることからも、値の処理中にはまだ名前は有効となっていないことがわかる。
2020-03-21 10:55:54LET関数は入れ子にも対応していた。 gist.github.com/furyutei/be05c… ただし、親と同じ名前は定義できない(参照は可)。
2020-03-20 12:22:13念のため、↑のツイート twitter.com/furyutei/statu… の > 親と同じ名前は定義できない は勘違いでした。 - 親と同じ名前が定義されるまでは、親の値を参照可能 - 親と同じ名前を定義すると、以降はそのスコープ(LET)内では子の名前が優先される という挙動となります。 #LET関数
2020-03-21 11:12:34LET関数が使えるようにしたので早速遊んでみました。 =LET(列番号,SEQUENCE(1,3),一列目,SEQUENCE(10),二列目,INT(RANDARRAY(10)*3),三列目,VLOOKUP(二列目,E1:F3,2,FALSE),CHOOSE(列番号,一列目,二列目,三列目)) pic.twitter.com/PylzSb3ghE
2020-03-21 10:52:41三列目、RANK関数にするとこうなっちゃう。 範囲の大きさが判断できなくなる? 別セルに次の計算式を入れればちゃんと出る。 =RANK(B1:B10,B1:B10,0) =LET(列番号,SEQUENCE(1,3),一列目,SEQUENCE(10),二列目,INT(RANDARRAY(10)*3),三列目,RANK(二列目,二列目,0),CHOOSE(列番号,一列目,二列目,三列目)) pic.twitter.com/fsVlNa1Ypm
2020-03-21 11:01:17@furyutei RANK関数は配列受け付けないからほかの関数でなんとかしてみるなどした。 なんでSMALL関数ができるのか不思議。 =LET(列番号,SEQUENCE(1,4),一列目,SEQUENCE(10),二列目,RANDARRAY(10),三列目,SMALL(二列目,一列目),順位,MATCH(二列目,三列目,0),CHOOSE(列番号,一列目,二列目,三列目,順位)) pic.twitter.com/JOWqFGvymg
2020-03-21 13:28:35@yosatonet RANKやRANK.EQの第2引数はセル参照しか受け付けないようですね。 例えば =RANK(2,{1;2;3}) を確定しようとするとエラーになります。 support.office.com/ja-jp/article/… では配列もいけそうな書き方がされていますが、ドキュメントの方が誤っている可能性大。 stackoverflow.com/questions/5937…
2020-03-21 11:46:45#LET関数 で遊んだあとで元のExcelに戻ると、セル参照の意味が分からなくて、すごく難易度が高く見える。 いや、今までがおかしかったんや。 従来の名前定義では無理だった ・相対参照による参照先の動的な変更 が出来るようになったのは大きい。 テーブルの構造化参照でも「同一行」が限界だった。
2020-03-22 11:34:47例えば、下図のような数学の公式。 a,b,cをグローバルな名前定義をする必要がなくなったので、気軽にこう書ける。 数式で本当にやりたいことに集中できる。 #LET関数 pic.twitter.com/Ez76PKMeCt
2020-03-22 11:43:33#LET関数 説明不足だったので補足 テーブルの構造化参照では、式をテーブル外に持ち出すと参照の修正が必要だった。 相対参照に名前を付けておけば、テーブルの外に持ち出してもそのまま使える。 「真左のセル」を入力値として使用する数式として、どこにコピーしてもそのまま使えることになる。
2020-03-22 11:49:40今後もハッシュタグ #LET関数 で呟きますので、よろしくおねがいします。
LET関数が一般ユーザーの手に届くのは、2020年後半とのことです。
もうしばらくは使うことが出来ませんのでご注意ください。
宣伝
いつでも どこでも えくせるちゅんちゅん。 おはよう から おやすみ まで #Excel #VBA #PowerApps #Notion と遊んだ日々の思い出を呟きます。好きな関数は #TEXTJOIN関数 と #UNIQUE関数
ブログでこんなの書いたりしてます。
たまに変なExcelアドイン作ってます。
_人人人人人人人人人人人人_ > セル結合禁止アドイン < が完成しました  ̄Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y ̄ ~快適なExcel生活のためには手段を選んでいられません~ なんと、セルの結合を解除するための支援ツールを内蔵! もう二度とセル結合に苦しめられることはありません! pic.twitter.com/wQc30xOgdj
2020-02-15 22:05:26Excelクイズ に参加してます。
#Excelクイズ 1~10の乱数を重複しないように発生させる式を作成しなさい。 一般人はA2にA1と異なる乱数を発生させる式を。 上級者はA1~A10に1~10が1回づつ発生させる式を。 尚、後者は私も未完成なので、実現できる保証はありません。 pic.twitter.com/vcfMe0FYCn
2020-03-07 01:19:04