MENU

Sourcetreeを用いたVBAコードバージョン管理

Sourcetreeと「vbac」を併用することで、MicrosoftOfficeファイルのVBAコード管理を容易に行なえます。

何ができるの?
  • 修正やバックアップによる「ファイル増殖を抑制」
  • 変更、修正によるプログラムコード中の「コメント行増殖を抑制」
  • バージョンごとの変更点の「間違い探しの断絶」
目次

必要なもの

Sourcetree

GitのGUI。紹介記事も参照してください。


vbac(作成いげ太様)

あわせて読みたい
ブログが見つかりません Blogger は Google の無料のブログ公開ツールで、世界中のユーザーとアイデアの共有を簡単に行うことができます。Blogger では、テキスト、写真、動画を個人のブログやチー...

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)
  1. 初回のみSourcetreeでレポジトリを作成
  2. vbacでVBAコードを分離
  3. エディタで編集
  4. vbacでVBAコードを結合し挙動を確認
  5. Sourcetreeでコミット
STEP
フォルダにレポジトリを作成

上記の記事の2-2を参照ください。
この操作により、.gitの隠しフォルダが作成されます。

STEP
「bin」、「src」フォルダを作成

フォルダを作成するだけでokです。

STEP
「vbac.wsf」を入手する
GitHub
GitHub - vbaidiot/ariawase: Ariawase is free library for VBA cowboys. Ariawase is free library for VBA cowboys. Contribute to vbaidiot/ariawase development by creating an account on GitHub.

上記サイトの「Code」→「Download ZIP」をクリック

zipファイルをDownload

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

他のファイルは不要
STEP
「.gitattributes」を作成する

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

新規テキストファイルを作成する
新規テキストにて下の記述をコピペする
*.bas working-tree-encoding=cp932
*.dcm working-tree-encoding=cp932
*.frm working-tree-encoding=cp932

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

これでいいのだ
STEP
「CONVERT.bat」、「EXPORT.bat」を作成する

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
STEP
MicrosoftOfficeファイルを「src」フォルダに入れる

今回はBook1.xlsmを使用します。

Book1.xlsmはこんな感じ
STEP
「EXPORT.bat」を実行する

実行すると質問されるので「y」と入力。

yと入力する

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

標準モジュールがエクスポートされている
Module1.basの中身

Module1.basをテキストエディタで確認すると先程のコードであり、抽出できていることがわかります。
このファイルをテキストエディタで編集することも可能です。その場合はStep2+へ。

STEP
テキストエディタにて編集した場合は「CONVERT.bat」を実行

CONVERT.batの実行により、編集したコードをbin内のBook1.xlsmにインポートします。

STEP
Sourcetreeにてコミットする

VBAコードが抽出できたので、バージョン管理のためにSourcetreeにてコミットすれば完了です。
この際、Book1.xlsmもコミットすることでバックアップにもなります。
差分を調べることはできませんが、ファイルの増殖を抑制できるため自分はフォルダまるごとコミットしています。

コミット直前の状態
STEP
バージョンアップしてみる

よく見ると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となります。

画像に alt 属性が指定されていません。ファイル名: 201111_04_encord_error.png
依存文字使うのやめてね

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ってすごい便利だなぁ😆

シェアしてくださいな
目次
閉じる