VBAソースコードをVBACを使ってGitで差分管理する方法

VBAソースコードをVBACを使ってGitで差分管理する方法

VBAのソースコードをGitで管理する方法

例えば ExcelVBA でちょっとしたマクロを作った場合、ソースコードのバージョン管理ができず、しかたなくファイルをコピーして丸ごとバックアップを取って … などという管理をしている人がいるのではないでしょうか。私がそうです。

いい加減 Git などでソース管理ができないと大変になってきたので方法を調べました。

調べてみると、VBAC というのがあるみたいなので、これの使い方をまとめます。

VBAC

Excelファイル自体がテキストファイルではないので、VBAソースの差分を管理するということができません。VBAのエディターには、VBAのソースコードをファイルにインポート・エクスポートする機能が用意されています。これをコマンドから操作できるようにしたツールが VBAC です。

テキストでVBAソースを管理できるのでこれをGitなどでバージョン管理します。

以下、製作者サイトの引用です。

いげ太の日記: Ariawase v0.6.0 解説(vbac 編)

GitHub – vbaidiot/Ariawase: Ariawase is free library for VBA cowboys.

vbac は、フリーの VBA ライブラリ Ariawase に同梱されるツールで、各種のマクロ有効 Office ファイルから VBA コードをエクスポートしたり、あるいは逆にインポートしたりするためのものです。VBA のソースコードを git などでバージョン管理するために、また Emacs や Vim や Sublime Text あるいはサクラエディタなどの任意のエディタで VBA を編集するために、さらに grep や diff のような外部コマンドとの連携を図るために使用できます。

VBACの環境構築

ExcelVBAを例に、使い方を見ていきます。

動作確認環境

一応以下の環境で動作を確認しました。

  1. Excel 2007 + Windows 10
  2. Excel 2010 + Windows 7

VBACのダウンロード

Releases · vbaidiot/Ariawase · GitHub

GitHubから最新リリースのソースをダウンロードします。解凍したフォルダのなかにある vbac.wsf がソースのインポートエクスポートをしてくれる本体です。

フォルダ構成

作業用のフォルダを作成し、以下のような構成とします。

 work
  ├── bin
  │   └── ...
  ├── src 
  │   └── ... 
  ├── vbac.wsf
  └── .gitignore

binフォルダ

管理するマクロファイル本体を配置します。Book1.xlsmなど。

ExcelVBAの場合は、ワークシートの情報も必要となることがほとんどなので、全ファイルバージョン管理対象としておきましょう。

※VBAのソースコードのみの管理でよければ、バージョン管理対象外とします。

srcフォルダ

VBACによってbinに配置されたマクロから抽出されたVBAソースファイルが保存される場所。ここのファイルをバージョン管理することで、VBAの差分を管理することが可能になります。

VBAのセキュリティ設定

VBACを使うにあたって、VBAのセキュリティ設定が必要になります。

開発タブ -> マクロのセキュリティ から セキュリティ設定の画面を開きます。

マクロの設定 -> VBAプロジェクトオブジェクトモデルへのアクセスを信頼する をチェックします。

これで外部からVBAをインポート・エクスポートすることができるようになります。

VBACの使い方

ここまでで使う準備ができました。では、VBACのコマンドでソースのインポート・エクスポートを試します。適当なマクロファイル(ここでは Book1.xlsm)を用意し、binフォルダに配置してください。

コマンド実行の仕方

vbacのコマンドは次のようにして実行します。//nologoを指定すると余計なロゴが出ずにすっきりします。[コマンド]部分にvbacの任意のコマンドを指定し実行していきます。

cscript //nologo vbac.wsf [コマンド]

ソースのエクスポート

decombine コマンドは、binフォルダ以下のファイルからVBAのソースコードをエクスポートしてくれます。

cscript //nologo vbac.wsf decombine

実行すると次のようにどのファイルを対象にしてどのようなファイルをエクスポートしたかが表示されます。この例だと、Book1.xlsm ファイルを対象に Sheet1.dcm ファイルと Module1.bas ファイルがエクスポートされました。

cscript //nologo vbac.wsf decombine

begin decombine

> Target: Book1.xlsm
- Export: Sheet1.dcm
- Export: Module1.bas

end

エクスポートされたファイルの確認

エクスポートされたファイルは srcフォルダ以下にあります。ファイル名ごとにフォルダわけされています。エクスポートされたファイルはテキストファイルとして読めるので、任意のエディターで閲覧・編集が可能です。

ソースのインポート

combine コマンドは、binフォルダ以下のファイルに対し、srcフォルダ以下のソースコードをインポートしてくれます。

src以下のファイルを適当に修正し、次のコマンドでただしくインポートされるか確認してみましょう。

cscript //nologo vbac.wsf combine

実行すると、エクスポート時と同様に対象ファイルが表示されます。

begin combine

> Target: Book1.xlsm
- Import: Module1.bas
- Import: Sheet1.dcm

end

binフォルダ以下のファイルを確認して、正しくVBAのソースコードがインポートされているか確認しましょう。

※ファイルを開いた状態でインポートはうまくいかないかもしれませんので閉じておきましょう。

git を使った管理手順

手順としては、pull したら combine をし、decombine してから commmit するという流れになります。

以上です。

参考URL

Gitカテゴリの最新記事