はじめに

私は元々プログラマーですが現在は単なる事務職です。
事務職ではよくあることですがExcelを使って様々なデータ処理を行っています。
業務としては単純な繰り返し作業が多くつまらないものです。

プログラマーという人種はこういうのが一番嫌いなのです。
プログラマーという人種は例え手作業でやれば20分で終わるようなことでも、プログラムを作ってやろうとします。例えプログラム作成に一時間かかろうとも。
でも仕事だから仕方ありません。

上記は極論であって、手作業で10時間かかることも、プログラムでやれば数分で終わるものも珍しくありません。
プログラム作成に1時間かかっても充分元が取れますし、その数分はPCが勝手にやっているのでサボってコーヒーでも飲んでいてもその仕事は終わります(いや、私は他の仕事をやっていますよ)。

なによりものメリットはケアレスミスが発生しない、ということです。
単純作業の繰り返しというものは人間ならばケアレスミスがどうしても起きてしまうものなのです。
プログラムでやれば、プログラム上の処理ミスさえ撲滅しておけば間違いは起こりません。
結果の間違い探しもプログラムで行ったり、人間によるチェックもざっとやっておけば充分です。

しかしこの事務職になるまではExcelはもとかくVisual Basicは見たくもありませんでした。
なぜならVisual Basicというのは他のプログラム言語と比べれば著しく“醜い”のです(英語でいえばugryでしょうか)。

しかしそれでもVisual Basicを使おうと思ったのは定型・単純作業があまりに多くその苦痛感のほうがきつくなったからです。
会社には様々なITシステムがあるのですが、「通り一辺倒のデータ入力をして通り一辺倒のデータ蓄積」をするだけで“新しい課題への対応”ができない、要するに応用力が皆無なのです。
「Excelデータ出力」はかろうじてあるが、せめてもの救いなのですが、そのデータから解析をしなければなりません。(悪く言えばそのあとは社員に投げているだけなんですね。)
周囲や前任者を見ているとみんな手作業、良くてセルに関数を組み込んで処理をしています。
これはプログラマーとしては我慢ならなかったというのが実情なのです。

この記事はそんな中でVisualBasic for Applicationを使うにあたっての、自分なりのまとめと考察です。

題目ではExcelと書いていますが、あまりExcelに偏らず、コンピュータ言語と捉えております。

VBAと略されますが、ApplicationのためのVisual BASICという意味です。
ApplicationというのはExcelだったり、WordやAccess等のことを指しています。
VBAというとExcelで語られることが多いのですが、AccessでVBAは重要ですし、Wordでも使うと便利なことが多くあります。
いわゆるOfficeスイートなので、OutlookやPowerPointやPublisherでもVBAは利用できます。

実際、私はOutlookでもVBAを使ってメールの新着お知らせポップアップを作ったり、システムからくる警告メールを解析するためにタイトルやメール本文などからも情報を抜き出して自動処理させたりもしています(メールの振り分け時に連携することもできます)。

VBAを使った相互連携ができるのも便利です。
例えばWordからExcelブックで作った住所録を開いてデータを引き出し、差し込み印刷をする、みたいなこともできます。

Officeアプリの持つ各機能をプログラムで動かせる、機能拡張したように見せる、様々な作業を自動化できる等のメリットは非常に大きいということは確かです。

これがVBAを習得する目的であると考えるのが妥当でしょう。

「最近プログラムが学校教育にも導入されるわけだし、勉強するか」といっていわゆる「プログラミングのお勉強」としてVBAを学ぶというのは全くオススメはしません。

今の世の中、はるかに良い言語はいくらでもあります。

2010年代に入りWeb全盛となった現在では、JavaScript、PHP、Perl、Ruby、Pythonあたりがメジャーどころでしょうか。
昔はコンピュータ言語というものはシステム(コンピュータ)に付属するものか、高額で購入するものでした。
ところが今は上記のものがタダで入手できます。
VBEという劣悪なプログラミング環境ではなく、とても良い統合環境が無料でも入手できます。

VBAは前身が古いこともありますがコンピュータ言語として見ると時代遅れな部分が余りに多いのです。
例えばJavaScriptも醜いとは言われますが、醜い部分を取り除いて(無視して)一部の良いところだけを使っても近代言語として十分なものを持っていると思います。
その観点でもVBAはあまりに言語として基本的に貧弱で不足なのです。

“for Application”ではないVBがあり、それは言語仕様として発展しており、まだマシなのですが、VBAはそれよりもバージョンが大分低く言語的に明らかに劣っています。

「美しいプログラム」「保守性の高いプログラム」を作るのが困難なレベルであり習得や活用を妨げるレベルの問題がありますので、その辺は覚悟をする必要があります。

特に問題なのは変数のスコープであり、制御構造の稚拙さです。
正規表現を言語として対応していなかったり、ハッシュ変数がないのも厳しい場面が多々あります。
WindowsやOfficeがオブジェクトの塊である一方で、それを扱うVBAではオブジェクト指向面で言語として不十分なのはあまりに問題がありますが、現実として諦めるしかないのです。

-