言語の歴史は人類の歴史。そして人類はコンピュータを言語で動かすようになった。

VBAは逝って欲しい

»

ExcelやWordに付いているVBAですが、そろそろ別のものに進化した方がいいように思います。初心者でも簡単に始められるという触れ込みですが、書き方がレガシー過ぎるし、機能的にも中途半端でメンテナンス性が低いです。コーディングで制御する仕組みは全部外出しにして、PythonでもRubyでもいいので連携しやすくして欲しいものです。

確かにゴチャゴチャやればPythonでもRubyでVBAの代わりはできます。VBAではなく、そっちが標準になってくれると嬉しいです。各言語でリリースされているライブラリを使えば、Excelを活用できる幅も広がります。メンテナンス性の高いコードを書くこともできるようになります。

VBAは中途半端です。よく、プログラミング初心者にお勧めの言語として紹介されますが、私はお勧めしません。たしかに、実行する環境が簡単に手に入るし、自動記録機能は便利です。基本的なプログラミングの手法は学べます。しかし、書籍やWebで紹介されているサンプルコードでは、日本語で変数名を付けたり、自動生成したコードをコピペなど、質が悪いものも多いです。

「手軽に簡単」も良いですが、言い方を変えれば「安易」とも言えます。しかも、VBA自体は大して書きやすくもありません。むしろ、別の言語で書かせた方が実質的な難易度は抑えられるように思います。ExcelやWordを自動化させたいなら、いっそ全部GUIで制御できるようにした方が親切です。

VBAは二十年近く何の改善もされないような仕組みで、例えるならIE8みたいなものです。とはいっても、Excelから強制的にVBAの機能が省かれるという形ではなく、もっと優れた仕組みをリリースすることでVBAが市場から駆逐されて欲しいです。つまりのところ、Excelの安直なVBA(クソコード)ではなく、時代に合わせてアップデートされるものになって欲しいということです。

Comment(30)

コメント

じゃ

じぶんでやってみな

匿名

プログラミングなんかする暇あれば営業行ってこいって言われますしね〜
VBAでこと足りるし、、、

匿名

であれば、文句ばっかり言ってないで、自分でも何かしたらいいんじゃないですか?
他力本願すぎますよ

事務屋

ITエンジニア、職業プログラマーから見てダメなプログラムであっても、目的通りの結果が得られれば十分だよ。
プログラムは仕事を進めるための中間生成物でしかないの。
プログラム自体は目的じゃない。
「ドリルを欲しがる人はドリルでなく穴が欲しい」
客はプログラムが欲しいんじゃなくて目的を達成したいの。
言語の種類に拘るなんて本末転倒も良いところだ。

Horus

・・・予想通りのテンプレがいっぱい来たのでまとめて返答します。


自分でやった感想を書いているのに「自分でやってみろ」とか「自分でも何かしたら」は、流石に意味不明なので無視します。


言語の種類にこだわっているというより、VBAが原始的と指摘しています。効率よく仕事をしたいなら、わざわざVBAを使うよりWeb上のサービスを活用すればいいです。コーディング無しでいろいろなことが実現できます。そういう方向に考えをシフトした方が幸せになれると思います。


プログラミングをしたい人にすればVBAは陳腐化しています。これから廃れていく流れなので、頑張って習得してもコーディングで食べていけるようにはなれません。コーディングで食べていきたい人は、最初から別の言語を選びましょう。


プログラミングをホビー感覚で楽しみたい人には、ゲーム感覚でプログラミングできる「Scratch(スクラッチ)」なんていうのもあります。ドローンを飛ばせたりと、なかなか弄りがいがあります。


VBAは今更頑張って覚えるようなものではないです。チョロっとやって簡単なものが書ければ十分です。それなりに便利なのは分かりますが、何かの決め手にはなりにくいです。時代に合ったものを使いましょう。

匿名

