Microsoft曰く、Excelの数式は世界で最も広く使われているプログラミング言語 76
ストーリー by nagazou
ならばExcel方眼紙はアートだ 部門より
ならばExcel方眼紙はアートだ 部門より
headless 曰く、
Microsoftによれば、Excelの数式は世界で最も広く使われているプログラミング言語だという(Excel Blogの記事、 The Registerの記事、 BetaNewsの記事、 Neowinの記事)。
しかしExcelの数式言語には再利用可能な独自の関数を定義するというプログラミングにおける基本的な要素が欠けており、それを補うため新たに「LAMBDA」関数を導入するそうだ。Excelでは既にJavaScriptやTypeScriptを用いてカスタム関数を定義できるようになっているが、LAMBDA関数を用いれば数式言語のみでカスタム関数を定義可能となる。カスタム関数は他のカスタム関数を呼び出すことが可能であり、カスタム関数を再帰的に実行することも可能だ。これにより、Excelの数式言語がチューリング完全になるとのこと。
LAMBDA関数は現在、Office Insiderプログラムのベータ版チャネルでWindows版およびMac版Excelに提供されており、リボンの「数式」→「名前の管理」でLAMBDA関数を参照する新しい名前(カスタム関数名)を追加すればカスタム関数が利用可能になる。LAMBDA関数の書式は「=LAMBDA(引数, 数式)」というもので、カスタム関数作成後は「=カスタム関数名(引数)」のように入力することで引数が数式に渡されて演算結果が得られる。「=LAMBDA(引数1, 引数2 [, 引数3 ...], 数式)」のように複数の引数を指定することも可能だが、引数がいくつまで指定できるかは説明されていない。また、LAMBDA関数を直接呼び出して使用することも可能とのことだ。
矛盾 (スコア:2)
「Excelの数式は世界で最も広く使われているプログラミング言語」
と言いながら、同時に
「独自の関数を定義するというプログラミングにおける基本的な要素が欠けており」
と言っている。
さらに「要素」とは、それが欠けていたら物事は成り立たないものを言う。
つまりこの2行は、Excelの数式はプログラミング言語として成り立つべきものが欠けているにも関わらずプログラミング言語であると言っており、矛盾している。
Re:矛盾 (スコア:1)
> さらに「要素」とは、それが欠けていたら物事は成り立たないものを言う。
言わない
より厳密に言えば、「必要不可欠な要素」という表現があるように、欠けては駄目な場合と欠けても良い場合がある
当然「基本的な基本」=「必要不可欠な要素」と言うわけでもない
Re: (スコア:0)
訂正
誤「基本的な基本」
正「基本的な要素」
Re: (スコア:0)
っ「再利用可能な」
Re: (スコア:0)
独自に関数定義できない言語なんて、いくらでもあるだろう。
Re: (スコア:0)
元のブログを見ると、関数定義じゃなくて、ループが構成できないことが「欠けている」ものだったらしいよ。
Re:矛盾 (スコア:1)
関連ストーリーにも挙がってるExcelのワークシート関数で作ったドラクエ3 [developers.srad.jp]では、
循環参照を使ってループを実現してますね。「F9(再計算)でステップ実行」という、連続実行できない代物ですが…
循環参照 = 再帰呼びだしなので、設定で「反復計算」を有効にしたら、とりあえずループはできるとは言えるかと思います。
Re: (スコア:0)
そんなもん工夫でクリアしているExcelマスターは沢山居るが。
Re: (スコア:0)
そこは工夫でなくVBAの学習などで乗り切るべきだと思うが……
Re: (スコア:0)
Excelマスターは縛りを楽しんで居る様にも思える。
大抵VBAでやれば簡単な事をわざわざ関数だけでやろうとするだろ?
Re:矛盾 (スコア:1)
VBAを使うとマクロを実行してもらうという昨今の情勢では高いハードルを超える必要があるから数式で済むならそれに越したことはない
このまま進化すると (スコア:1)
Excelでメールの送受信、Webブラウズ機能などが実装されていき、最終的にはExcel OSが開発されてExcel PCが販売される未来だな
Re:このまま進化すると (スコア:1)
20世紀にEmacsで同じことを言ってた人もいたな。
いや、EmacsはエディタでもOSでも無く、環境である、だっけ。
Re: (スコア:0)
ワープロ専用機があったんだから表計算専用機があっても良いとは思う
リコーのマイツール搭載機ってそんな感じだったのかな
Re: (スコア:0)
表計算は有償オプションでいいから(家用とかはLibreOffice Calcあたりで代用するので)、その分本体値下げして。
Re: (スコア:0)
フロントエンドが表計算だから「Excel」なんだろ。
本質的中身が何かは知らんが。
Re: (スコア:0)
もう全部できるよ。COMコンポーネントを張り付けられるしVBAからWin32 APIを呼ぶこともできるんだから。
メールもWebブラウズもできる。
Re: (スコア:0)
OpenDoc…お前こんなところに…いやお前誰だ?!
Re: (スコア:0)
方眼紙機能も実装に含めて・・・
素直に (スコア:0)
VBA使おうよ
Re: (スコア:0)
面倒だからLispを組み込もうよ
~というのは冗談っぽいが、なんでんかんでもExcelでまかなおうとして、なんでもかんでもExcelに機能追加するのは素晴らしいユーザー体験をもたらすのか?
Re:素直に (スコア:2)
Re: (スコア:0)
VBAで最新のJavaScript(ECMAScript)使えるならそれで良いんだがなぁ…。
いいかげんVB6から離れたいだろ皆。
リンクにあるjsでカスタム関数作れるのって知らなかった。コレ良いかもな。
Re: (スコア:0)
とりあえず開発に VSCode を使わせて欲しい
VBA のエディタは色々と無理、というかもう嫌
いや JavaScript 使えるなら凄く嬉しいのですが
# 一応 WSH で JScript を使えるんですけどね
Re: (スコア:0)
それな
いい加減VS Codeとの連携機能欲しい
Re: (スコア:0)
まだ、開発途中だけど無いわけじゃない。デバッガは、まだ非対応っぽいが実行は出来る。
https://marketplace.visualstudio.com/items?itemName=local-smart.excel-... [visualstudio.com]
まぁ、いまさらVBAとか使わずに普通にC#かVB.NETで書けば、Visual StudioでもVS Codeでも好きなもの使って開発できるけど。
Re: (スコア:0)
Visual Basic Editorの現状は、VBAはもう使わないでくれというMSのメッセージだと思ってる。
少なくともこれ以上発展させる気は無いだろう。
# その処理、本当にVBAでやらなきゃダメ?
Re: (スコア:0)
言語仕様上、構造化例外が入るだけで使い勝手が飛躍的に向上するのに、とは常々思ってたね。
そんなに難しいことでもなさそう(エラーとラップとgotoでスパゲッティーにすれば今でもできる)なので、やらないのはVB6系統はおしまい! ってメッセージだろうと思ってた。
#VBAは標準モジュールに関数作るぐらいが丁度良い。まさに今回のLAMBDA的な。
Re: (スコア:0)
EXCELでPython使えるようにする話はどうなったんだろう。
おれもJavaScriptが使いたいが(TypeScriptならなおよし)、無理ならPythonでもいい。VBAはやだ。
Re: (スコア:0)
そういうのはPowerBIに任せてるんじゃないかな。
python、Rが使える。
Re: (スコア:0)
「Excel」「プログラミング言語」の文字を目にして「すわ、VB202xとしてついにコンパイラ付きで独立か?」と期待したのに、読んでみてがっかり。
Re: (スコア:0)
自分も「VSのテンプレにExcelってのが出て来るのか」と一瞬思った。
Re: (スコア:0)
vba使うぐらいならEXCEL外部から他の言語でいじくるわ
チューリング完全 (スコア:0)
じゃないのをプログラミング言語とは言わないような
Re: (スコア:0)
(全て)プログラミング言語はチューリング完全でなきゃならないのか?
Re: (スコア:0)
チューリング完全なものがみなプログラミング言語であるとは限りません
例:ライフゲーム、マインクラフト、プラレール、etc・・・
Re: (スコア:0)
Excelは関数の問題より、セル数の制限でチューリング完全にはならないような
Re:チューリング完全 (スコア:1)
Cだって現実の実装はポインタのビット数でメモリの制限がかかってるけど、それを以てCはチューリング完全ではないとは普通言わないような。
Re: (スコア:0)
というか今まで本当にチューリング完全じゃなかったんだろうか。すでにうっかりチューリング完全 [blogspot.com]になっていてもぜんぜん驚かないんだが
無名再帰もできるかな (スコア:0)
ラムダ式(無名関数)ですね。
LISP の ((lambda (x y) (+ x y)) 2 3) や
JavaScript の ((x, y) => x + y)(2, 3) が
LAMBDA(x, y, x + y)(2, 3)
Re: (スコア:0)
引数に関数を渡せるわけではないので、Yコンビネーターは構成できないと思われ
ランバダ(Lambada) (スコア:0)
実装後に、「おい、このランバダって何に使うんだ?」と聞いてくる職場のおっさんが目に浮かぶぜ
Re:ランバダ(Lambada) (スコア:1)
「LAMBDAっちゃ」ってギャグを言ってくるおっさんとどちらが年上だろう
Re: (スコア:0)
カレーが食べたい。
コロナのせいで (スコア:0)
セルの挿入もできなかった職場のおじさまが、目を見張る成長をしました。
vlookup, countifs など駆使したシートを作れるようになったのでした。
このおじさまに教えるべき関数って何だと思いますか。(業務上、大した難しいことはやりません)
関数は小文字派
Re: (スコア:0)
Accessかな…
Re: (スコア:0)
関数を極めるよりも、マスターやログの元データを集計が容易な正規化された(もしくはそれに準じた)テーブルにして、帳票とか見た目重視のUIとかは別のワークシートにセル参照で作る、というメンテナンス性に優れたブックを作れるようになると良い。
こうしておけば変更や拡張もやりやすいし、将来ExcelからちゃんとしたDBに移行するのも楽になる。
世の中のExcelに不満を持っている人の多くは、セル結合などを多用した見た目重視のワークシートに直接データを入れてしまう、または前任者が作ったそういうワークシートを使わされて、Excelデータは再利用できない、拡張不能と文句を垂れていることが多いと思う。
Re: (スコア:0)
拡張不能ってのは、ローカルビジネスルールちゃうん
魔改造にも程がある (スコア:0)
クソの山にいくら味噌を混ぜてもクソはクソ。
あまりにもクソがクソミソテクニックで活用されすぎて旨味を伴うクソが発明されたからといって、クソの味が中途半端に上がってしまうと
クソだと認識せず差し出された味噌汁、いやクソ汁を飲まされる被害が発生しかねない。
下手したら正真正銘のプログラム言語が事務系オフィスから駆逐されかねない。
マジ勘弁してください。
Re: (スコア:0)
> 下手したら正真正銘のプログラム言語が事務系オフィスから駆逐されかねない。
飽きたらお前らに発注が行くから駆逐はされんよ。
ただし、そのクソコードを読んで、真っ当な言語に置き換える作業をする奴が必要だが。