Excelマクロは手軽で便利な半面、だれでも書き換えられたりするもんだから結構困るケースがあったりする。

例えば、こちらがマクロを組んだExcelファイルを配布したあとに、「動かない!」なんて言われて調べてみると他の人がマクロを書き換えてバグってたりとか。大きく変えられたコードだったら違いに気づきやすいんだけど、ちょっとした変更って探すのが本当に大変。

そんなことが結構あったので、マクロはバージョン管理するようにしている。

ざっくりとした内容は、

  1. マクロを組んだExcelファイルを1つのフォルダにまとめる(例: c:\tmp\excel )
  2. 上記のフォルダに新しいExcelファイル(例: マクロExport.xls )を作成
  3. マクロExport.xls のマクロに下記のコードでモジュールを作成
  4. ThisWorkbook シートの Workbook_Open() で、作ったモジュールの ExportModules を実行するようにする
  5. マクロExport.xls を保存した後に、マクロを有効にしながらオープン
  6. c:\tmp\excel に、 エクセルファイル名_code というフォルダができ、その中にマクロなどが出力される
  7. コードが出力されてることを確認したら Git などでバージョン管理サーバーに登録する

ってな感じ。同じフォルダにあるExcelファイルを全部チェックするようにしてるので、管理するExcelがたっぷりあっても大丈夫。

モジュールのコードはこんな感じ。どっかからのパクリを寄せ集めだけど。

バージョン管理まではしなくても差分だけを比較すればいいってことだったら、 比較したいファイルをそれぞれ別の名前にしてコードを吐き出して、Windowsだったら FC コマンドで確認するのがお手軽。

中身が違うファイルだと、こんな感じで3行目が違うよって指摘してくれて、

c:\temp>fc /n C:\temp\あいうえお.txt C:\temp\あいくえお.txt
ファイル C:\TEMP\あいうえお.TXT と C:\TEMP\あいくえお.TXT を比較しています
***** C:\TEMP\あいうえお.TXT
    2:  い
    3:  う
    4:  え
***** C:\TEMP\あいくえお.TXT
    2:  い
    3:  く
    4:  え
*****

同じファイルだと、

c:\temp>fc /n C:\temp\あいうえお.txt "C:\temp\あいうえお - コピー.txt"
ファイル C:\TEMP\あいうえお.TXT と C:\TEMP\あいうえお - コピー.TXT を比較しています
FC: 相違点は検出されませんでした

となる。

お手軽に開発できるマクロだからこそバージョン管理は大事だと個人的には思う。

本当はExcelなんかじゃなくちゃんとしたシステムを作って使わせたほうがいいんだろうけど、Excelほど融通効かせるのってなかなか難しいんだよね。