エクセルのVBAを多用しています。
作りたい物は、エクセル様式の印刷物もしくは電子データなので、VBA以外を使用すると手間が増えるだけなのでVBAを使用するのがベストです。
やっていることは、GPIB通信で計測器からをデータ取り込むところや、RS232通信で計測器からデータを取り込むところ、他のファイルを開いてデータを取り込むところをVBAで実行させていることが多いです。
あと、標準モジュールで関数を作って、エクセルのセル内で使用できるオリジナルの関数を作ったりもしています。
計算させるところは、できるだけエクセルのセルの関数で行うようにして、マクロを走らせることなく計算が完了するようにしています(標準モジュールでオリジナルの関数が作成できるところがかなり便利)。
重要なのは互換性で、エクセルのバージョンが上がっても、古いコードが動き続けてくれるVBAは本当にありがたいと思っています。
新しい言語を知らないので、どの程度容易にコードが書けるのかわからないですが、2000年ごろに書いたコードが動かなくなるような変更はやめていただきたいというのが私の思いです。

Neo

私も進化や他のものとの統合(と言うより、他の言語で代用)は必要だと思います。
vbaでやれない事はないですが、標準ライブラリの機能が中途半端であったり、参考にできる情報(ネットや書籍など)も微妙であることが多いことは否めません。
vbaを無くさなくても良いけれど、そういった別の切り口の手法も用意してほしいと考えます。

事務屋

コーディングを職業にするなら主張の通り
非IT企業内の場合は
Webサービスに機密情報を置けるほどネット企業を信用してないし、承認プロセスを通すのも楽じゃない
ソフト屋に発注しようにも有料、これも決済必要
自前でソフト開発環境用意しようとしても、ソフト屋じゃないから買って貰えない、フリー開発ツールはライセンス上論外
ということで非専業プログラマーはVBAになる
Webサービスなんて簡単に言っちゃうのはITギョーカイの勝手な都合で、情報管理の発想が無い
古い会社と切り捨てるのは簡単だが、それは発想がITギョーカイ過ぎる

事務屋

とは言え、Excel本体やPhotoshop本体のような長大なソフト作るならVBA使うべきでない、というのなら同意
家で書くのはJavaやCだし

通りすがり

自分でやってみろってのは、自分でVBAを駆逐しろって意味じゃないの?
使いにくいかどうかは人によるでしょうが、他の言語を知ってる人からすれば、使いにくいところばっかりなのは事実ですね。
ただVBAで作業効率化してる企業は多いし、これだけ普及してたら安易に改革できないと思うな。そういった人たちの苦情まで全部引き受けられる?
新しい仕組みとか、言うは易しですよ。
そんなこと評論家みたいに語ってないで、あなたが考えて実行したらいいと思います。

通りすがり

回答見ましたが何の回答にもなってませんよ。
それは置いといて、普通VBA使う状況ってまず社内でうん億円かけたシステムが動いているんだよね。そこでシステムが行き届かなかったり社内の状況が変わったりして人がエクセルで処理する状況が生まれる。
システムを修正するとなると項目一つ足すだけでうん百万かかるからさわれない。
ここでVBAの登場なんだよ。
あなた達安月給でアフタ-フォローすればVBAなんか流行らないよ。

この内容が理解できてない時点でその人が既に時代から取り残されているんだと思いますね…
VBAが便利だった時代と今とではネットワークやらOSSやらプログラミング言語やらと色々な環境が変化している。
単純に考えてもその中で変わらないVBAが今の時代も優れている訳はなく…
しかし、このコメントを見てなかなか変化を受け入れられない人の為にVBAが生き続けているのだなと思いました…

Horus

> 匿名 さん
「昔書いたのものがそのまま動く」はメリットではなく、「新たな可能性を放棄する」とのトレードオフです。「トレードオフ」ということを認識した上でなら、どちらに価値をおくのも良いと思います。


> Neo さん
ちゃんとVBAと多言語と比較できるひとからのコメントで嬉しいです。何を言おうと実際にVBAが無くなるのは当分先だと思います。


