VBAを今後どのように扱ったら良いか?

VBAはエンドユーザーコンピューティングとして優れたプロダクトだと思っている。ほとんどのユーザーが購入して持っているであろうOfficeアプリケーションさえインストールされていれば開発できる。高価なミドルウェアを購入したり、面倒なコーディングをしなくても標準でレポーティングツールや、データベースだって利用できる。このような言語は中々代替えがないのだが、VBAと離別すべき時も刻一刻と近づいている。

今VBAが置かれている現状を整理したい。

ActiveX Data Object(ADO)

VBAから直接データベースに接続するにはADOぐらいしか選択肢がありません。にもかかわらずADOのサポートは停滞したままで、ADO2.8がリリースされて以降は新たなリリースがありません。機能的にはSQLServer2005で止まっていて、それ以降に追加された型には対応していません。たとえばXML型とかGEOMETRY型を扱うことができません。特にSQL Azureの動作対象リストからはADOやDAOが外されており、別の方法で接続する事を求められます。
唯一幸いなことは、ADOのコンポーネントはOSとともに配布されているので、OSのサポートが終了するまではセキュリティアップデートが提供され続けることです。

ADO以外の方法でデータベースに接続しようとすると、VBA以外の言語でコードを書く必要が出てきます。どんな手段が考えられるでしょうか?

XML WEBサービス

Visual Studio .NETでは容易にXML WEBサービスを作成する事ができます。これをVBAから呼び出す方法が考えられます。
しかし残念なことに無償で使用できるExpress版ではWEBサービスを開発できません。最も安価なVisual Studio 2015 Professionalでも6万円台になります。エンドユーザーコンピューティングを考えたときに6万円超の負担は避けたいところです。Community版があるじゃないかと考えるかもしれませんが、ライセンス的に業務利用は難しいので対象外とします。
もうひとつ問題となるのがXMLパーサー部分です。XML WEBサービスを使用するクライアント用にMicrosoft SOAP Toolkitが配布されています。しかしながら、このコンポーネントは標準ではインストールされていないため「Officeさえインストールされていれば動作する」と言う利点を失います。
Windowsに標準でインストールされているMSXMLをパーサーとして使用する方法もありますが、MSXMLはInternet Explorerのモジュールです。そしてMicrosoft EDGEはMSXMLに対応しないことがアナウンスされています。将来性を考えるとこれも避けたいところです。

根本的な問題はVBAがCOMを基幹技術としているところです。Microsoftの基幹技術は既にとっくに.NETに移行しており、旧技術であるCOMは完全においていかれています。もういっそ、VBAは完全にあきらめて、VB.NET等の他言語で作成するというのはどうでしょうか?

Microsoft Office Interop

Visual Studioで作成したアプリケーションからMicrosoft Office Interopを使用してOfficeアプリケーションを操作する方法があります。幸いなことにOffice InteropはExpressエディションからも使用できるので追加投資も不要です。.Net Frameworkのバージョンを適切に選択すれば、実行ファイルをコピーするだけでも動作することが多く、展開も手軽です。
しかしながらOffice Interopはお世辞にも使いやすいlibraryではありません。単純なCOMのラッパーなのでインスタントの解放はプログラマーの責任で記述する必要があります。実際にコードを書くとインスタンスの生成と解放ばかりになって効率が悪いです。ライブラリが不出来なのが要因でコーディングの難易度が上がるのは、エンドユーザーコンピューティングでは避けたいところです。

Visual Studio Tools for Office(VSTO)

.NETでOfficeのプラグインを作成するために提供されたミドルウェアです。作成したプラグインを動作させるにはインストール作業が必要になるため展開はやや面倒になります。残念なことにVSTOもExpress版では使用できません。

Apps for Office

.NETでOfficeのプラグインを作成するために提供されたミドルウェアです。作成したプラグインを動作させるにはインストール作業が必要になるため展開はやや面倒になります。残念なことにApps for Office もExpress版では使用できません。

ClosedXML

ClosedXMLは Microsoft Open XML Formatのファイルを読み書きできるオープンソースの.NET用のミドルウェアです。Office2007以降ファイル拡張子がXMLXやDOCXに変更され、ファイル仕様が完全に公開されるようになりました。もちろんExpress版からも使えます。
この辺りが現実解では無いでしょうか。VBAを扱っていた経験があるなら、VB.NETに慣れるのもそれ程時間はかからないでしょう。Powersellから呼び出すのも面白いかもしれません。PowersellはWindows7以降に追加された、OSの操作に使用する言語です。Powersellからしか設定できない項目などもあり、Windowsを使う上で覚えておくととても便利です。

Excel REST API

https://channel9.msdn.com/Events/Visual-Studio/Connect-event-2015/315
まだPublic preview段階ですが、OneDriveやOffice365のクラウドストレージに保存したExcelファイルを編集するためのWebAPIです。現在、新しいOffice製品はクラウドストレージとの連携を前提として開発されています。WebAPI経由なら言語は選びませんし、各種のオープンデータとの連携も取りやすくなります。もしかしたらエンドユーザスクリプトの主流になるかもしれまけん。

VSTOやApps for Officeには無償でProfessional相当の機能を使えるCommunity版という選択もあるのですが、商用利用は著しく制限されているため、業務でのエンドユーザーコンピューティングには使いにくいです。私の場合には、ぐるっと回って「C#デスクトップアプリケーション + LINQ for MSSQL + ClosedXML」で組んでいくことにしてみました。

参考:
Roadmap for Apps for Office, VSTO, and VBA(http://blogs.msdn.com/b/vsto/archive/2013/06/18/roadmap-for-apps-for-office-vsto-and-vba.aspx)

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です