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

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(62)

コメント

じゃ

じぶんでやってみな

匿名

プログラミングなんかする暇あれば営業行ってこいって言われますしね〜
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を使えば何でもできるではなく、適切なツールを使うことが大事だと思います。

DNV32

確かにVBAってなんだか古くて…classがあるのに継承できなくて「これって構造体…?」と驚いた覚えがあります。
VBAしか実装できる環境がなくて勉強したのですが、すごく困惑しました。
最近のプログラミングを勉強しているほど戸惑いますよね。


それでも、milkteaさんもおっしゃる通り色々便利に使えるので捨てがたいのですよね…私も使ってますし…。
なにしろExcelがすごいです。根本的にExcelに出力したいニーズが高いのでしょうね。


でも、しばらく前にOfficeでPythonを使えるようにしようかというmicrosoftの人の意見があったので
しばらくしたらPythonで今のVBAみたいなことできるんじゃないかなあ、と個人的には期待しています。
Officeでプログラミングするのは良いんですけど、VBAは確かにもう面倒くさいですよね!
おっしゃる通り、本当に同感(クソ)ですよ!!

匿名L

>無重力でも使えるボールペンを開発することではなく、鉛筆の存在を忘れないことだと私は思っています。


 このネタ自体が極めて信憑性に欠ける都市伝説の類なんですが、それは置いておいても本来このジョークには
1.NASAの開発は無駄な努力だったというアメリカを皮肉ったもの。
2.宇宙空間で鉛筆を使うと折れた芯や粉が精密機器に紛れ込み、ショートなどを起して誤作動の原因になりかねない。目先の安さに気をとられ、こういった小さな配慮を怠ったがためにロシアは宇宙開発競争で敗れた。
 という二つの解釈があります。なので『鉛筆の存在を忘れない』で終わってしまったら完全にアウトですね。

 そもそも無重力の宇宙船内で、導電体である黒鉛の粉末をまき散らす鉛筆を使用するのは極めてリスキーな行為なので、無重力でも使えるボールペンを開発する方が正解です。実際現在は、NASAもロシアも鉛筆の使用を止めてボールペン使ってます。
 もっとも開発コストは0(メーカーが自主的に開発したものをNASAが普通に購入した)だったそうですが。

 物事はちゃんと調べてから書きましょう。でないとコラム全体の信頼性に関わりますよ。

Horus

> DNV32 さん
結局のところ、VBAはOfficeのオマケ機能です。一応、私も存分に活用しています。コメントを見ていて思うのが、どうも使いこなせていない人ほどVBAに執着する傾向があるようです。個人的な経験ですが、VBAを使いこなしている人ほど、その限界を熟知しているようです。


> 匿名L
そこは問題ありません。信頼とか以前に、コラムの内容そっちのけでコメント欄でボールペンと鉛筆の話で白熱する人は読者としてカウントしていません。ジョークの解説、お疲れ様でした。

VBAが嫌なら

C#とかで書けば良いんじゃないんですかね?

匿名L

>ジョークの解説、お疲れ様でした。

どういたしまして。こうして一つずつでも正しい知識を広めていけるというのはとても幸せなことです。


貴方を啓蒙できたのは私の誇りであり喜びでもあります。これからもお互い、常にあらゆることを学び続けるという姿勢を失わないようにしたいものですね。

hage

ずいぶん前の記事なので読まれないと思いますが。
VBAは簡易ツールという認識なので、普通のプログラマが触るものでは無いです。
VBAはユーザー向け、プログラマ向けには常に最新の言語の対応をしてもらえたらうれしいですね。

んー

更にずいぶん昔の記事なので更に読まれないと思いますが.


別のモノに進化させるのはデベロッパで,VBA使ってるのはユーザですよね.
ユーザはもっと便利なものがあればさくっと移行しますよ.
皆さんおっしゃっているように,実社会の乱雑な仕事環境を乗り切るのに,これより簡単で便利なものがない場合に使っているわけですから.


