2021-05-24 雑談 VBAが初心者向け言語だと思われている理由考察

17
ほえほえ@スプシマン @hoehoe1234

VBAが初心者向けだと思われそうな理由(実際の言語仕様は、C言語などより遥かに複雑)。 ①最初のイメージ。初心者用の言語だといわれていた。 ja.wikipedia.org/wiki/%E3%83%80…

2021-05-24 21:01:07
ほえほえ@スプシマン @hoehoe1234

②メモリが直接さわれない割には、それに代替えする手段がない(メモリがさわれない言語は、Python、Javaなどオブジェクトベース?もしくはバイト配列等が充実している)

2021-05-24 21:01:58
ほえほえ@スプシマン @hoehoe1234

③運が悪かった。同時期に勃興したC言語がOS記述言語だったので比較されてしまった。パスカルなど同時期の言語が実質消えてしまったことを考えると実は頑張っている。

2021-05-24 21:02:49
ほえほえ@スプシマン @hoehoe1234

④昔のイメージが強い MSX時代に代表される1行ごとのインタプリターのイメージが強い。コンパイルして実行ファイルを作るイメージもないし、逆にPythonのようなガチガチのスクリプトでもない。

2021-05-24 21:04:15
ほえほえ@スプシマン @hoehoe1234

⑤VBだけで完結していない。VBA、VisualBasicなどすべてホスト/画面IDEがある。スクリプト言語としてテキストベースの開発ができない(VBSでは一部可能だがそれは後の話し、これは大きいと思う。他言語はIDE、画面がビルトインでも実行ファイルが作れる。

2021-05-24 21:07:00
ほえほえ@スプシマン @hoehoe1234

⑥テキストのみの開発ができない。「⑤」の続きであるが、VBだけを使って開発ができない。そのためVBでのアルゴリズムなどが流通してなく、最終利用者コードのみであり高度な技法が紹介されていない。

2021-05-24 21:08:10
ほえほえ@スプシマン @hoehoe1234

⑦アルゴリズムが記述できない。できないというのは不正確だが他言語では動的データ構造+アルゴリズムを駆使できるが、フルエントなレコード型がないため高度なアルゴリズムは記述しにくい。

2021-05-24 21:09:04
ほえほえ@スプシマン @hoehoe1234

⑧ ⑦の延長で「VBによるアルゴリズム辞典」などがない。やはりテキストのみで動く環境がない、アルゴリズムの記述能力が低いためにどうしても「利用者視点でのコード」しか出回らない。

2021-05-24 21:11:40
ほえほえ@スプシマン @hoehoe1234

⑨ 配列と関数/プロシージャの記述がボイラー。過去の互換性のため不要な複雑さ、自由度があるにもかかわらず必要な機能が欠如している。

2021-05-24 21:13:25
ほえほえ@スプシマン @hoehoe1234

⑩意図的な設計とはおもうが、初心者にはやさしいが、中級者がその上に行こうとすると極端に難しい。WinApiなどを使わざるを得ない。また、さまざまな理由によりFW、ライブラリを作るのが困難。結果、これまたユーザコードしか出回らない。

2021-05-24 21:14:35
ほえほえ@スプシマン @hoehoe1234

⑪成功の復讐。初心者でもとりあえずかけて裾野が広い。言語設計者とMSの狙い通りだとおもう。そのため初心者層が圧倒的におおく、これをもって初心者用の言語と思われている嫌いがある。これは成功したことによる副作用なのむしろ喜ぶべきこと。

2021-05-24 21:16:32
ほえほえ@スプシマン @hoehoe1234

⑫ 複雑な概念がない。神社仏閣山は高いほうがありがたみがます。現代言語の高度な機能の殆どが実装されていない原始的な(ワイはすきだが)構文のみ。スクリプト言語に多く実装されている機能、概念がない。

2021-05-24 21:23:27
ほえほえ@スプシマン @hoehoe1234

⑬システム記述ができない。ネットワークサーバ、今であればwebサーバなどを記述する能力がない。これはテキストのみで動く環境がないことにも起因する。どうしてもスクリプト言語のPython、Rubyと比較されてしまう。

2021-05-24 21:25:03
ほえほえ@スプシマン @hoehoe1234

⑭実際にはある程度フルエントな使い方ができるが、それには自分ライブラリの構築、バリアントの理解、APIの理解などが必要になる。また仮にそれができても個人ベースでありVB全体のレベルとはならない。

2021-05-24 21:26:12
ほえほえ@スプシマン @hoehoe1234

⑮レコード型と参照型がなく、他言語との移植がほぼ不可能。クラスを使えば一部対応可能であるが、クラス数爆発問題がありなかなか難しい。

2021-05-24 21:27:13
ほえほえ@スプシマン @hoehoe1234

⑯制御構造の記述は、再帰、goto、gosub、doループとほぼ満足の行くものであるにも関わらずそのようなリファレンスコードが出回ってなく、りかいされていない。

2021-05-24 21:29:31
ほえほえ@スプシマン @hoehoe1234

⑰コレクション、配列リスト、辞書、FSOなど後付けでVBを補助するものがあるが、このような基本的なデータ構造を組み込みで持ってないためフルエントに利用、定番がさだまっているとはいえず、理解されていない。

2021-05-24 21:32:14
ほえほえ@スプシマン @hoehoe1234

⑱スクリプト言語であるにも関わらずスクリプトとして使用できない欠点は大きい。また、importシステムがないためライブラリをうまく使用できない。comを作って流通できるほど個人には暇もスキルもない。Pythonのコードベースの流通と比べると仕組みで負けているといえる。

2021-05-24 21:34:51
ほえほえ@スプシマン @hoehoe1234

⑲仮にa)スクリプトベースで稼働b)よいimportシステムc)名前空間がちゃんとしているd)主要データ構造を組み込み(または標準ライブラリで)提供しているe)データ構造を作れる仕組みの追加があれば一級の言語になると思われる。

