GoogleスプレッドシートにLAMBDA関数が導入されそうな感じです

 たまたまExcelのREDUCE式の内容をGoogleスプレッドシートのセルに文字列として保存しようと思ったら「'」を入力し損ねてエラーになりました。

f:id:accs2014:20220409133010p:plain:w400

 しかしNAMEエラー(不明な関数)ではなく引数がおかしいという内容で、関数名自体は認識されている模様です。
 適当にいじっても動作はしないようですが……

f:id:accs2014:20220409133014p:plain:w400

 ますますもっともらしいメッセージが出現しました。
 REDUCEのほかMAP/SCANで同じようになり、LAMBDA自体は不明な関数扱いのようです。ちなみにLETも不明な関数でした。

 さらにググってみると……

https://stackoverflow.com/questions/69355989/google-sheets-lambda-function

 けっこう古い記事ですが、やはり動作はしていないものの入力時のヘルプまで表示されているようで、どうも間違いなさそうな感じです。
 全体的にExcelと同じ内容になりそうなので新鮮味はありませんが、久々の新フィーチャーなので楽しみにしたいと思います。

ExcelにTEXTSPLIT関数等が追加されるようです

 再度のExcelネタです。
 ちょっと前のことですが、ExcelにTEXTSPLIT関数をはじめとする文字列操作関数及びVSTACK/HSTACK関数をはじめとする配列操作関数、計14種が追加されることとなりOffice Insiderでテスト中とのニュースがありました。

forest.watch.impress.co.jp

 特に文字列の分割と配列の結合は長年待望されていたもので、なぜスピルと共に導入しなかったのか理解に苦しむほどですが、まあいいでしょう。


 とりあえずInsiderが使えるセカンド機で一部の関数をほんの少しいじってみましたので感想を一言。

  • TEXTBEFORE/TEXTAFTER……文字列中の、指定した区切り文字列より前/後の文字列を出力する(マッチする区切り文字列のうちn番目のものを指定可能)。
     つまり「文字列のうち最初の~より前」とか「最後の~より後」といった抽出を実現できます。ただし出力が明らかにおかしかったです。2バイト文字未対応だったのかもしれません。
  • TEXTSPLIT……区切り文字で文字列を分割して各セルに表示する。
     文字列を横方向に分割するための区切り文字と改行を行うための区切り文字をそれぞれ設定できるので、2次元の表を出力できます。各行の列数が一致しない部分はN/Aで埋められるものの代替値が指定可能です。さんざん待たされただけあってとても強力です。ただしGoogleスプレッドシートと違い、複数の文字を区切り文字として指定することはできない模様です。引数省略で1文字ずつ分割してくれればいいなあ。
    (追記:複数指定はどうやらできるようです)
  • VSTACK/HSTACK……縦/横方向に配列を連結する。
     ついに関数でUNIONできる日がやってまいりました。ちょっと前にMAKEARRAY関数が出てきたときは「まさかこれで全部やれと……?」と思いました(理屈の上では任意の行列が作れるので)が、その必要はなかったようです。しかも列数/行数が一致しなくても連結できます(左寄せ/上寄せして足りないセルはN/A埋め)。
  • TOROW/TOCOL……2次元の配列を1行/1列に並べ替える。
     GoogleスプレッドシートのFLATTENとその転置に相当します。TOROW=FLATTENだと思い込み堂々と間違えました;-o-)これで横→縦変換アンピボットし放題。のはず。
  • WRAPROWS/WRAPCOLS……1次元の配列を2次元に並べ替える(行優先/列優先)。
     Googleスプレッドシートが先に実現するものと思っていましたが、このままだとExcelが先行しそうです。と見せかけて一般リリース直前にGoogleがこっそりWRAP関数なんてのを展開するとみましたがどうでしょう。


 いずれにせよSPLITという全人類の願いが叶ってとても良かったです。いまテストしているということは一般提供は秋とか冬になるんでしょうけども、気長に待ちたいと思います。

ExcelのLAMBDA関数を使ってみましたが

 ザ・カクテルクラフトのジントニックを讃える記事を書こうと思いましたが、ここはひとつ正気に返って久々のExcelネタです。ただしこれといったオチはありません。

 LAMBDA関数はかなり以前からアナウンスされていたものの、実際のところLET関数もロクに使ってませんし、そもそも「名前の管理」で定義しないと実質的に使えなさそうでしたので、それならVBAでユーザ定義関数を作ってた方が早いんじゃないの、というぐらいの印象でした。
 ただ、実装されるにあたってSCAN/REDUCE/MAKEARRAYなど、LAMBDA関数と併用することで効果が得られる関数(ヘルパー関数というそうです)が一緒に追加されたとのことでしたので、少し調べて誰でも思いつきそうな利用例を3つほど別ブログに上げてみました。

(Excel)文字列中の複数種類の文字列を置換・削除する - いきなり答える備忘録

(Excel)1つの式で行ごとの合計/最大値/最小値等を求める - いきなり答える備忘録

(Excel)指定値以下の素数をすべて求める - いきなり答える備忘録

 ん~やっぱり何だか難しいです。確かにLAMBDA単独より使い道はありそうなものの、配列に対するforループの扱いが広がったぐらいで日常的な応用がイマイチ思いつきません。そもそも一般のユーザーがこれらの記法と機能を理解してまで使おうと思うのかどうか。BYROWなんかは「=BYROW(SUM(~))」とかで済むようにしてくれた方がなんぼか楽だろうという気がします。
 LAMBDAによりExcel関数は(喧伝されているように)突き詰めれば一般の言語と同じぐらいの可能性を獲得したということになるんでしょうけども、ワタクシ程度の頭では使いこなせるレベルに到底たどり着きそうにないです;_ _)