> 事務屋 さん
何でもExcelだけでやろうとする人の行き着く先がVBAだと思っています。VBAは他の方が力説するように確かに便利です。しかし、もっと便利なもたくさんあります。と、そういうことです。いろいろな選択肢がある中からVBAを選ぶならそれで良いと思います。ただ、知らないでVBAを選ぶなら損をしていると思います。あと、機密情報をExcelで処理してる時点で流出するリスクが高いです。そこにコストを惜しむ会社であれば、将来はあまり望めません。


> 通りすがり さん
発想が「言うならやれよ。でもオレは何もしないよ。あくまで使ってやってるんだからな。」なので、あなたと価値観が一致することは無いでしょう。内容を見ても典型的なクレーマーです。単に否定したいという気持ち以外、何も伝わってきません。今度からは、「通りすがり」ではなく、コメントを付けずに「通り過ぎて」頂ければ嬉しいです。


> 杜 さん
ご指摘のとおり、内容を理解できずに錯乱してコメントを付ける人がけっこう見られますね。変化すること、イコールデメリットと考えている人にしてみれば、確かに内容を理解するのは難しいでしょう。もっと、言語云々のコメントが付くかと思ったのですが、意外と少なかったです。

匿名2

VBAが他の言語に大きく劣るのは多くの人が感じていると思います。
ですがそれはプログラミングに関わる職業からの視点に過ぎません。
普通の人からすれば手軽にExcelで何かを実装できるというのは非常に魅力的です。
(少なくとも私はVBA以上に簡単に開発環境を用意でき、Excelとの強力な連携ができ、またマクロ記憶のようにコードを書かずにプログラムを作れる他の言語を知りません。)
プログラミングと殆ど縁がない人にとっては現在のVBAで十分に強力なツールであり、だからこそ変わらず生き残っているのだと思います。

仲澤@失業者

アプリケーションに付属の言語なんてのは、まぁだいたいそんなもんです。
が、中にはAutoCADに内臓のLispの様にすごいものもあって、
それまでの専門的な分野のCADを駆逐して、AutoCADに塗り替えてしまいました。


WordやExcelにはそんな事ができるような、本質的な構造的改革をお願いしたいですね。
現在の仕組みは、ややお子様向けすぎるかもしれません。

プログラマブルCQC

駆逐あるいは上書きしようとするなら定量比較して新しいものがより優れていると数字で証明しないといけません。
新しいから無条件で優れているなどと思考停止するどこぞのコラムニストのようにはなってほしくないものですね。

はげ

ヒント VSTO

ん〜

想定しているユーザが違うのだと思います。
basicは初心者向けの言語で他言語に比べ敷居が低いです。
「手軽に簡単」なのが良いのだと思います。


また仕組みが古いことは悪いことだけではありませんし
バージョンが上がっても互換性を保証してくれているので過去の資産が長く使えます。
一般の企業にとってこれは大事な事です。


本格的に今風のモダンなコーディングスタイルを用いたければVSTOや各種OSSなどもあるので必要に応じて選択すれば良いでしょう


M

ちょこちょこ変わる方が最悪。
PGなんて目的あってのものなんだし、目的なんてそうそう変わるもんじゃないし。
それにメンテナンス性は書く人のセンスによるところも大きい。
今みたいにいろんな言語があるほうが最悪。
PGなんて簡単に越したことない。
企業が新製品を出し続けないと生きていけないから出し続けているように、言語も誰かの生活のために作られているようにしか思えない。

Horus

> 匿名2 さん
でも、もっとお手軽で便利なのを見つけたら絶対にVBAを捨てると思います。いちいちコーディングしなければいけないので、普通の人から見ても劣ると思います。最近では、GUIでチャキチャキできるツールも多々あります。ただ、知名度が低いだけです。


> 仲澤@失業者 さん
ご指摘のとおり、単なる付属品なんですよね。クリティカルな用途で使用できるような設計になっていないです。凄いものを作るより、連携を目指した方が現実的です。


> プログラマブルCQC さん
数字って出せばロジカルだと思ってないですか?そんな薄い理屈では、某コラムニストさんにコテンパンに論破されますよ。出直してください。


> はげ さん
残念ですが、ヒント以前に問題を出していないです。


