Sourcetreeと「vbac」を併用することで、MicrosoftOfficeファイルのVBAコード管理を容易に行なえます。
- 修正やバックアップによる「ファイル増殖を抑制」
- 変更、修正によるプログラムコード中の「コメント行増殖を抑制」
- バージョンごとの変更点の「間違い探しの断絶」
必要なもの
GitのGUI。紹介記事も参照してください。
vbac(作成いげ太様)
http://igeta-diary.blogspot.com/2014/03/what-is-vbac.htmlより引用
vbac は、フリーの VBA ライブラリ Ariawase に同梱されるツールで、各種のマクロ有効 Office ファイルから VBA コードをエクスポートしたり、あるいは逆にインポートしたりするためのものです。VBA のソースコードを git などでバージョン管理するために、また Emacs や Vim や Sublime Text あるいはサクラエディタなどの任意のエディタで VBA を編集するために、さらに grep や diff のような外部コマンドとの連携を図るために使用できます。
引用にある通り、VBAコードのインポート、コンバートを一括して行う用途にて使用します。
準備
以下の手順に従い、バージョン管理を行うフォルダを以下の様にします。
()内の数字は手順の番号に対応しています。
バージョン管理するフォルダ
│ vbac.wsf (3) │ .gitattribus(4) │ CONVERT.bat (5) │ EXPORT.bat (5) ├─.git
(1) ├─bin
(2) └─src
(2)
- 初回のみSourcetreeでレポジトリを作成
- vbacでVBAコードを分離
- エディタで編集
- vbacでVBAコードを結合し挙動を確認
- Sourcetreeでコミット
上記の記事の2-2を参照ください。
この操作により、.git
の隠しフォルダが作成されます。
フォルダを作成するだけでokです。
上記サイトの「Code」→「Download ZIP」をクリック

Zipファイルを解凍してお目当ての「vba.wsf」を入手する。残りのファイルは消してOK。

このファイルを作成しないとSourcetreeにて文字化けが生じます。詳細はTipsを御覧ください。


*.bas working-tree-encoding=cp932
*.dcm working-tree-encoding=cp932
*.frm working-tree-encoding=cp932
新規テキストファイル作成→以下をコピペ→名前を「.gitattributes」に変更
拡張子だけのファイルは違和感ありますが、こういうものなので気にしないでOK。

batファイルのクリックでVBAコードの結合、解除を行えるようにします。詳細はTipsを御覧ください。
新規テキストファイル作成→以下をコピペ→名前を「CONVERT.bat」に変更
@echo off
SET /P selected="VBAコードを結合しますか?(Y/N)?"
if /i {%selected%}=={y} (goto :yes)
if /i {%selected%}=={yes} (goto :yes)
exit
:yes
pushd %0\..
cscript vbac.wsf combine
exit
新規テキストファイル作成→以下をコピペ→名前を「EXPORT.bat」に変更
@echo off
@echo off
SET /P selected="VBAコードをエクスポートしますか?(Y/N)?"
if /i {%selected%}=={y} (goto :yes)
if /i {%selected%}=={yes} (goto :yes)
exit
:yes
pushd %0\..
cscript vbac.wsf decombine
exit
使用方法
バージョン管理するフォルダ
│ vbac.wsf │ .gitattribus │ CONVERT.bat(2+) │ EXPORT.bat(2) ├─.git
├─bin
│ Book1.xlsm(1) └─src
今回はBook1.xlsmを使用します。

Book1.xlsm
はこんな感じ実行すると質問されるので「y」と入力。

するとsrc
にBook1.xlsm
、その中にModule1.bas
が作成されます。


Module1.bas
の中身Module1.basをテキストエディタで確認すると先程のコードであり、抽出できていることがわかります。
このファイルをテキストエディタで編集することも可能です。その場合はStep2+へ。
CONVERT.batの実行により、編集したコードをbin内のBook1.xlsm
にインポートします。
VBAコードが抽出できたので、バージョン管理のためにSourcetreeにてコミットすれば完了です。
この際、Book1.xlsmもコミットすることでバックアップにもなります。
差分を調べることはできませんが、ファイルの増殖を抑制できるため自分はフォルダまるごとコミットしています。

よく見るとSourcetreeのスペル間違ってますね…。ということで修正しました。

コードの修正箇所、及びコミット時のコメントがあるのでどこを修正したのかすぐに把握することができます。
Tips
Sourcetreeの文字化け回避
- Sourcetreeが文字化けするんだけど!
-
2バイト文字で文字化けが生じるようですので、エンコードを指定してあげる必要があります。
具体的には以下通りです。
レポジトリのフォルダに「.gitattributes」を作成し、下記を記述すればOK。
記述方式は 『*.「文字化けする拡張子」working-tree-encoding=cp932』
*.bas working-tree-encoding=cp932 *.dcm working-tree-encoding=cp932 *.frm working-tree-encoding=cp932
これにより文字化けが治ります。
文字化け 治った
読めるようになった
因みにcp932ではなく「sjis」とすると①みたいな「依存文字でエンコードエラーを吐く」のでNGとなります。依存文字使うのやめてね
vbacのコマンド打つのが面倒
- コマンドを打つのがめんどくさいんだけど!
-
batファイルにて実行させる。
こんな感じにして 結合用コード
@echo off SET /P selected="VBAコードを結合しますか?(Y/N)?" if /i {%selected%}=={y} (goto :yes) if /i {%selected%}=={yes} (goto :yes) exit :yes pushd %0\.. cscript vbac.wsf combine exit
分離用コード
@echo off @echo off SET /P selected="VBAコードをエクスポートしますか?(Y/N)?" if /i {%selected%}=={y} (goto :yes) if /i {%selected%}=={yes} (goto :yes) exit :yes pushd %0\.. cscript vbac.wsf decombine exit
終わりに
Sourcetreeだけでは行えなかったVBAコードのバージョン管理が可能となりました。
VBAの痒いところをボリボリできるgitってすごい便利だなぁ😆