目次
バッチファイルとGetObjFmXlsmでExcelのVBAコードを抽出しよう
この記事では、指定フォルダ配下のVBAコードを含むExcel マクロファイル *.xlsm ファイルから
- ExportVBAcodeFromXlsm.bat
- GetObjFmXlsm.exe
というバッチファイルとユーティリティプログラムを利用して、VBAコードを抽出する方法について紹介します。
これらのツールを用いてVBAコードを抽出することで、Excelファイル内のマクロやスクリプトの内容をテキスト形式で取得できるほか、Subversion のクライアント TortoiseSVN と連携し、VBAの差分管理ができるようになります。
利用方法
このバッチファイル、vbsコードを
- %USERPROFILE%\Tools\bat\ExportVBAcodeFromXlsm.bat
- %USERPROFILE%\Tools\exe\GetObjFmXlsm.exe
配下に配置し、またこの ExportVBAcodeFromXlsm.bat のコピーを例えば以下のようなターゲットファイル
比較.xlsm
と同じフォルダ配下に配置して、このバッチファイルを起動すると
そのフォルダ配下に、標準モジュール、クラスモジュール、Sheetモジュール、ThisWorkbookモジュールを含めた全てのモジュールに含まれたVBAコードが抽出され
次のようにモジュール名.bas という名前でSJIS(Shift JIS)文字コードで保存されます。
ExportVBAcodeFromXlsm.bat のコピーをターゲットとなるVBAコードを含む*.xlsmと同じフォルダ配下に配置するのは、このバッチファイルのダブルクリックでファイル名を指定せずにVBAコードを抽出する利便性を確保するためです。
ここでサンプル表示している 比較.xlsm というマクロファイルは知り合いから入手した練習用のVBAコードなので、その内容にあまり意味はありません。
また、
- 同一フォルダ内に含まれている複数 xlsm ファイル中に同一モジュール名が含まれていると、先に抽出された bas ファイルに上書きされる
- ツール起動後直ぐに実行が開始されるような xlsm ファイル、すなわち ThisWorkbook モジュール内に Wookbook_Open() が含まれている場合、これを Wookbook_Open_() 等に名称変更して自動起動しないようにしないと、正常にVBAコード抽出できない
ので注意が必要です。
解決できること
これらのツールと Subversion クライアント TortoiseSVN を利用すると
- VBA の含まれた .xlsm ファイルの VBAコードに修正をかける
- ExportVBAcodeFromXlsm.bat を起動し、VBAコードを抽出する
- TortoiseSVN で上記の修正に対する差分を抽出する
- 上記の差分も含めた全てをTortoiseSVN を使ってリポジトリにコミットする
といった一連の作業によリ、VBAの差分管理ができるようになります。
そしてこのSubversion が Redmine と連携していれば、さらに問題(チケット)管理と修正したVBAの紐づけができるようになり、個人、チームでのVBA開発の変更の可視化、維持管理に計り知れないメリットを提供します。
例えばここでサンプルとして紹介している 比較.xlsm の Module1 内のVBAコードの 20-21行目をコメントアウトして保存後、この ExportVBAcodeFromXlsm.bat を実行すると TortoiseSVNの機能により変更のあったファイルのアイコンが赤い!に変わります。
さらに、TortoiseSVN でModule1.bas の差分比較すると以下のように20-21行目でピンポイントで修正前後のVBAコードが見えるようになります。
凄くないですか?
読んでほしい方
- Excel VBA等を使った業務効率化に取り組まれている方
- Subversion を使った開発リソースの差分管理を実施中、もしくは検討されている方
- Excel VBA マクロの維持管理の継承性を考慮している方、または苦労されている方
ExportVBAcodeFromXlsm.bat の紹介
保存場所
本記事ではこのバッチファイルを以下の記事も参考にしながら
- %USERPROFILE%\Tools\bat\ExportVBAcodeFromXlsm.bat
に保存し、そのコピーをVBAコードを抽出したい .xlsm ファイルが格納されているフォルダに保存します。%USERPROFILE% については必要に応じて以下の記事も参照ください。
詳細
このバッチファイル ExportVBAcodeFromXlsm.bat は、Excelマクロ有効ブック(.xlsmファイル)内のVBAコードをエクスポートするためのバッチファイルで、カレントディレクトリ内のすべての.xlsmファイルに対し、そのファイル名をパラメータとして GetObjFmXlsm.exe をパラメータ /v 付きで呼び出します。
@echo off
setlocal
%USERPROFILE%\Tools\exe\GetObjFmXlsm.exe /h
taskkill /f /im EXCEL.EXE >nul 2>&1
for %%f in (*.xlsm) do (
%USERPROFILE%\Tools\exe\GetObjFmXlsm.exe /v "%%~ff"
)
pause
endlocal
ExportVBAcodeFromXlsm.batの簡単な説明
行番号 | 説明 |
---|---|
1 | このバッチファイルで echo コマンド を除いた以後の実行コマンドそのもの、あるいはその実行結果を以下のようにコマンドプロンプト上に表示しないように指定 |
2 | 一時的な環境変数を作成し、スクリプト内での変更を限定します。 |
4 | GetObjFmXlsm の評価版/有償版識別のためのヘルプ情報を出力します。 |
6 | 現在実行中の EXCEL.EXEという名前のプロセスを念のため強制終了します。エラーメッセージは表示せず、結果を無視します。 |
8-10 | カレントディレクトリ内のすべての.xlsmファイルをパラメータとして %USERPROFILE%\Tools\exe\GetObjFmXlsm.exe /v つまりVBA抽出機能を繰り返し呼び出します。 |
12 | GetObjFmXlsm の評価版/有償版識別のためのヘルプ情報を確実に参照できるよう、ここでいったんポーズします。必要に応じて削除してください。 |
13 | setlocalで作成した一時的な環境変数を破棄し、元の状態に戻します。 |
GetObjFmXlsm.exe の紹介
保存場所
バッチファイルと同様に
- %USERPROFILE%\Tools\exe\GetObjFmXlsm.exe
に保存します。
入手方法
この GetObjFmXlsm.exeファイル はしらかば堂が開発したユーティリティプログラムで以下の2種類のインストーラを準備しており、インストーラを使って上記のフォルダに GetObjFmXlsm.exe として保存可能です。
まず無償の評価版でその動作、効果を体感して頂き、気に入って頂けた方は有償版の購入をご検討くださいね。
評価版 | 有償版 | ||
---|---|---|---|
説明 | インストーラ入手先 | ||
価格 | 無償 | 2,000円 | |
利用可能期間 | 1カ月 | 無制限 | |
機能 | ヘルプ(注1) | 〇 | 〇 |
.xlsm からの .bas 抽出(注2) | 〇 | 〇 | |
.xlsx または .xlsm からの .pq 抽出(注3) | 〇 | 〇 |
(注1) ヘルプ … この GetObjFmXlsmコマンドで利用可能なコマンドスイッチ、使い方を表示します。
(注2) .xlsmからの .bas 抽出 … 例えば Sample.xlsmの中に VBA コードを含む標準モジュール、クラスモジュール、Sheetモジュール、ThisWorkbookモジュールが定義されているとき、/v スイッチを使用してこれらのモジュールからVBAコードを モジュール名.bas として抽出します。
(注3) .xlsx または .xlsm からの .pq 抽出 … 例えば Sample.xlsxの中にPowerQuery のM言語によるクエリ定義が存在する場合、/m スイッチを使用してこれらのクエリをクエリ名.pq として抽出します。
起動スイッチ
Windows 10 のコマンドプロンプト配下でこの GetObjFmXlsm.exe のヘルプ機能を実行すると以下のようになります。
>GetObjFmXlsm /h ... このヘルプを出力します
>GetObjFmXlsm /v sample.xlsm ... sample.xlsm ファイルからVBAコードを抽出し、モジュール名.bas を出力します
>GetObjFmXlsm /m sample.[xlsx|xlsm] ... sample.xlsx または sample.xlsm ファイル内からM言語を抽出し、クエリ名.pq を出力します
>
まとめ
この記事では、指定フォルダ配下のVBAコードを含むExcel マクロファイル *.xlsm ファイルから
- ExportVBAcodeFromXlsm.bat
- GetObjFmXlsm.exe
というバッチファイルとユーティリティプログラムを利用して、VBAコードを抽出する方法について紹介しました。
これらのツールを用いてVBAコードを抽出することで、Excelファイル内のマクロやスクリプトの内容をテキスト形式で取得できるほか、Subversion のクライアント TortoiseSVN と連携することで、VBAの差分管理ができるようになります。
この記事が少しでも皆さんのお役に立てれば幸いです。
こんにちわ。しらかば堂です。
この記事が少しでも皆さんのお役に立てれば幸いです。