> ん〜 さん
これは考え方だと思いますが、過去の資産が使えることはご指摘の通りメリットです。しかし、裏をとれば、技術的な新陳代謝をしていません。変化に直面したときの対応力が落ちます。どちらを取るかはトレードオフかと思います。


> M さん
半分同意で半分は違うかな思います。いろいろな言語があるのは、それぞれに用途があるからです。ご指摘のとおり、PGは目的あってのものだと思います。ただ、今の時代はいろんな要件がこれでもかというくらいに発生します。企業が新製品を作るのはご指摘の通りかもしれませんが、既存にブチ切れた人や、上手い具合にいったというノリで新しいものを作る人もいます。

Horus

コメントを読んでいて、一つ一つ返答するのも面倒くさくなってきたので、前もって「そういう人」用にテンプレートを作成しておきます。


-- テンプレート1 (既存に固執する人向け)--
古い資産が使い回せるというのはご指摘のようにメリットです。しかし、変化に弱くなるというデメリットもあります。どちらを取るかはトレードオフです。それぞれの立場と状況で判断すればいいと思います。ただ、古い資産に固執するタイプの人はエンジニアには向かないです。


-- テンプレート2 (「おまえがやれよ」な人向け) --
いろいろとやった上での感想を書いています。私が何を言おうとMicorosoftの方針は変わりません。ご安心ください。ただ、その妙な上から目線が気にくわないので、今後、コメントを控えて頂くと助かります。


-- テンプレート3 (目的が得られれば良いじゃんな人向け) --
目的を達成することはご指摘の通り大事です。しかし、ExcelやWordに固執しなくても、たくさんの便利なものがあります。コーディングすらせずに便利に使えるものもあります。VBAもいいですが、目的に合ったツールを使用することが大事かと思います。


-- テンプレート4 (クソコメ向け) --
黙って失せろ。

クソコメ

新しものを貪欲に取り入れることは悪いことではありませんが、生き残っているものには必ず理由があります。
Horusさんのコラムやコメントからは自動でコーディングの代わりをしてくれるものを高く評価しているように感じますが、マクロ記憶などは正にその機能そのものであり、一般的な人が簡単な効率化目的で使うには十分に強力な性能を持っています。そういった面をすべて考慮した上でVBAはクソなので駆逐されるべきだと考えているのでしょうか?もしそうだとすれば現実世界に存在する殆どのものが駆逐対象になりそうに思います。

ちなみにエンジニアに大切なことは、無重力でも使えるボールペンを開発することではなく、鉛筆の存在を忘れないことだと私は思っています。

Horus

> クソコメ さん
> マクロ記憶などは正にその機能そのものであり
これ、GUIでやって欲しいんだよね。使う方もそっちの方が楽だろう。で、コーディングしたい人は他言語でやってくれと。


> 現実世界に存在する殆どのものが駆逐対象になりそうに思います。
駆逐対象になります。今の技術が百年後に通じるとは思えない。ただ、例えるならVBAは鉛筆じゃない。砂に絵をかくただの棒だ。CやC++でそれを言うなら分かるが、根底となる技術としての素養は無い。

通りすがり1

後に同じ名前で投稿してる奴は俺じゃない。こういうの非常に迷惑だね。匿名ならともかく。

以下は筆者にいうけど、やってもみないで、あれは変わらないとか決めつけてるね。自分がやりやすいようになって欲しいだけだろ?
VBAはこうだと決めつけて完全否定して、レスに矛盾ありすぎじゃないかな。
そんな記事を投稿しといて気に食わないコメントに一つ一つぶった切って何が楽しいのか理解できないし、これをやってあなたは何を得ようとしてるわけ?暇潰し?
これ以上相手にするのもあほらしいからこれ以上みないけど。
これからも精々頑張ってね。

通りぴより

ボールペンと鉛筆のくだりは例えではなく「一方ロシアは鉛筆を使った」という非常に有名なジョークのことですよ
最新技術に固執するあまりもっと簡単で単純な方法を見落とす、という頭の固い技術者を痛烈に皮肉ると同時に色々と考えさせられるいいジョークです