コラムはユーザ視点に立っているのに別の方法見つけろとか言っていて,問題の切り分けができていないなーという感想を持ちました.

Horus

> んー さん

> 別のモノに進化させるのはデベロッパで,VBA使ってるのはユーザですよね.
まず、私にはこの前提がありません。実際、ユーザがVBAで場当たり的に対応している事例もたくさんあります。そういう区別はしていません。


また、ユーザは便利なものがあってもサクッと移行しません。ユーザが選ぶのは便利さより安心なものか無難なものというのが実情だと思います。


前提になる条件が私とんーさんではこれだけ違っています。「コイツ、何を前提にそれを言ってるのか?」という視点で読んでみると、また違った感想がでてくると思います。

匿名J

VBAは逝くことはないな、少なくとも今後10年は存在し続ける
マイクロソフトは自分の首を絞めることになる事はしないだろ
VBAが無いOffice=Open office まさかMSが気づいてないとは考え難い
ユーザーからの抗議で復活することに


よって当面 EXCEL VBA は社内最強の開発言語
社内のVBA職人(ボランティア、全く報われないけどね)は日夜頑張っているし


もしVBAが逝った暁にはプロの出番となるのだろうか
VBA職人が扱う業務分野は千差万別です


Horus

> 匿名J さん
VBA云々言っている人の大半はKing Officeでも事足りてしまうんですよね。VBAやマクロも使えますし。別にMS のOfficeにこだわる理由は大して無いです。


コラムを書いて分かったことは、世の中にはVBA大好きでしょうが無い人がいるのと、私はそういう人とはそりが合わないなということ。VBAの否定はするが、そういう人の考え方まで否定する気はありません。考え方の多様性とだけ認識しておこうと思います。

ユーレイ

基本的に賛否あるでしょうが、優秀なのはVBAではなくてExcelそのもので、
そのExcelを自動で動かす方法がVBAだから使われてるって話でしょうね。
代替Excelもあることはあるけど、全ての面で完璧にExcelを再現できてるソフトは見たことがない。
簡単な関数のみで表計算がやりたいだけなら足りるけど。


まあそれとVBAが使いづらいのは間違いない。
少なくともマイクロソフトの言語で置き換えるならC#とかにした方がいいでしょうし、
そこはマイクロソフトもわかってるかと思いますが。
ただマイクロソフトとしてももう今更置き換えるのは困難なのでは?

匿名

VBAも他言語も初心者、中級者はCODECOMPLETE読んどいて損はないはず
行き当たりばったりで実装したようなコピペコードのメンテナンスはストレスたまるだけ
保守性と可読性を考えたコードのほうがメンテナンスしてて楽しいよ

フォン

投稿内容は基本的に異論はないのですが、よくわからないところで質問があります。
あと、私の認識があってるのかも確認できればとおもいます。

私はVBAユーザーです。
ITエンジニアではありません。

VBAでエクセルの操作やOSの操作などを自動化しています。事務員がやっている日常作業の自動化ですね。


<投稿内容について>

> ExcelやWordに付いているVBAですが、そろそろ別のものに進化した方がいいように思います。

→①コーディングをVBAではなくPythonなどに変えるという意味でしょうか。次の文では「全部外出しにして」とあるので、②Excelにはコーディングの機能を持たせないで外部から制御ということでしょうか。もしくはそのどちらかでも実現してくれたらいい。ということでしょうか?


> よく、プログラミング初心者にお勧めの言語として紹介されますが、私はお勧めしません。

→まず多くのVBAユーザーは「プログラミングを学びたい→まずは初心者にお勧めのVBAを勉強しよう」という考えはないと思います。間隔ですが、VBAユーザーの9割はプログラミングを学びたいからスタートしていないと思います。よってコーディングがPythonであれば、それを覚えるまでだと思います。つまり、初めからそうしておいてくれというのが投稿者様の意見の一つかなと思ってます。


> たしかに、実行する環境が簡単に手に入るし、自動記録機能は便利

