VBA(Visual Basic for Applications)はおそらく,マイクロソフトが想定していた以上に,広く使われてしまったのではないだろうか。そのためマイクロソフトは,VBAのベースであるVB(Visual Basic)をVB 6からVB .NETへと大幅バージョンアップをした際にも,“VBA .NET”とはできずに旧態依然の仕様のまま取り残す格好になってしまった。

 VBAはマイクロソフトのオフィス・ソフトが備えているプログラミング言語である。1993年にExcelで初めて搭載された。オフィス・ソフトで手作業で行っていた作業を自動化したり,オフィス・ソフトをフロントエンドとするようなアプリケーションを開発したりカスタマイズしたりするのに使われている。

 VBAはWordやPowerPointなどでも利用できるが,最も多く使われているのはExcelにおいてである。すべてのケースでVBAを使っているわけではないだろうが,Excelを使ってシステムを開発している企業は多い(参考記事「システム開発生産性が最も高い言語」)。これらの資産への配慮が,マイクロソフトにVBAのバージョンアップを留まらせている理由の一つになっているのだろう。最新のExcel 2007はリボン・インタフェースの採用などでExcel 2002/2003と見た目がずいぶん異なる。しかし,VBAのバージョン自体は6であり,基本的にはExcel 2002と同じである。

言語仕様自体は変わっていないのに動かない

 もちろんプログラミング言語は,新しければよいというわけではない。むしろ,過去の資産の継承を考えると,むやみにバージョンアップされるのはかえって迷惑だろう。ただ,VBAの場合,Excelの新版でVBA自体がバージョンアップしていないにもかかわらず,過去にVBAで作ったシステムが使えなくなってしまうことがある。

 理由の一つに,VBAで操作対象となるExcelのオブジェクトが,Excelのバージョンアップに伴って変更されていることがある。最近,以前Excel 2002向けに書かれた雑誌やWebの記事を日経ソフトウエア9月号付録冊子に収録するために,記事の筆者にExcel 2007での動作確認をお願いした。すると,VBAのプログラムをそのまま使えそうなのは半分程度だろうとの回答を頂いた。

 「例えば,Excel 2007ではコマンドバーやアシスタントが廃止された。VBAプログラムでこれらのオブジェクトのメソッドを実行したりプロパティの値を変更したりすると,エラーになる場合,無視される場合,Excel 2002とは違う結果になる場合がある」(記事の著者)。既存資産が多いのでバージョンアップができないのに,新しい環境では既存プログラムの動作が保証されないのだとすると,プログラミング言語としての行き詰り感は否めない。

 VBAのせいだけではないだろうが,Excelで開発したシステムは,メンテナンスが困難だという指摘がある(参考記事「読者10人と考えた『Excelレガシー』再生への道」)。主な理由の一つは,開発した本人以外の人には,どこでどのような処理をしているのかが分かりにくいからだという。

 マイクロソフトはこうした問題点に手をこまぬいているわけではない。VBAをバージョンアップする代わりに,オフィス・ソフトのアプリケーションを開発する環境「VSTO(Visual Studio Tools for Office)」を2003年にリリース。当初は開発ツールVisual Studio(VS)のオプション製品として販売していたが,VS 2008からは付属して提供するようになった。VSTOを使うと,C#あるいはVisual Basicといった.NET系言語を使って,VSのIDE(統合開発環境)でExcelのアプリケーションなどを開発できる。

 とはいえ,正確にはVSTOはVBAの後継というわけではない。マイクロソフトが最新版のVS 2008でVSTOを付属しているのは,企業向けエディション(Professional Edition以上)。組織で多人数が長期にわたって使うシステムはVSTOで構築してほしいということだろう。

 VBAが市場に出た黎明期からVBA解説書を何冊か執筆している著者に話を聞いたところ,書籍が発行された当時「書籍に対する意見などを送ってくれたのは,普段から業務でExcelを使っている事務職の方,そして小規模な企業の方がほとんど」であり,こうした用途ではVBAはまだまだ十分有用に使えると指摘する。例えば,個人や小規模組織が期間限定で使うようなプログラムである。VBAはあまりに便利だったので,本来使うべきではないところにも使われてしまった。それが現在のVBAの行き詰まり感を生んでいるのかもしれない。