Excel Advent Calendar 2014の12/3分の記事です。
インポートとエクスポート
ExcelにはVBA用のIDEが付属しています。
そこそこ良くできているとは思いますが、VBAプロジェクトの規模が大きくなってくるといろいろ大変です。特に、ソースコードのバージョン管理(変更履歴管理)をしたいと思ったときに困ります。
.xlsmファイル (.xlsxファイルのマクロが有効なやつ) 自体はzipアーカイブなのでdiffはとれませんし、zipアーカイブを展開してみても、VBAプロジェクトはバイナリとして含まれていますからやっぱりdiffはとれません。
そんなときのために、Excel VBAにはファイルのエクスポート/インポート機能があります。IDEの「ファイル」メニューを選択するか、またはプロジェクトペインのソースコードを右クリックすると、「ファイルのインポート」「ファイルのエクスポート」というコマンドが表示されます。
えー、これ手でやるのめんどくさい。
vbac
そんな時は、Ariawase というVBAライブラリに同梱されている、vbac というツールを使いましょう。
vbacについては、作者の いげ太 さんが解説エントリーを公開していますので、それを読んでいただくのが一番いいかと思います。
いげ太の日記: Ariawase v0.6.0 解説(vbac 編)
vbac は、フリーの VBA ライブラリ Ariawase に同梱されるツールで、
各種のマクロ有効 Office ファイルから VBA コードをエクスポートしたり、
あるいは逆にインポートしたりするためのものです。
VBA のソースコードを git などでバージョン管理するために、
また Emacs や Vim や Sublime Text あるいはサクラエディタなどの任意のエディタで VBA を編集するために、
さらに grep や diff のような外部コマンドとの連携を図るために使用できます。
vbac.wsf
ファイルが置かれたフォルダに bin
フォルダを作り、その中に .xlsm ファイルを置いておきます。そして、そこで vbac.wsf
を decombine
オプション付きで実行します。
C:\Anywhere\You\Like> cscript vbac.wsf decombine
Microsoft (R) Windows Script Host Version 5.8
Copyright (C) Microsoft Corporation. All rights reserved.
begin decombine
> Target: sample1.xlsm
- Export: UserForm1.frm
- Export: UserForm1.frx
- Export: Module1.bas
end
C:\Anywhere\You\Like> dir src\sample1.xlsm
ドライブ C のボリューム ラベルがありません。
ボリューム シリアル番号は XXXX-XXXX です
C:\Anywhere\You\Like\src\sample1.xlsm のディレクトリ
2014/12/03 10:37 <DIR> .
2014/12/03 10:37 <DIR> ..
2014/12/03 10:37 80 Module1.bas
2014/12/03 10:37 822 UserForm1.frm
2014/12/03 10:37 2,584 UserForm1.frx
3 個のファイル 3,486 バイト
2 個のディレクトリ 59,860,484,096 バイトの空き領域
簡単ですね。
ちなみに、出力されるソースコードの文字コードは当然のようにShift JISです。
vbacGUI
vbac単体でも何の問題もありませんが、GUIが欲しいという場合は、vbacGUI というGUIフロントエンドを使いましょう。
作者の D*isuke YAMAKAWA さんが解説エントリーを公開しています。
vbac のGUIフロントエンドを作りました - ClockAhead 開発Blog
UIの見た目はこんな感じです。
vbacGUIは、vbac以外に、the Platinum Searcher という高速検索ツールを同梱しています。