2012年11月15日木曜日

VBAのソースコードを保守し易くするためのツール vbac

【目次】

  • まえがき
  • vbac の入手方法
  • vbac の使い方
  • vbac の仕様・注意点
  • 余談1
  • 余談2

【まえがき】

Microsoft Office製品で利用可能なVBAのコードは、ExcelやWordなどのバイナリファイルに内包される形で保存されます。このために、いわゆるバージョン管理システムでは適切に管理することができず、メンテナンス性が悪いという問題があります。
 また、バイナリファイルに内包されるために、コードの確認や微修正などの細々した作業のためにも、WordやExcelを立ち上げ、VBEを開く手間がかかります。小規模にVBAコードを書いている分には困らないのですが、コード量が増えてきた場合(*1)や、複数人に配布したものを保守する場合などにおいては、お世辞にも使い勝手が良いとは言えません。

(*1)個人的な感覚ですが、1ファイルに含まれる総コード量が2,3千行を越えると、どうにも保守面倒にってくる気がします

 この問題に対する解決策として、古くはVBAコードを用いて、バイナリファイルに含まれるVBAコードをエクスポート/インポートする方法が知られています(*2)。この方法であれば、バージョン管理システムを併用することで、コード量が増えてきた場合にも比較的楽に対応できるようになります。
  しかしながら、この方法はExcelやWordの起動が前提にあり、複数人に配布したものを保守する場合の作業性は改善されません。

(*2)参考: Excel ソースコードの管理 関するまとめ- ClockAhead 記憶の欠片

 これらの問題に対する最適解の1つとしては、スタンドアロンで、バイナリファイルからVBAコードのエクスポート/インポートが可能なプログラムが考えられます。
 このようなプログラムとしては、2012年11月現在、@igeta(*3)が開発されている vbac (vbac is not VBA compiler)があります。vbacは、それ単体で完結したスタンドアロンのプログラムであることに加え、Excel/Word/Accessのいずれにも対応しており、同種のツールの中ではダントツで完成度が高いように思います。以下では、このvbac を紹介したいと思います。

(*3) 日本国内におけるMicrosoft F# MVP であるとともに、VBAで精力的にコードを書かれている(らしい)方。VBAに限らずコーディング能力がハンパない(気がする)にも関わらず、TwitterではVBAのことを常につぶやき続けていて、ちょっとな雰囲気。

【vbac の入手方法】

  1. GitHub における igeta氏の ariawase プロジェクトを開く
    URLがvbaidiot/Ariawase https://github.com/vbaidiot/Ariawaseに変更されています。(2015追記)
  2. 画面上部 の 「 ↓ ZIP 」 ボタンをクリック
  3. ダウンロードしたファイルを解凍する

【vbac の使い方】

最初にすべきこと

  1. Excel, Word などの設定で、「VBA プロジェクト オブジェクト モデルへのアクセスを信頼する」という項目にチェックを入れる
  2. vbac.wsf と同階層に、「bin」 という名前のフォルダを作成
  3. vbac.wsf と同階層に、下記コードを、debuild.bat という名前で保存 (任意)

バイナリファイルからVBAコードをエクスポートする場合

  1. binフォルダに、バイナリファイルを配置
  2. debuild.batファイルを実行
    (→ src フォルダ内にVBAコードがエクスポートされる。
     例: test.xls に含まれるVBAコードは、src/test.xls/ にエクスポートされる)

VBAコードをバイナリファイルにインポートする場合

  1. srcフォルダ下のバイナリファイル名のフォルダ内に、VBAコードを配置
    (例: test.xls にインポートしたいVBAコードは、src/test.xls/ に配置)
  2. 標準添付のbuild.batを実行
    (→ binフォルダ内のバイナリファイルのVBAコードがクリアされた後、srcフォルダ内のVBAコードがインポートされる。)

【vbac の仕様・注意点】

  • 「VBA プロジェクト オブジェクト モデルへのアクセスを信頼する」へのチェックは必須
    • 大事なことなので2回言いました
  • パスワードがかかっている場合や、Excelで「共有」になっている場合など、VBAコードへのアクセスが制限されている場合には何も起きません。
  • Excel, Word, Accessに対応
    • 2007以降のOpenXML形式のファイルもOK
    • 具体的には、拡張子 xls, xlsm, xla, xlam, xlt, xltm, doc, dot, docm, dotm, mdb, accdbのファイルに対応
  • Excel, Word, Accessを内部で呼び出しているので、vbacを実行するためには、それらがインストールされている必要があります
  • JScript としての実装であり、また内部ではCOMを使っているので、対応するOSはWindowsのみ、だと思います
  • ライセンスは、同梱の LICENSE.txt を読みましょう
    • 自己責任で勝手に使っちゃって系

【余談1】

src/ariawaseフォルダ内のクラスファイルも超絶便利なので、積極的に利用したらいいと思うよ!

【余談2】

いげ太の日記: VBA を一括エクスポート/インポートする Tsukeawsase というツールを作った で公開されている Tukeawase がvbacの原型と思われます。
当該記事では、Tukeawase作成の動機や使い方についてigeta氏ご本人が解説されています。基本的にvbacと同様のため、vbacを使う上で参考になると思います。

【追記 (2014/6/12)】

Ariawase の最新のリポジトリは以下に移動しております。
また、現在は、最新版のvbac及び付随するライブラリに関して、作者のigeta氏自身による解説がありますので、ご参照ください。