こんにちは。
セカンドセレクションのOkamizuです。
先ごろ、開発を進めていく中で、ExcelのVBAをGitで管理したいシーンが出てきました。
Excel VBAはVisual Basic Editorというエディターで編集しますが、複数人で開発しようとするとコード差分を一つにする作業で膨大なコストがかかります。
これを解決したい!
結論から申し上げるとExcel VBAをGitで管理すると以下のようなメリットがあります。
- 差分が見やすい
- いつ誰がどんな追加、変更をしたのかが記録に残る
本記事では冒頭の悩みを解決する方法をできるだけわかりやすくご紹介します。
Excel VBAファイルをGit管理するまで手順
- ソースファイルに分解するためのツールを用意
- ソースファイルに分解
- Gitに登録
- ソースファイルを変更して結合
- 変更をGitに登録
前提【実施環境】
環境はWindows10・Excel 2019・GitLabです。
弊社には社内にオンプレのGitLabサービスを構築しているので、ここに予め`vba_test`というプロジェクトを作成して、適当な場所にクローンしておきます。
※以下のように「.git」というフォルダのみを用意します。
加えて以下の2つをインストールしておきます。(Gitに関するツール)
- git for windows :Windowsでgitを扱うために必要です。
- TortoiseGit :gitをツールで扱うことができます。
TortoiseGit本体と言語パック(日本語)を入れておくことをオススメします。
ExcelのVBAをGitで管理【実践編】
ソースファイル分解ツールを用意
ArisawaというVBAライブラリに含まれるvbacというツールを使います。
vbac.wsfというファイルが重要です。(vbacについては作者:いげ太様の記事参照)
お試しExcelVBAファイル(.xlsm)
お試し用Excel VBAファイル(.xlsm)を用意しました。
ボタンを押すと「お試し!」というメッセージを表示するものです。
これをクローンしたフォルダとは別の適当なフォルダに置きます。
ソースファイルに分解する(Decombine)
1.ソースファイルに分解するため、空のbin,srcフォルダを作ります。
2.同じフォルダにvbac.wsfを置きます。
3.Excel VBAファイル(.xlsm)をbinフォルダの中に置きます。
4.コマンドプロンプトでdecombineコマンド実行します
bin,srcがあるフォルダに移動します。
$cd C:\work\ExcelVBA
ソースファイルに分解します。
$cscript //nologo vbac.wsf decombine
※//nologoをつけておくと不要なロゴが出ません。
srcフォルダにお試し.xlsm/Module1.basができました。
Module1.basの中身はこれ。
Attribute VB_Name = "Module1"Sub button_Click()MsgBox "お試し!"End Sub
Gitに登録
これをGitに登録(=コミット)します。
先ほどのbin,srcフォルダ以下すべてとvbac.wsfをクローンした空のリポジトリにコピーします。
TortoriseGitのメニューから「Gitコミット」を実行します。
ファイルにすべてチェックをつけて、メッセージを書いて「コミット」します。
ソースファイルを変更して結合(Combine)
これで初回のGit登録はできたので、ファイルを変更してみます。
お試しボタンを押したときのメッセージを変更します。
Attribute VB_Name = "Module1"Sub button_Click()MsgBox "お試し成功!"End Sub
今度はソースファイルをExcel VBA(.xlsm)ファイルに結合します。
※これをしないとソースファイルの変更がExcel VBA(.xlsm)ファイルに反映されません。
コマンドプロンプト上でリポジトリがあるフォルダ直下でコマンド実行するためにフォルダを移動します。
cd C:\work\Git\vba_test
同じくコマンドプロンプト上でdecombineの反対、combineします。
$cscript //nologo vbac.wsf combine
お試し用Excel VBAファイル(.xlsm)を開き、お試しボタンを押すと「お試し成功!」になりました。
変更をGitに登録
これを先ほどと同じ手順でコミットします。
この変更を「ログ表示」で確認することができます。
ログのなかでも新しい変更のコミットを選択し、変更したファイルをクリックすると差分を確認することができます。
差分を確認するだけなら、ここまででもよいのですが、せっかくなのでGitLabの方にプッシュしてみます。
指定がなければこのまま、OKボタンでプッシュします。
GitLabに登録できました。
GitLabに登録するとWeb上で変更差分が見られてとってもおすすめです。
所感
冒頭の通りのことが実現でき、おおむね満足です。
- 差分が見やすい
- いつ誰がどんな追加、変更をしたのかが記録に残る
加えて、GitLabを使って管理すると残件管理や変更に紐づく課題がさらにわかりやすくなります。
ただし、すべてが大満足状態には到達できていません。私が感じたデメリットを記載しておきます。
- ソースファイルとは別にExcel VBAファイル(.xlsm)を管理しないといけない。
ボタンの文字変更などはソースファイルではできませんでした。- 手順が少し複雑。
複数人で開発するときはきちんと手順(変更を取り込んで、decombineして~等)を決めて実行するのがよさそうです。
大満足ではないですが、ソースファイルの視認性が向上してとても快適でしたので、Excel VBAをお使いの方はぜひご一考いただければ。
遥か昔に書かれたVBA、「なぜ、そうしたのかがわからない!!」と頭を抱えて困る人が少なくなればいいなと思います。
長文読んでいただきありがとうございました!2021年よりSSブログ・SSコラムで情報発信中です。
エンジニアに役立つ内容やセカンドセレクションのご紹介をしています!!!
Node-redの使い方とインストール方法をLinux大好き社長が解説