これがVBAユーザーにとって最大のメリットだと思っています。
たとえば上記①の場合であれば、覚える内容がVBAでなくPythonになるだけです。しかし②の場合はExcelがあれば使えるというものではなくPythonを記述・実行する環境が別途必要ですよね?(専門でないので違ったらすみません)
パッケージ化されているというのは最大のメリットであり、今すぐ何もしなくても(VBEを開く作業はありますが)使用できるというのが使用する一番の理由だと思います。言語がVBAだからという理由ではありません。
「昔はwindowsに無料のIEが入っていたため一般ユーザーはなにも考えずIEを使っていた」のと同じだと思います。IEがよいとか悪いとかという話はそこにはないですね。
これらは同じ考えであるという認識です。


以下の例えは共感されるかわかりませんが私の感覚です。

私は純日本人ですが、日本語は世の中に不要となっています。
好き嫌いはおいといて、英語や中国語などある程度普及している言語で統一すべきと思っています。
(以下、とりあえず英語として話進めます)

・英語を勉強している人はたくさんいますが、それを覚える時間が省ける
・日本国民全員が英語圏で仕事や生活をするときの言語の壁がなくなる
・外国人旅行者が日本にきたときの不便さが解消される(一方、日本固有の言語等に魅力に感じる人は減る)
・学術的にはわかりませんが日本語はレガシー(ファジー)と感じる
・日本語は美しいとか趣があるという人がいるが、外国語にもそれぞれあると思う。ただの日本ひいきだと思う。


ただし、
今からすべてを英語に変えるのは現実的に不可能。国民の反感もくらい、膨大なパワーやお金が必要、また浸透するまで100年くらいの代謝時間がかかりそう。アメリカに敗戦したときに、日本の公用語を英語にしてくれればよかったのにと思いました。

投稿者様にとってのVBAは日本語かもしれません。
日本語逝ってくれと思ってますから。


※補足
途中でExcel以外の代替ソフトの話もみましたが、個人的にはGoogleスプレッドシートが一番優秀と思っています。GASでほぼ同じことやそれ以上のことができますし。
ただ、Googleスプレッドシートが認められず、エクセルが指定されている企業も多くあります。No choiceです。これについては元の投稿内容と別の話になってくるのでここでは不要と考えます。

Horus

> フォン さん
私の思うのは、VBAしか書けない状態であれこれ考えても、何らか利益の得られる結果は得られません。だったら、少しでも何かできるようになってからこのコラムを読み直すことをお勧めします。私が何を答えようと、VBA以外で何かをやって「すごい」と感じた感覚は伝わらないです。


一冊本を紹介します。VBAを使えるレベルのスキルがあれば読み解けます。同じ勉強量で、VBA以上のことができれば、私が返答するより納得がいくと思います。


-- 退屈なことはPythonにやらせよう --
https://www.oreilly.co.jp/books/9784873117782/

VBAのコード、あるいは言語仕様は確かに、使いにくい。冗長で面倒くさいコーディングだ。
おまけに、VBAのエディタ(コーディングエディタ?)のインデント幅が、勝手にバラバラになり、そこも不満。


++や--がないのは、まあ良い。でも、+=も、ない。
?:も、ない。
続けて処理できず、いちいち変数に入れないといけないこともあった。


サブプロシージャ(という名のメソッドや関数みたいなもの)を呼び出すとき、
カッコを付けないとダメ! なときと、カッコを付けてはダメ! なときがあり、紛らわしい。


簡潔な書き方に気づいても、それを実践できない、古くてレトロな言語仕様だ。

a

VBAのエラーメッセージが的はずれすぎるのも、嫌な点だ。

匿名

私は情報システムの人間です(インフラ系)。bat → ScriptIT → UWSC → PowerShell とツールとして使用してきました。VBA/VBS もあることはありましたが、自分がスクリプトを作る時は使いませんでした。転職して環境が変わり、今回初めて VBA/VBS のマクロを組むことになってのですが糞言語ですね、コレ。
何が糞かっていうと、PowerShell の場合、人が書いたコードは読めるし紐解きやすいけど、VBA/VBS は人によって書き方が全然違うので読み解くのに時間がかかり過ぎる。習得できてないだけですが、変数・オプション・命令の違いも解りにくい。
愚痴なんだけどなんで今更 VBA/VBS しなきゃならんのだ。

