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

窮地を覆すためのVBA

»

さんざんVBAをDisってきましたが、本当にDisろうと思うなら対象の長所も短所も熟知する必要があるかと思います。そいういうことで、前回とは逆の立場の内容でコラムを書いてみます。どんなツールも単なる「そのツールが好き」では動いてくれませんし、役に立てようもありません。長所と短所を見極めたうえで使うことで、活きた使い方ができるのではないでしょうか。

まず、VBAの最大の利点といえばExcelやWordとの密接な連携です。プログラミングを即、業務に役立てたいと思うのであれば、これ以上のソリューションは無いでしょう。同じExcelを動かすにしても、PythonやRubyで動かすよりも、はるかに簡単に動かすことができます。大規模な仕組みを作るのであればVBAは向きません。ただ、ちょっとしたツールを作る用途であれば、便利に使うことができます。

VBAをお勧めするとすれば、プログラマの初学者ではなく、むしろ現役のビジネスマンにお勧めしたいです。ビジネスマンがやりたいのは、プログラムではなく問題解決です。MS Officeがインストールされていれば即、VBAを使うことができますし、その場限りのものであれば、マクロの記録を活用するのもありかと思います。Excelの機能を駆使しても届かなかった「痒い一歩」を補えるのがVBAです。

また、書籍での情報も充実しており、習得している人も多いです。他のプログラミング言語にくらべると、かなり簡単に習得できます。ただ、VBAの仕組みは古いので、プログラミングを習得してプロになりたい人にはお勧めしません。また、多くの仕組みを組み込むには仕組み的に限界があります。無理やりVBAで実装しようとすると、かえって複雑でメンテナンスが難しいものになってしまします。

そういう間違いをしないために、信頼のおける書籍を買って学習することをお勧めします。私のおすすめする本は、「たった1秒で仕事が片づく Excel自動化の教科書」です。VBAは仕組みだけ覚えてもうまく使いこなせません。どう動かしていくか方針を書いた本を参考にすると学習がダイレクトに業務に活かせるようになります。また、基本的なExcelの機能を押さえたうえで学習すると、さらに効果が高まります。併せて「たった1日で即戦力になるExcelの教科書」をお勧めします。同じ著者が書かれた本です。

ブレない情報をもとに学習していく。これがVBAを最短で習得して業務に役立てる秘訣です。

Comment(15)

コメント

読者

某氏との論争においてはどちらの味方の立場でもありませんが、
Horus氏の主張に賛成します。


結局はエンドユーザーと運用管理との立場の違いで、
「目的が達成できれば手段は問わない」立場のエンドユーザーと、
「バラまかれたうんこの掃除をするのは最後は情シス」という立場の運用管理側では、そもそも相容れないのだと思いました。


けっしてHorusさんもVBAの効果について否定はしていないと思います。
ただ、現実として、「今は効果が得られるけれども」「将来、誰がメンテナンスを引き継いで、運用していくのか」
という問題が全くVBA派閥には論じられていないと感じました。
(引き継ぎでちゃんとすればいいじゃん!というのもありますが、皆がVBAができるわけではなく、理解できない引き継ぎ先が出てきた時点で、そのVBAは陳腐化しますし。)
未来永劫、その会社でメンテナンスしつづけるつもりなんでしょうかね‥。
新しい言語では、お砂糖構文や記述も簡潔になってきていて、
メンテナンス性が向上してきています。
VBAがメンテナンスが簡単なのか難しいのは
「個人の力量」にかなり左右されます。
エンドユーザーならなおさらでしょう。
(新しい言語も属人化しないのか、や個人の力量次第じゃないのか、と言われそうですが、
それはプロダクトレベルでIT奴隷達がサポートするので個人の問題ではない)


企業の利益というものを考えたとき、属人化してしまいがちな
VBAでは耐えきれない、というのが実際ではないでしょうか。

abekkan

HorusさんはVBAが死ぬほど嫌いなのだと思っていました。今までの数々のコラムから。
このコラムで書かれたように思っていたとは意外でした。


「VBAをお勧めするとすれば、プログラマの初学者ではなく、むしろ現役のビジネスマンにお勧めしたいです。」
「プログラミングを習得してプロになりたい人にはお勧めしません。」


これらについては私も同意見です。プロを目指す人は他のプログラミング言語を習得すべきです。
VBAはプロのプログラマ向けのものではなく、IT業界意外の会社の人でも、ちょこっと使って表のデータを修正することができる、のが利点だと思っています。


このコラムでHorusさんがVBAを感情的に嫌っているのではないことがやっと分かりました。

Horus

> 読者 さん
コメントありがとうございます。ユーザとエンジニアの激突論ですが、他の方もコメントに書かれていました。題材として面白いので、コラムに書いて月曜日にアップします。


リーベルGさんがこの「VBA」ネタで小説書いて欲しいなんて意見もありましたが、私も読んでみたい気がします。

残念だな

こうしてofficeロックイン

Horus

> abekkan さん
売った覚えのない喧嘩を架空取引されていましたが、コメントに凡な感想かかれても反応に困ります。まさか「このコラムでHorusさんがVBAを感情的に嫌っているのではないことがやっと分かりました。」が謝罪だとは言わないでしょうね。分かったからどうなんでしょうか。


「コラムを書く資格はありません。」まで断言しているのです。コラムニストなら、分かった先の話をちゃんとコラムにして、ぶちまけた読者を納得させてください。どういうポリシーでVBAを教えているとか、好き嫌いという浅い観点ではない深い考察等、ネタは何等かお持ちかと思います。


