-エンジニア版-言語の歴史は人類の歴史。人類はコンピュータを言語で動かすようになった。2018/09/13ExcelやWordに付いているVBAですが、そろそろ別のものに進化した方がいいように思います。初心者でも簡単に始められるという触れ込みですが、書き方がレガシー過ぎるし、機能的にも中途半端でメンテナンス性が低いです。コーディングで制御する仕組みは全部外出しにして、PythonでもRubyでもいいので連携しやすくして欲しいものです。確かにゴチャゴチャやればPythonでもRubyでVBAの代わりはできます。VBAではなく、そっちが標準になってくれると嬉しいです。各言語でリリースされているライブラリを使えば、Excelを活用できる幅も広がります。メンテナンス性の高いコードを書くこともできるようになります。VBAは中途半端です。プログラミング初心者にお勧めの言語として紹介されますが、私はお勧めしません。たしかに、実行する環境が簡単に手に入るし、自動記録機能は便利です。基本的なプログラミングの手法は学べます。書籍やWebで紹介されているサンプルコードでは、日本語で変数名を付けたり、自動生成したコードをコピペなど、質が悪いものも多いです。「手軽に簡単」も良いですが、言い方を変えれば「安易」とも言えます。VBA自体は大して書きやすくもありません。別の言語で書かせた方が実質的な難易度は抑えられるように思います。ExcelやWordを自動化させたいなら、いっそ全部GUIで制御できるようにした方が親切です。VBAは二十年近く何の改善もされないような仕組みで、例えるならIE8みたいなものです。いっても、Excelから強制的にVBAの機能が省かれるという形ではなく、もっと優れた仕組みをリリースすることでVBAが市場から駆逐されて欲しいです。ところ、Excelの安直なVBA(クソコード)ではなく、時代に合わせてアップデートされるものになって欲しいということです。23:32ITエンジニア、職業プログラマーから見てダメなプログラムであっても、目的通りの結果が得られれば十分だよ。プログラムは仕事を進めるための中間生成物でしかないの。プログラム自体は目的じゃない。客はプログラムが欲しいんじゃなくて目的を達成したいの。言語の種類に拘るなんて本末転倒も良いところだ。01:45・・・予想通りのテンプレがいっぱい来たのでまとめて返答します。自分でやった感想を書いているのに「自分でやってみろ」とか「自分でも何かしたら」は、流石に意味不明なので無視します。言語の種類にこだわっているというより、VBAが原始的と指摘しています。効率よく仕事をしたいなら、わざわざVBAを使うよりWeb上のサービスを活用すればいいです。コーディング無しでいろいろなことが実現できます。いう方向に考えをシフトした方が幸せになれると思います。プログラミングをしたい人にすればVBAは陳腐化しています。これから廃れていく流れなので、頑張って習得してもコーディングで食べていけるようにはなれません。コーディングで食べていきたい人は、最初から別の言語を選びましょう。プログラミングをホビー感覚で楽しみたい人には、ゲーム感覚でプログラミングできる「Scratch(スクラッチ)」なんていうのもあります。ドローンを飛ばせたりと、なかなか弄りがいがあります。VBAは今更頑張って覚えるようなものではないです。やって簡単なものが書ければ十分です。それなりに便利なのは分かりますが、何かの決め手にはなりにくいです。時代に合ったものを使いましょう。06:11エクセルのVBAを多用しています。作りたい物は、エクセル様式の印刷物もしくは電子データなので、VBA以外を使用すると手間が増えるだけなのでVBAを使用するのがベストです。やっていることは、GPIB通信で計測器からをデータ取り込むところや、RS232通信で計測器からデータを取り込むところ、他のファイルを開いてデータを取り込むところをVBAで実行させていることが多いです。あと、標準モジュールで関数を作って、エクセルのセル内で使用できるオリジナルの関数を作ったりもしています。計算させるところは、できるだけエクセルのセルの関数で行うようにして、マクロを走らせることなく計算が完了するようにしています(標準モジュールでオリジナルの関数が作成できるところがかなり便利)。重要なのは互換性で、エクセルのバージョンが上がっても、古いコードが動き続けてくれるVBAは本当にありがたいと思っています。新しい言語を知らないので、どの程度容易にコードが書けるのかわからないですが、2000年ごろに書いたコードが動かなくなるような変更はやめていただきたいというのが私の思いです。06:17私も進化や他のものとの統合(と言うより、他の言語で代用)は必要だと思います。vbaでやれない事はないですが、標準ライブラリの機能が中途半端であったり、参考にできる情報(ネットや書籍など)も微妙であることが多いことは否めません。vbaを無くさなくても良いけれど、そういった別の切り口の手法も用意してほしいと考えます。07:26自分でやってみろってのは、自分でVBAを駆逐しろって意味じゃないの?使いにくいかどうかは人によるでしょうが、他の言語を知ってる人からすれば、使いにくいところばっかりなのは事実ですね。VBAで作業効率化してる企業は多いし、これだけ普及してたら安易に改革できないと思うな。いった人たちの苦情まで全部引き受けられる?新しい仕組みとか、言うは易しですよ。そんなこと評論家みたいに語ってないで、あなたが考えて実行したらいいと思います。08:07回答見ましたが何の回答にもなってませんよ。それは置いといて、普通VBA使う状況ってまず社内でうん億円かけたシステムが動いているんだよね。そこでシステムが行き届かなかったり社内の状況が変わったりして人がエクセルで処理する状況が生まれる。システムを修正するとなると項目一つ足すだけでうん百万かかるからさわれない。ここでVBAの登場なんだよ。あなた達安月給でアフタ-フォローすればVBAなんか流行らないよ。08:42この内容が理解できてない時点でその人が既に時代から取り残されているんだと思いますね...VBAが便利だった時代と今とではネットワークやらOSSやらプログラミング言語やらと色々な環境が変化している。さん「昔書いたのものがそのまま動く」はメリットではなく、「新たな可能性を放棄する」とのトレードオフです。「トレードオフ」ということを認識した上でなら、どちらに価値をおくのも良いと思います。さんちゃんとVBAと多言語と比較できるひとからのコメントで嬉しいです。何を言おうと実際にVBAが無くなるのは当分先だと思います。さん何でもExcelだけでやろうとする人の行き着く先がVBAだと思っています。VBAは他の方が力説するように確かに便利です。便利なもたくさんあります。いろいろな選択肢がある中からVBAを選ぶならそれで良いと思います。知らないでVBAを選ぶなら損をしていると思います。あと、機密情報をExcelで処理してる時点で流出するリスクが高いです。そこにコストを惜しむ会社であれば、将来はあまり望めません。さん発想が「言うならやれよ。使ってやってるんだからな。」なので、あなたと価値観が一致することは無いでしょう。内容を見ても典型的なクレーマーです。否定したいという気持ち以外、何も伝わってきません。今度からは、「通りすがり」ではなく、コメントを付けずに「通り過ぎて」頂ければ嬉しいです。さんご指摘のとおり、内容を理解できずに錯乱してコメントを付ける人がけっこう見られますね。変化すること、イコールデメリットと考えている人にしてみれば、確かに内容を理解するのは難しいでしょう。言語云々のコメントが付くかと思ったのですが、意外と少なかったです。12:55VBAが他の言語に大きく劣るのは多くの人が感じていると思います。それはプログラミングに関わる職業からの視点に過ぎません。普通の人からすれば手軽にExcelで何かを実装できるというのは非常に魅力的です。(少なくとも私はVBA以上に簡単に開発環境を用意でき、Excelとの強力な連携ができ、またマクロ記憶のようにコードを書かずにプログラムを作れる他の言語を知りません。)プログラミングと殆ど縁がない人にとっては現在のVBAで十分に強力なツールであり、だからこそ変わらず生き残っているのだと思います。13:20アプリケーションに付属の言語なんてのは、まぁだいたいそんなもんです。中にはAutoCADに内臓のLispの様にすごいものもあって、それまでの専門的な分野のCADを駆逐して、AutoCADに塗り替えてしまいました。WordやExcelにはそんな事ができるような、本質的な構造的改革をお願いしたいですね。現在の仕組みは、ややお子様向けすぎるかもしれません。13:59駆逐あるいは上書きしようとするなら定量比較して新しいものがより優れていると数字で証明しないといけません。新しいから無条件で優れているなどと思考停止するどこぞのコラムニストのようにはなってほしくないものですね。15:03想定しているユーザが違うのだと思います。basicは初心者向けの言語で他言語に比べ敷居が低いです。「手軽に簡単」なのが良いのだと思います。仕組みが古いことは悪いことだけではありませんしバージョンが上がっても互換性を保証してくれているので過去の資産が長く使えます。一般の企業にとってこれは大事な事です。15:18ちょこちょこ変わる方が最悪。PGなんて目的あってのものなんだし、目的なんてそうそう変わるもんじゃないし。それにメンテナンス性は書く人のセンスによるところも大きい。今みたいにいろんな言語があるほうが最悪。PGなんて簡単に越したことない。企業が新製品を出し続けないと生きていけないから出し続けているように、言語も誰かの生活のために作られているようにしか思えない。さんでも、もっとお手軽で便利なのを見つけたら絶対にVBAを捨てると思います。いちいちコーディングしなければいけないので、普通の人から見ても劣ると思います。最近では、GUIでチャキチャキできるツールも多々あります。知名度が低いだけです。さんご指摘のとおり、単なる付属品なんですよね。クリティカルな用途で使用できるような設計になっていないです。凄いものを作るより、連携を目指した方が現実的です。さん数字って出せばロジカルだと思ってないですか?そんな薄い理屈では、某コラムニストさんにコテンパンに論破されますよ。さん残念ですが、ヒント以前に問題を出していないです。さんこれは考え方だと思いますが、過去の資産が使えることはご指摘の通りメリットです。裏をとれば、技術的な新陳代謝をしていません。変化に直面したときの対応力が落ちます。どちらを取るかはトレードオフかと思います。さん半分同意で半分は違うかな思います。いろいろな言語があるのは、それぞれに用途があるからです。ご指摘のとおり、PGは目的あってのものだと思います。今の時代はいろんな要件がこれでもかというくらいに発生します。企業が新製品を作るのはご指摘の通りかもしれませんが、既存にブチ切れた人や、上手い具合にいったというノリで新しいものを作る人もいます。16:54コメントを読んでいて、一つ一つ返答するのも面倒くさくなってきたので、前もって「そういう人」用にテンプレートを作成しておきます。(既存に固執する人向け)--古い資産が使い回せるというのはご指摘のようにメリットです。変化に弱くなるというデメリットもあります。どちらを取るかはトレードオフです。それぞれの立場と状況で判断すればいいと思います。古い資産に固執するタイプの人はエンジニアには向かないです。--いろいろとやった上での感想を書いています。私が何を言おうとMicorosoftの方針は変わりません。その妙な上から目線が気にくわないので、今後、コメントを控えて頂くと助かります。--目的を達成することはご指摘の通り大事です。ExcelやWordに固執しなくても、たくさんの便利なものがあります。コーディングすらせずに便利に使えるものもあります。VBAもいいですが、目的に合ったツールを使用することが大事かと思います。17:43新しものを貪欲に取り入れることは悪いことではありませんが、生き残っているものには必ず理由があります。Horusさんのコラムやコメントからは自動でコーディングの代わりをしてくれるものを高く評価しているように感じますが、マクロ記憶などは正にその機能そのものであり、一般的な人が簡単な効率化目的で使うには十分に強力な性能を持っています。いった面をすべて考慮した上でVBAはクソなので駆逐されるべきだと考えているのでしょうか?もしそうだとすれば現実世界に存在する殆どのものが駆逐対象になりそうに思います。ちなみにエンジニアに大切なことは、無重力でも使えるボールペンを開発することではなく、鉛筆の存在を忘れないことだと私は思っています。マクロ記憶などは正にその機能そのものでありこれ、GUIでやって欲しいんだよね。使う方もそっちの方が楽だろう。コーディングしたい人は他言語でやってくれと。現実世界に存在する殆どのものが駆逐対象になりそうに思います。今の技術が百年後に通じるとは思えない。例えるならVBAは鉛筆じゃない。砂に絵をかくただの棒だ。CやC++でそれを言うなら分かるが、根底となる技術としての素養は無い。22:05後に同じ名前で投稿してる奴は俺じゃない。いうの非常に迷惑だね。以下は筆者にいうけど、やってもみないで、あれは変わらないとか決めつけてるね。自分がやりやすいようになって欲しいだけだろ?VBAはこうだと決めつけて完全否定して、レスに矛盾ありすぎじゃないかな。そんな記事を投稿しといて気に食わないコメントに一つ一つぶった切って何が楽しいのか理解できないし、これをやってあなたは何を得ようとしてるわけ?暇潰し?これ以上相手にするのもあほらしいからこれ以上みないけど。これからも精々頑張ってね。新しものを貪欲に取り入れることは悪いことではありませんが、生き残っているものには必ず理由があります。EXCELの4.0,5.0マクロとかですか?あれがいまだに残っていること自体処理の自動化がたやすく負債として残る。誰もメンテナンス出来ない代物になる典型だと思いますが。VBAは登場した当初はそれなりにプログラミング言語としてまともな制御構文を持ち、階層化されたオブジェクトに対してアクセス出来るという点では進歩だったと思います。現状拡張性やモジュールの再利用性などの点では見劣りしますし、マイクロソフトもVBAの改善については放棄しているように感じます。迷走するのはやめて新たな方向性を示して欲しいです。豆知識程度に覚えておきます。さん個人的に同意です。00:30なんか、コメントのVBAとGOTO文を入れ替えても通じる。00:54前回匿名で書き込み、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が楽だと思います。さんおおかたそんな感じでしょうか。一つ、私が思うのはVBAでガリガリ実装している機能が、実はExcelの標準機能でできた。いう事例をたくさん見てきたからです。ExcelのVBAが書けるからと、何でもそれでやろうとする非プロな人はたまに見ます。無重力でも使えるボールペンを開発することではなく、鉛筆の存在を忘れないことだと私は思っています。VBAを使えば何でもできるではなく、適切なツールを使うことが大事だと思います。22:22確かにVBAってなんだか古くて...classがあるのに継承できなくて「これって構造体...?」と驚いた覚えがあります。VBAしか実装できる環境がなくて勉強したのですが、すごく困惑しました。最近のプログラミングを勉強しているほど戸惑いますよね。それでも、milkteaさんもおっしゃる通り色々便利に使えるので捨てがたいのですよね...私も使ってますし...。Excelがすごいです。根本的にExcelに出力したいニーズが高いのでしょうね。前にOfficeでPythonを使えるようにしようかというmicrosoftの人の意見があったのでしばらくしたらPythonで今のVBAみたいなことできるんじゃないかなあ、と個人的には期待しています。00:17>無重力でも使えるボールペンを開発することではなく、鉛筆の存在を忘れないことだと私は思っています。このネタ自体が極めて信憑性に欠ける都市伝説の類なんですが、それは置いておいても本来このジョークには1.NASAの開発は無駄な努力だったというアメリカを皮肉ったもの。2.宇宙空間で鉛筆を使うと折れた芯や粉が精密機器に紛れ込み、ショートなどを起して誤作動の原因になりかねない。目先の安さに気をとられ、こういった小さな配慮を怠ったがためにロシアは宇宙開発競争で敗れた。いう二つの解釈があります。『鉛筆の存在を忘れない』で終わってしまったら完全にアウトですね。そもそも無重力の宇宙船内で、導電体である黒鉛の粉末をまき散らす鉛筆を使用するのは極めてリスキーな行為なので、無重力でも使えるボールペンを開発する方が正解です。実際現在は、NASAもロシアも鉛筆の使用を止めてボールペン使ってます。開発コストは0(メーカーが自主的に開発したものをNASAが普通に購入した)だったそうですが。物事はちゃんと調べてから書きましょう。ないとコラム全体の信頼性に関わりますよ。さん結局のところ、VBAはOfficeのオマケ機能です。一応、私も存分に活用しています。コメントを見ていて思うのが、どうも使いこなせていない人ほどVBAに執着する傾向があるようです。個人的な経験ですが、VBAを使いこなしている人ほど、その限界を熟知しているようです。匿名Lそこは問題ありません。信頼とか以前に、コラムの内容そっちのけでコメント欄でボールペンと鉛筆の話で白熱する人は読者としてカウントしていません。ジョークの解説、お疲れ様でした。01:01>ジョークの解説、お疲れ様でした。して一つずつでも正しい知識を広めていけるというのはとても幸せなことです。貴方を啓蒙できたのは私の誇りであり喜びでもあります。これからもお互い、常にあらゆることを学び続けるという姿勢を失わないようにしたいものですね。10:32ずいぶん前の記事なので読まれないと思いますが。VBAは簡易ツールという認識なので、普通のプログラマが触るものでは無いです。VBAはユーザー向け、プログラマ向けには常に最新の言語の対応をしてもらえたらうれしいですね。別のモノに進化させるのはデベロッパで,VBA使ってるのはユーザですよね.まず、私にはこの前提がありません。実際、ユーザがVBAで場当たり的に対応している事例もたくさんあります。いう区別はしていません。ユーザは便利なものがあってもサクッと移行しません。ユーザが選ぶのは便利さより安心なものか無難なものというのが実情だと思います。前提になる条件が私とんーさんではこれだけ違っています。「コイツ、何を前提にそれを言ってるのか?」という視点で読んでみると、また違った感想がでてくると思います。Officeでも事足りてしまうんですよね。VBAやマクロも使えますし。Officeにこだわる理由は大して無いです。コラムを書いて分かったことは、世の中にはVBA大好きでしょうが無い人がいるのと、私はそういう人とはそりが合わないなということ。VBAの否定はするが、そういう人の考え方まで否定する気はありません。考え方の多様性とだけ認識しておこうと思います。16:09基本的に賛否あるでしょうが、優秀なのはVBAではなくてExcelそのもので、そのExcelを自動で動かす方法がVBAだから使われてるって話でしょうね。代替Excelもあることはあるけど、全ての面で完璧にExcelを再現できてるソフトは見たことがない。簡単な関数のみで表計算がやりたいだけなら足りるけど。それとVBAが使いづらいのは間違いない。少なくともマイクロソフトの言語で置き換えるならC#とかにした方がいいでしょうし、そこはマイクロソフトもわかってるかと思いますが。10:43投稿内容は基本的に異論はないのですが、よくわからないところで質問があります。あと、私の認識があってるのかも確認できればとおもいます。私はVBAユーザーです。ITエンジニアではありません。VBAでエクセルの操作やOSの操作などを自動化しています。事務員がやっている日常作業の自動化ですね。ExcelやWordに付いているVBAですが、そろそろ別のものに進化した方がいいように思います。→1コーディングをVBAではなくPythonなどに変えるという意味でしょうか。次の文では「全部外出しにして」とあるので、2Excelにはコーディングの機能を持たせないで外部から制御ということでしょうか。そのどちらかでも実現してくれたらいい。プログラミング初心者にお勧めの言語として紹介されますが、私はお勧めしません。→まず多くのVBAユーザーは「プログラミングを学びたい→まずは初心者にお勧めのVBAを勉強しよう」という考えはないと思います。間隔ですが、VBAユーザーの9割はプログラミングを学びたいからスタートしていないと思います。よってコーディングがPythonであれば、それを覚えるまでだと思います。初めからそうしておいてくれというのが投稿者様の意見の一つかなと思ってます。たしかに、実行する環境が簡単に手に入るし、自動記録機能は便利これがVBAユーザーにとって最大のメリットだと思っています。上記1の場合であれば、覚える内容がVBAでなくPythonになるだけです。2の場合はExcelがあれば使えるというものではなくPythonを記述・実行する環境が別途必要ですよね?(専門でないので違ったらすみません)パッケージ化されているというのは最大のメリットであり、今すぐ何もしなくても(VBEを開く作業はありますが)使用できるというのが使用する一番の理由だと思います。言語がVBAだからという理由ではありません。「昔はwindowsに無料のIEが入っていたため一般ユーザーはなにも考えずIEを使っていた」のと同じだと思います。IEがよいとか悪いとかという話はそこにはないですね。これらは同じ考えであるという認識です。以下の例えは共感されるかわかりませんが私の感覚です。私は純日本人ですが、日本語は世の中に不要となっています。好き嫌いはおいといて、英語や中国語などある程度普及している言語で統一すべきと思っています。(以下、とりあえず英語として話進めます)・英語を勉強している人はたくさんいますが、それを覚える時間が省ける・日本国民全員が英語圏で仕事や生活をするときの言語の壁がなくなる・外国人旅行者が日本にきたときの不便さが解消される(一方、日本固有の言語等に魅力に感じる人は減る)・学術的にはわかりませんが日本語はレガシー(ファジー)と感じる・日本語は美しいとか趣があるという人がいるが、外国語にもそれぞれあると思う。ただの日本ひいきだと思う。今からすべてを英語に変えるのは現実的に不可能。国民の反感もくらい、膨大なパワーやお金が必要、また浸透するまで100年くらいの代謝時間がかかりそう。アメリカに敗戦したときに、日本の公用語を英語にしてくれればよかったのにと思いました。投稿者様にとってのVBAは日本語かもしれません。日本語逝ってくれと思ってますから。途中でExcel以外の代替ソフトの話もみましたが、個人的にはGoogleスプレッドシートが一番優秀と思っています。GASでほぼ同じことやそれ以上のことができますし。Googleスプレッドシートが認められず、エクセルが指定されている企業も多くあります。これについては元の投稿内容と別の話になってくるのでここでは不要と考えます。さん私の思うのは、VBAしか書けない状態であれこれ考えても、何らか利益の得られる結果は得られません。何かできるようになってからこのコラムを読み直すことをお勧めします。私が何を答えようと、VBA以外で何かをやって「すごい」と感じた感覚は伝わらないです。VBAを使えるレベルのスキルがあれば読み解けます。同じ勉強量で、VBA以上のことができれば、私が返答するより納得がいくと思います。15:50VBAのコード、あるいは言語仕様は確かに、使いにくい。冗長で面倒くさいコーディングだ。おまけに、VBAのエディタ(コーディングエディタ?)のインデント幅が、勝手にバラバラになり、そこも不満。++や--がないのは、まあ良い。