パスワードを忘れた? アカウント作成
14139213 journal
日記

taka2の日記: Excelワークシート関数で変数が使えるように 92

日記 by taka2

Microsoftが Excelの 新関数「LET()」を発表した。2020年後半の正式リリースを目指して開発中。
使い方は「 LET(変数名1, 値1, 変数名2, 値2, … , 変数を使った計算式) 」で、
たとえば「LET(x, 1, y, 1, x+y)」は2になる。

「IF(ISBLANK(○○○○), "-", ○○○○)」など、同じ部分式が繰り返し登場するような式はExcelにはありがちだが、
これを「LET(VAR, ○○○○, IF(ISBLANK(VAR),"-",VAR))」とすることで、記述が単純になり、部分式の計算回数削減による速度向上も見込める。

Excelが関数型プログラミング言語へ大きな一歩踏み出したって印象。
あとは再帰ができれば完璧?

この議論は賞味期限が切れたので、アーカイブ化されています。 新たにコメントを付けることはできません。
  • by Anonymous Coward on 2020年03月19日 14時29分 (#3782029)

    やはりここはλでお願いしますた

  • by Anonymous Coward on 2020年03月19日 15時44分 (#3782067)

    グローバル変数とかほしい、とか思ったけどスコープを管理する方法がないか。

    • by Anonymous Coward on 2020年03月19日 15時50分 (#3782069)

      そこまで行くともうそこらの空きセル使えと言う話になる

      親コメント
    • by Anonymous Coward

      名前の定義で代用できない?

      • by Anonymous Coward

        名前を使って、シートのコピーができなくなって、何でもかんでも1つのシートに詰め込まれた仕様書がお客さんからよくくる。

        • by Anonymous Coward

          名前の定義の良くないところというか、UIがダメなところって、
          その定義の存在がこの機能を知らないユーザーにはよく分からないところと、
          シートスコープでなくグローバルスコープがデフォルトになっているところだと思う。

          こういった状態が分かり辛く制御し辛い系不備はWordの方が多いけど、
          「名前の定義」は非常に有益なのに、目立たないために設定が無視されたり理解が浸透してなかったりなので、
          UIを改善して欲しいなんてことをここで書いてもしょうがないんだが。

          • by Anonymous Coward on 2020年03月22日 11時09分 (#3783128)

            問題はエクセルに搭載された機能が多すぎること。
            そしてユーザの学習意欲が低すぎること。
            どうしようもない。

            親コメント
          • by Anonymous Coward on 2020年03月22日 16時06分 (#3783234)

            名前の定義がグローバル、かつ見えにくいおかげで、機能知らない人がシートコピーして使いまわすと大変なことになるんだよね。
            古い名前の定義が残り続けて、そこに他社の会社名とか製品名を使用したフォルダやファイル名への参照が入っていたり。
            それに気が付かないまま別の顧客に送ってしまったり。

            親コメント
    • by Anonymous Coward

      式が短く書けるというだけで、これならまだ今のEXCELの「名前」の機能使ったほうが便利な気がする。

      • by Anonymous Coward on 2020年03月21日 22時14分 (#3782998)

        計算が一回で済むというメリットを見落としている。
        「名前」を複数書けば「名前」の参照処理が複数回行われ、そこには該当「名前」オブジェクトに係る処理が付随する。
        このLETの名前は式を割り当てても式の結果を記憶するタイプだから一回の計算で済むわけで。

        親コメント
  • by Anonymous Coward on 2020年03月21日 15時24分 (#3782850)

    こんなの使ってたら、他者とのデータ共有が崩壊するよね。

  • by Anonymous Coward on 2020年03月21日 16時21分 (#3782878)

    こういったのは、非表示設定にした適当な空きセルを使うもんだとおもってたが

    • by Anonymous Coward on 2020年03月21日 16時31分 (#3782883)

      空きセルを使わなくても良くなります。便利だと思いませんか?

      ちなみに let() ってのは関数型言語では定番の関数です。
      Lisp とか let だらけになります。それくらい便利です。

      letが定義できるのは、いわゆるローカル変数(局所変数)です。
      空きセルは有る意味グローバル変数(大域変数)になります。

      プログラムを書いたことが有る人なら
      グローバル変数を使うよりもローカル変数を使ったほうがトラブルが少ないことは良く知っていると思います。

      つまり空きセルを使うよりもletを使ったほうがトラブルが少なくなります。
      これは大きな違い、アドバンテージになります

      親コメント
    • >非表示設定にした
      >適当な空きセル

      今後のオートメーションその他にその従来型発想が「デメリットで害」とかでは?
      曰く「属人的バッドノウハウ」云々。根拠の薄い憶測ですけど。

      親コメント
    • by Anonymous Coward

      そのセル内容の保持が省けるんだと思われ。メモリが足りないかデータ大杉の時に嬉しい可能性アリ?

    • by Anonymous Coward

      数式の入ったセルが1つしかないなら、その判断でも大して変わらないが、
      数万行ある表の中の数式を書く場合などで、ありがたみが判ると思う。

      数式を使うセルの数だけ適当な空きセルが必要になるが、表の途中に行・列の追加した瞬間、その空きセルも同期をとって増やさないと崩壊する。

      letがあると回避できる。

      でも、新機能って、職場のオフィス環境のExcelバージョンが上がらないかぎり、他人と共有するシートで使えないから、
      この機能を職場で使えるのは遠い未来だなぁ。

    • by Anonymous Coward

      セルへの書き込みは遅いので、計算が重くなる原因にもなっている

  • by Anonymous Coward on 2020年03月21日 16時30分 (#3782882)

    ループのためにIとかJを使うんですね。

  • by Anonymous Coward on 2020年03月21日 16時43分 (#3782889)

    =ISTEXT("交通費")*24800+ISTEXT("宿泊費")*8800
    としてたのを
    =LET(交通費,24800,宿泊費,8800,交通費+宿泊費)
    と書けるようになるわけですね。これは分かりやすい。

    • by Anonymous Coward

      おかしくない変数名を、その運用の幅の中から名付けていくコストを気にするなんて、バッドノウハウそのものだからな。
      もちろん運用が変わったら、変数名にもそれを反映させないといけない。

  • by Anonymous Coward on 2020年03月21日 18時34分 (#3782927)

    セル内?

    シート単位とかブック単位とかグローバルとか欲しいよね

    • by Anonymous Coward

      どころか関数呼び出し内。

      「let(…,」から「)」まで。無理にスコープと呼ぶなら、ぐらいの感じだけど。
      この関数をスコープを意識しなきゃらならないような使い方しようと思うと、かなり悲惨なコードになるんじゃないかな。

  • by Anonymous Coward on 2020年03月21日 21時13分 (#3782977)

    LETはなんで私普通の関数ですみたいな顔してるんだ?
    構文は関数だが引数のセマンティクスが通常関数とは違うだろ。

    例えば

    LET(x:=A, y:=B, x+y)

    みたいな構文にするべきじゃないのか?

    • by hjmhjm (39921) on 2020年03月22日 11時35分 (#3783134)

      わざわざ特殊な記法にしても、誰も得しない。
      見慣れないものが増えたら、事故が増えるだけやろ。
      # あくまでExcelの「関数」なんやし。w

      親コメント
    • by Anonymous Coward

      LETのスコープ内処理だから問題ないだろ。
      セルアドレスを書けばRangeオブジェクトで、式を書けば式に応じたオブジェクトになる自由さから言えば、ローカル名前型というオブジェクトが追加になったと思えば良い。

    • by Anonymous Coward

      新しい演算子を追加すると、構文解析もちょいと改造しなきゃならず
      互換を目指すGSuiteのGoogleやLibreOffice陣営から激しい抵抗にあって
      「せっかくOpenDocumentの時代なのに、また悪の帝国Micro$oftが勝手な真似を!」ってなりそう。
      それを避けたんではなかろうか。

typodupeerror

普通のやつらの下を行け -- バッドノウハウ専門家

読み込み中...