VBA

なんでPythonやRubyなんだ?
そっちのほうが面倒だろ。
たかがエクセルごときに…
まずはVBAを極めてからモノ言ってほしいものだ。

Horus

> VBA さVBAしかできない人にとっては、そういう発想になると思います。 

プロからすると

VBAは保守できない言語である。
セル、シート分散とあいまって可読性が著しく低い
負債となる。
つまり、社内で重要なタスクをVBAで実装すると
作成者は、リストラされない。
よって、システム化等を実装する、俗人化を避けるための
投資ができない企業ではなくならない。
ただ、若手に負債を押し付けるな。退職時に破棄しろ。

tk

VBAはあくまでExcelやwordなどのoffice アプリケーションを操作する為の小規模言語であってシステム開発に使われる言語とそもそも畑が違う。それらと比較してどうこう言うのがナンセンスなのでは。エンドユーザーがVBAを重宝するのはそれしかできないからだと主張されていますが、普段の業務がwordやExcelメインのエンドユーザーがrubyやC♯を学習しても業務に役立たないでしょ。逆にITエンジニアからすればVBAを重宝する機会なんてないし、見向きもしないです。何でVBじゃなくてC♯に統一しないんだ!とかいう議論ならわかりますが、そもそもITエンジニにとって重要でないoffice アプリケーションを操る為の小規模言語に過ぎないVBAを捕まえて開発言語の優劣を議論しているのが違和感満載

匿名

日本語変数、日本語関数が使えるなら使うよ
圧倒的な可読性の向上あるから

わお

気持ちは分かる。
でも、vba を色々といじくりまわしてみるとちょっと見方は変わってくるよ。
vba は継承がサポートされていないけど、インターフェイスの定義と実装は出来るようになっている。
なので本格的な OOP も実際出来る。
MVC も出来る。(Webで検索すると標準モジュールを使うとか書いてあるけどそんなことはない。クラスモジュールを使って MVC が出来る)
他のデザインパターンもほとんど実装可能です。(スレッドを使用するものは除く)

vba の一番の問題点は、クソコードを書く人が多いこと。
大抵の vba ソースは標準モジュールとシートモジュールとフォームモジュールとちょっとのクラスモジュールから構成されていて、クソコードで書かれている。
でも、プロが書けばそんなことにはならない。
他の OOP 言語を修めた人が vba でクソコードを書いてしまうのは、vba を良く調べつくしていないから&既存のクソコードに習ってコーディングするからだと思う。
実際のところ Java や C# で OOP をしている人は、vba の OOP を理解さえすればクソコードを書かずに済む。
それを知る手段がネット上にほぼないことから、みんな調べることを途中であきらめているだけ。(ネット上の vba OOP に関する情報はレベルの低いものが殆ど)

匿名

>匿名さん

まあ、ローマ字の変数名とかメソッド名を使われるよりも、日本語で書かれた方がまだましだね^^b

Horus

> わお さん
良い観点だと思ったのでコメントさせて頂きました。私もVBAはかなり書いてきています。なるほど。コードを書く上での技法は適用できるんですね。利点というより、こういう使い方ができるというキャパシティの観点ですね。


非常に参考になるコメントでした。ありがとうございます。

たけるん

VBAが無くなったらとか、残っているのには理由があるとか言ってるやつは後方互換性という言葉を知らない情弱

VBベースより、Pythonとかの最近の言語のほうが、書きやすくて覚えやすい
VBAはもちろん使えるうえで、Python for Applicationみたいな新しい選択肢をMicrosoftにリリースしてほしい
そういう取り組みが、数十年後のExcel環境の向上につながると思います

わお