ノラ

> クソコメさん
> 新しものを貪欲に取り入れることは悪いことではありませんが、生き残っているものには必ず理由があります。

EXCELの4.0,5.0マクロとかですか?
あれがいまだに残っていること自体処理の自動化がたやすく負債として残る。誰もメンテナンス出来ない代物になる典型だと思いますが。
VBAは登場した当初はそれなりにプログラミング言語としてまともな制御構文を持ち、階層化されたオブジェクトに対してアクセス出来るという点では進歩だったと思います。
しかし、現状拡張性やモジュールの再利用性などの点では見劣りしますし、マイクロソフトもVBAの改善については放棄しているように感じます。
そろそろ迷走するのはやめて新たな方向性を示して欲しいです。

Horus

> 通りすがり1
GOTO テンプレート2
GOTO テンプレート4


> 通りぴより さん
そうですか。豆知識程度に覚えておきます。


> ノラ さん
個人的に同意です。

Horus

なんか、コメントのVBAとGOTO文を入れ替えても通じる。

milktea

前回匿名で書き込み、VBAを多用していて、昔作ったのコードが動くことが利点と書き込んだ者です。
わたしは製造技術者で、ITエンジニアではありません。
製造装置のメンテナンスや条件設定を主な仕事にしています。
やりとりを拝見させていただいて感じたことは、VBAはIT関連のプロが使う道具ではないということではないでしょうか。
似た例として、自分が仕事で使用する電動ドライバーはクラッチ付きの2万円~3万円するような性能のよいものですが、自分の家の日曜大工で使用している電動ドライバーは、1500円程度の乾電池で動く物です。製造装置を壊されてはたまりませんし、パワーも必要なので、1500円の電動ドライバーを仕事で使用してもらっては困りますが、DIYで使用するのであれば1500円の物で十分活用できます。
VBAは1500円のドライバー的存在ではないでしょうか。
VBAは条件出しの実験データの取得や、データ整理の自動化に大変重宝しています。

自分は趣味でプログラムをしている程度で、N88BASIC、VB6、C++、JAVA(3G携帯電話向けのみ)と古い言語ですが色々とやってました(学生時代には授業関連でフォートラン77とターボパスカルも習いました)。
もともとは、エクセルがないと動かないVBAはプログラムではないとexe形式にこだわってましたが、GUIを作る必要がない(エクセルの表に入力させ、そこからデータを読み込む)ためプログラムをすぐに動かすことができる便利さから、10年くらい前からVBAがメインになっています。
2010年くらいのことですが自動計測のソフトを外注する時に、結果はエクセルで出すのだからVBAで作成してほしいと依頼しましたがメーカーに断られました。結果的に、ソフトがエクセルの様式ファイルを開いて、様式中の表の中に結果を貼り付けるソフトとなりました。
この時、VBAはプロが使う言語ではないのだなと感じた記憶があります。
これでは不便なので、GPIB通信やRS232C通信をVBAで動かすにはどうしたらよいのかインターネット等で調べ勉強し、VBAで自動計測ソフトを自作しました(1年以上かかりましたが、改善案件で納期がないので問題ありませんでした)。

エクセルに付属した形でプログラムが動くという形態はDIYには便利です。
コードを書く言語はVB6ベースでなくともよいですが、C++のクラスを使うメリットがあるような複雑なデータは扱いませんので、上記わたしが経験した言語の中ではVB6が楽だと思います。

Horus

> milktea さん
おおかたそんな感じでしょうか。もう一つ、私が思うのはVBAでガリガリ実装している機能が、実はExcelの標準機能でできた。そういう事例をたくさん見てきたからです。ExcelのVBAが書けるからと、何でもそれでやろうとする非プロな人はたまに見ます。


無重力でも使えるボールペンを開発することではなく、鉛筆の存在を忘れないことだと私は思っています。VBAを使えば何でもできるではなく、適切なツールを使うことが大事だと思います。

コメントを投稿する