2021-05-24 21:36:52
ほえほえ@スプシマン @hoehoe1234

⑳これまでの考察により、VBAが初心者用の言語だとみられるのは「MSがそのようにとどめていて、それが狙いであるから」といえる。むしろグルー言語のVBAが大成功しすぎてしまって管理できなくなった結果、このような不満が生じているのではないかと思う次第。おしまい。

2021-05-24 21:38:01
ほえほえ@スプシマン @hoehoe1234

JSの本質的な価値はブラウザで動くことだけだし、VBAも同様にエクセルの組み込み言語であるということだけ。しかし、この唯一の価値がすべてを肯定する。仮にVBA以外のよい言語がエクセルに実装されれば躊躇なく乗り換えればよいだけのはなし。

2021-05-24 21:44:36
ほえほえ@スプシマン @hoehoe1234

多くのスキル、知識、方法論は無駄にはならない。それは割と汎用的だから。エクセルのオブジェクトモデル、シートの扱い、全体のアプリの構築方法、、、大きく変わるとしたら内部でデータを持ちやすくなるのとファイル関係、外部通信、テキスト処理ぐらいでそれはアプリの作り方に比べれば割と些末。

2021-05-24 21:46:23
ほえほえ@スプシマン @hoehoe1234

しかし、実際はその些末なところでいらぬ苦労をしているのでエクセルに新言語(搭載されるとしたらたぶんJavaScriptかな?)を待っているのだろう。今のVBAに決定的に欠けているのがそこだからだ。しかし、一般的な業務アプリではそのようなことは不要であることが多いので単に新言語の修得でよい。

2021-05-24 21:48:02
ほえほえ@スプシマン @hoehoe1234

アプリの構築の知識、経験を10としたらVBAの割合は3程度だろうか?これは「VBAが言語的に複雑・難しすぎる」ことに起因している。もっとシンプルな言語であれば言語自体に必要な知識、経験は1~2ぐらいの割合になるイメージ。

2021-05-24 21:49:28
ほえほえ@スプシマン @hoehoe1234

これはほんと不思議なんだけど1年もやればVBAがどれだけ複雑で難しくて試してみなければわからない挙動が多くて過去の互換性の呪縛があるかは分かると思うので、「VBAが簡単」などといっているのは単に表面をなぞったけの一見さんか、本当のエクスパートだけだろう。

2021-05-24 21:50:57