>たけるんさん
それは違うと思う。pythonがVBAより言語として何が優れているのか言えるのかな?
VBAが今の状態になったのは言語仕様のせいだけじゃないんだな。利用者の平均レベルの低さが直接の原因だよ。
VBAは「手軽さ」が売りだった。誰でも容易に習得できると。
VBAはOOP言語でOOPも出来るけど、ほとんどの使い手はそういった設計もコーディングも出来ない人達。
pythonも同じだよね。pythonはOOP言語とうたっているけど、OOPに関して言えばVBAもpythonも癖の強さは同じレベルだし、利用者もその手軽さゆえか、設計が素人みたいなコードをよく目にするようになった。
最近はpythonもすそ野が広がったためクソコードの量産具合もVBAに追随している感じなんだろうと思う。
MicrosoftがpythonをVBAの代わりとして実装しないのは、VBAカオスがpythonカオスに変わるだけだと分かっているからだよ。
それならVBAのままでいいだろうと。
pythonもVBAのようにこのまま「手軽さ」をメインに勢力を伸ばすと、後々VBAと同じように嫌われる言語になるのは間違いないと思うよ。
手軽な面で魅力的なのは分かるけど、
「やりたいことが動作しました。」
これでOKな素人が増えて我が物顔でpython使えますって言い始めたら終わりだね。
そういうコードを書いてマスターした気になるんじゃなく、ちゃんと設計技術まで勉強しなよって思う。
VBAもpythonもおんなじだよ。
残念だけど同じ道を行くんだろうなって思う。

業界古老

少くともOfficeと同寿命と思いますけどね。
VbsもありますからたぶんWindowsと同寿命でしょう。

こういうものはすぐれているから使われるんじゃない。
バグが枯れたコード資産があるから動作環境が求められ、
動作環境があれば新たなコードも開発され続ける。
時代に応じ改造も適宜必要になる。

だからさ、パラダイムシフトでOfficeやWindowsが使われなくならない限り
存続すると考えられる。

メインフレームは情婦処理産業のパラダイムシフトでほぼ死滅し、
やっとコボルも死滅しかかっている。
もっともそのコボルですら、
メインフレームがなかなか死滅しない金融業界ではしぶとく生き残っているけどね。
金融業界も生き絶えだえだから、多少は死滅が促進されているとは思うけど。

Vbs/VBAもOfficeやWindowsが死滅しない限り存続させざるを得ないと思う。

非IT企業の者

それしか選択肢がないのだからVBAで組むしかない。もしEXCEL Pythonが実装されて、レコーディングの結果がPythonで出力されるのなら、Pythonで組む。
VBAが古くてだめだというIT業界のSEはたまにいるが、それを言っていても何も解決しない。
今のVBAという制約の中で、可動性の高いコードをどうやって書くのか考えたほうが建設的だと思う。

この上なく不幸なテクノロ爺

その意見解るんだけど、一向に、別のものに推移しないですよね。
分かってるかも知れませんが、気付いてるかも知れませんが、敢えて言っておきます。
そういうヒト達は「他の手段を『知らない』」んです。
じゃあ、説明,教示すれば、それに乗り換えてくれるか。否です。何故か。
そういうヒト達は「例え便利でも『他に乗り換えるのが面倒』」と思っているからです。
そんなバカな。そんな訳ないと思うでしょう。否です。
ホント、知らないにも程があります。食わず嫌いも甚だしいです。
アナタの周りに居ませんか、そういった“権力を持つ莫迦”。居ないのなら幸福です。
そのヒト達を、一人たりとも残さず一掃したいものですね。

たけるん

わお
VBAとか後付け仕様だらけで使いずらいのなんかわかるじゃん
どんな言語でも低レベルな奴はいるが、そいつらは言語仕様に影響を与えない
要はより洗練された言語が時代に合わせて登場するんだから、そういうのを使える選択肢を出してほしいだけ
VBAみたいな洗練されていない言語を一生懸命しゃぶりつくしてお疲れ様でーすw

コメントを投稿する