「コラムを書く資格はありません。」と初志を貫くなり、技術で真っ向から勝負でも、ご自由なスタイルで構いません。ご自身の名誉はご自身のコラムで回復させてください。

Horus

> 残念だな
こういう方がいるので、単に「好き・嫌い」でなく多角的な視点でコラムを書かないと対応できなくなります。書く側としてはうっとおしい限りですが、こういう方がいるからこそ、多角的な視点というのが鍛えられるのかもしれません。


タイムリーな好例になったので、今日のところはコメントに感謝しておきます。

Horus

・・・流石に度し難い。


キレた判断基準がFacebookの何通かのメッセージ。コラムを読まずに内容を理解せずにブチ切れて喧嘩を売った挙句、意気揚々と書いたコラムでAnubisさんに


「自分の生徒さんのコードを「クソコード」と断定して、極めつけのオチが「おウンチコード」。これは流石に生徒さんに失礼だ。致命的に酷い。」


とTwitterで指摘されてる。「全国のVBAユーザに喧嘩を売っている」と指摘しておいて、自分の生徒に喧嘩売ってどうするんだ。これは一つ突き抜けた高度なギャグセンスなのだろうか。ここまでやられると、私も正常心を保つのがしんどくなる。

MB

ちょっとしたツールと大規模な仕組みとの境界はありますか。
多くの仕組みを組み込むには仕組み的に限界とは具体的にどのような限界があるのですか。

ゆう

Horus氏の意見に同意する者ですが、
abekkan氏のコラムも拝読して、
事務で給料をもらっている人にとって
自分の作業を比較的容易に自動化できる
EXCEL VBAは最適な道具とおっしゃりたいのだと思います。


確かに、そういう人にとって、
Visual StudioやEclipseを環境設定して言語を組む時間的余裕があれば
一つでも事務を片付けたいでしょう。


感情的な問題もあるであろうHorus氏はともかく、
第三者が令和版staticおじさんとは言い過ぎではないでしょうか。


ちなみに私はもう縁は切れましたが、
EXCEL VBAで業務システムを作るような職場にいました。
100%のStatic(VBA)おじさんだった上司の命令でしたが、
EXCELという脆弱なプラットフォームんにとても苦労しさせられました。
普通の言語なら簡単にできる並列処理をEXCEL VBAでどう実現するか悩む
といったバカげたことも経験しました。

Horus

> MB さん
私がこのコラムで書いた範囲でいえば、使用する人数が基準です。
理由は、Excelがそういう作りのソフトではないからです。同時編集したときの担保が取れない。
あと、機能が実現できたとしても使い勝手が実現できないかもしれません。

Horus

> ゆう さん
ご指摘の件については私もカッとなって言い過ぎた分もあるので、お詫びも込めて、コメントから削除しておきます。


某氏の意見に関しては同意も否定もしません。コラムの内容を読む限り、目的は自分の教室の宣伝じゃないかと思います。それ自体は何ら問題は無いと考えています。私の目的は情報発信です。目的が違うので、今は比較対象ではないという見解です。


ただ、私には忖度する理由も無いので、某氏に不利な現実でも、容赦無しに書いてしまうこともあるかもしれません。エンジニアライフ自体そういう場所なので、そういう対処は人に文句を言わずに某氏自身で解消すべき問題となるでしょう。


ご指摘に関しては、某氏もコメントで「同意できる」と言った上で私の考え方をコラムで踏襲してます。(言葉まで踏襲するのはお客さんに配慮が無いと思った)


ただ、マジでVBAおじさん(もちろん某氏のことではないです)は勘弁して欲しいですよね。そもそも、VBAで並列処理というのは、とてつもなく重そうです。

ゆう

一読者としても、コラムニストが営業目的でコラムをなさるのは問題と感じません。
コラムがきっかけでお仕事をいただいたと広言しているフリーランスのエンジニアの方も他に何人もいらっしゃいますし。


VBAおじさんはほんとに厄介ですね。
わたしの知っていたVBAおじさんの場合とら、後のメンテナンスを考えずどんどんツールを生み出していき、その尻拭いに苦労
させられました。
あの手の人はドキュメンテーションも軽視または時間の無駄(そんなの見るよりコードを開いて直接見たほうが早いだろ!)と平気で言うんですよね。


個人的にはVBAは自分個人で使うツールの開発に限定すべきと考えます。

Horus

> ゆう さん
守銭奴のコラムニスト(嘘つけ人格者じゃないかと言いたい)さんも、堂々とリンクを張ってご自分の開催している講座の宣伝をしています。むしろ、そういう用途に活用してくれる方が活気づくのではないかと思います。


何かVBA大好きな人だと思われるのも嫌ですが、手法についてもコメントが多くついていますね。そういうニーズがあるみたいなので、近いうちにコラムにしてみたいと思います。

ゆう

>そういうニーズがあるみたいなので、近いうちにコラムにしてみたいと思います。
楽しみに待っています。
問題なのはVBAという言語でなく、
VBAを使う側に長所、短所を見極めずに安易に使う人が、
少数とは思うのですがいるので、
そういった人のためにも
使ったほうがよいシーン、ダメなシーンも触れていただけるとありがたいです。

Horus

> ゆう さん
ただ、雰囲気的にVBAは食傷気味なので、角度を変えて書くかと思います。

コメントを投稿する