生産性向上が叫ばれる時代ですが、お手軽な手段としてExcelマクロによる業務自動化というケースがあるかと思います。
Excelマクロは自動記録して再生する程度であればよいのですが、多くのケースで記録したコード(VBA)の編集を伴うことが多いです。
編集する際に残念なのが、Excelのコード編集機能の弱さ!10年以上進化がないと言っても過言ではないと思います。
そこでこの記事では、現在のコード編集の主流であるVisual Studio Code (以下VS Code)をコード編集時のエディタとして使用しつつ、
Excel単独ではできないgit等による構成管理まで行うことを目標に簡単な手順を紹介します。
ネット上での先人たちの記事を参考にしつつも、私はこの手順で VS Code によるコード編集を行っています。未だに無くならないExcelマクロによる業務改善においても現代風なコード開発ができるようになる…と信じています。
Excelマクロによる業務改善は現役
日本の会社ではMicrosoft Officeが各PCにインストールされていますよね。入っていないPCというのはあまり見たことがないと思います。多くの会社はExcelのファイルによる業務を行っていて、人間系(手作業)での入力・更新を行っているケースが多数派でしょう。一部はマクロを用いて自動化を進めているケースが見受けられると思います。
中にはセキュリティの関係からマクロ使用禁止という会社も多いかもしれません。
一方、Excelマクロのエディタは旧態依然のまま
Excelのマクロは自動記録したものをそのまま使用することも多いかと思いますが、改善を求めて記録されたコードの編集またはマクロそのものを直接編集することがあります。
マクロプログラム(Visual Basic for Applications 以下VBA)を編集する場合は、Excelに付属しているエディタを使うことになりますが機能が残念なことにここ数年進化が見られません。
目標:VSCodeをエディタとし使用し、同時に構成管理を行う
Excelマクロの実行・デバッグはExcelでしか実行できないためそこは仕方がないにしても、残りのコード編集+構成管理(バージョン管理)を別の仕組みとしてできないか?
ここ数年のエディタのトレンドであるVSCodeと構成管理のトレンドであるgitを使ったExcelマクロ開発を行う、これを今回の目標として構築+開発の流れを抑えたいと思います。
ToBe:目指すExcelマクロ開発の大きな流れ
簡単な流れは以下になります。
1.vbac.wsfを用いて、Excelマクロのソース部分を外部出力
↓
2.(このタイミングでgitリポジトリ作成を推奨)
↓
3.Visual Studio Code でExcelマクロのソース部分を編集
↓
4.vbac.wsfを用いて、編集したExcelマクロのソースをExcelファイルに反映
↓
5.Excelでデバッグ・テスト
↓
6.編集したソースとソースが反映されたExcelマクロをコミット
↓
必要に応じて3に戻る
準備作業
必要なツール類は以下になります。
任意項目については無くても開発はできますが、あったほうが無難です。
gitクライアントはSourceTreeでなくてもお好みのものでOKです。
あ、Windows前提で書いてます。Macの場合はこの手順ではできません(vbacが対応していない)。
- (必須)vbac.wsf
- (必須)Microsoft Excel
- (必須)Visual Studio Code
- (任意)VSCode VBA
- (任意)vba-snippets
- (任意)vscode-vba-icons
- (任意)SourceTree ※Gitも同時にインストール
vbacの用意とExcelマクロファイルの準備
任意のフォルダにvbac.wsfを格納し、「bin」フォルダを作成。binフォルダにExcelマクロファイルを格納します。
vbac.wsfは「いげ太の日記」様がGithubに公開されているものをダウンロード下さい。
Excel設定変更
vbac.wsfが動作するためにExcelの設定変更を行う必要があります。Excelのオプションからセキュリティ関連の設定を変更します。
下記画面はOffice365のExcelの例。Excelのオプションから「トラストセンター」→「トラストセンターの設定」をクリックします。
トラストセンターの「マクロの設定」を選択し、開発者向けのマクロの設定から「VBAプロジェクト オブジェクトモデルへのアクセスを信頼する」にチェックし、OKボタンをクリックします。
VSCodeで編集、構成管理を行うためにvbacでソースファイルを外部出力
vbac.wsfをコマンドプロンプトで実行します。
cdコマンドで作業フォルダに移動し、vbac.wsfのコマンドを実行します。
cd 準備作業1で作成したフォルダ
cscript vbac.wsf decombine
上記コマンドを実行すると、作業フォルダの配下に「src」-「Excelファイル名のフォルダ」が作成され、Excelファイル名のフォルダの中にExcelマクロのソースファイルが出力されているはずです。
このタイミングで必要に応じて、git等のローカルリポジトリを作成し構成管理を開始しましょう。
(追記)VSCodeのコンソール機能からvbacを呼び出す
VSCodeの統合ターミナルからでも、vbac.wsfのコマンドを実行することができます。
VSCodeのエクスプローラーから、vbac.wsfを入れたフォルダを選択し右クリック。「統合ターミナルで開く」を選択します。
(Windowsの場合)VSCodeの中のウインドウにWindows PowerShellが起動されるので、下記コマンドを実行します。
cscript vbac.wsf decombine
同じようにsrcフォルダが生成され、EXCELマクロのソースファイルが出力されます。
VSCodeの拡張機能を追加
VSCode をインストールしていない場合は、インストールしましょう。
素のVSCode のままでもExcelマクロの編集は可能ですが、単なるテキストエディタと変わりないです。そこでScott Spence様が公開されているVSCode拡張機能を追加したほうが楽になります。
拡張機能の検索で「VBA」と検索し、下記3つの機能を追加してください。
- VSCode VBA
- vba-snippets
- vscode-vba-icons
最後にマクロソースファイルの関連付けを行います。VBA機能拡張を行うことで、拡張子basやclsなどは自動的に関連付けられますが、シートに記録されているコード…拡張子.dcmについては関連付けができていない状態になっています。
そこで、VSCodeの設定を変更します。ファイル→基本設定→設定→テキストエディター→ファイル→Associations→setting.jsonで編集 をクリックすると「setting.json」の設定ファイルが開きます。この状態で以下のコードを下の画面のように追加してください。
"files.associations": {
"*.dcm":"vba",
}
これでExcelマクロをVSCodeで開発する準備が整いました。
開発作業
コード開発の手順については、各チーム(各個人)ごとの運用ルールがあるかと思います。この記事では「コードを修正」→「Excelマクロに反映」→「デバッグ」→「問題なければGitにコミット」、という流れで記載します。適宜ご自身のルールに置き換えるなり参考にしてください。
VSCodeでソースファイルを編集
準備作業で出力したソースファイルをVSCodeで編集します。Visual Studioのインテリセンスほどの機能はありませんが、追加拡張した機能である程度の支援機能が動きつつコーディングできると思います。
ポイントは、編集が終わったら絶対に忘れずに保存すること!絶対にです。
vbacでソースファイルをExcelに取込
VSCode で編集したソースをExcelマクロに戻します。準備作業で行ったExcelマクロからのソース出力とほぼ同じ手順です。
vbac.wsfをコマンドプロンプトで実行します。
cdコマンドで作業フォルダに移動し、vbac.wsfのコマンドを実行します。
cd 準備作業1で作成したフォルダ
cscript vbac.wsf decombinecscript vbac.wsf combine
(追記)VSCodeのコンソール機能からExcelに取込
ソース出力と同様に、VSCodeからもExcelマクロへの戻し作業が可能です。
作業フォルダで統合ターミナルを開き、下記コマンドを実行します。
cscript vbac.wsf combine
コマンドプロンプトに比べ、VSCodeで完結、かつ、PowerShellの機能でコマンドの履歴を覚えているので、こちらのほうが生産性は高い印象です。
(コメントいただいた「通りすがり」様。ありがとうございました。)
Excelでデバッグ
ソースを反映したらExcelマクロを開きデバッグしてみましょう。Alt+F11キーでExcelのVBAエディタが開くのでソースが反映されていることを確認してからデバッグ作業を行ってください。
デバッグ作業が終わったらExcelは必ず閉じるようにしましょう。開いたままでvbacによるソース取込は動かないようです。
編集したソースとソースを反映したマクロをgit管理(commit)
デバッグを行い、問題なくマクロが動作したら、Excelマクロと修正したソースのコミットを行います。
準備作業で作成したフォルダでローカルにリポジトリを作成されている場合は、ソースについては編集した分の差分が表示されているはず。
Excelマクロとソースを合わせてコミットしておきましょう。
旧態依然のExcelマクロ開発でもなんとかなる
日本の会社の現場ではExcelマクロまだまだ現役です。中小企業ならなおさらですよね。生産性向上の一環として旧態依然のExcelマクロ開発案件が増えるもモチベーションあがらない、というケースが多いんじゃないかって思ってたんです。実際私もそうでした。
コードの大規模化+複数人の開発となった場合、標準のExcelマクロのエディタでは編集機能が弱い+構成管理もできない、という管理面での苦しみから逃れられない状況でした。
この状況をなんとかしなきゃ…ということで、マクロソースファイルの外だし+VSCode等の外部エディタ編集+git等の構成管理、という手を採用しました。VSCodeは習熟できていない+拡張機能の改善に期待という課題はありますが「コードの大規模化+複数人の開発」という状態への対処としては有効な一手だったと思います。
コメント
便利そうですね!使わせていただきます。
下記、恐らく誤記と思われます。
<vbacでソースファイルをExcelに取込>
cscript vbac.wsf decombine ではなく、
cscript vbac.wsf combine でしょうか?
VSCodeでターミナルを起動できますので、自分はコマンドプロンプトを立ち上げずに上記コマンドをそのまま打ち込んでいます。(cdも不要なので)
ご指摘ありがとうございます。
その通りです。修正させていただきます。
(小さいですがコマンドプロンプトの画面はご指摘の内容でした)
> VSCodeでターミナルを起動できますので、自分はコマンドプロンプトを立ち上げずに
> 上記コマンドをそのまま打ち込んでいます。(cdも不要なので)
ありがとうございます。
VSCodeからのターミナル起動がよくわからなかったので昔ながらの方法でやりましたが、
そちらのほうが便利そうですね。
追記させていただきます。
[…] vbacでエクセルVBAのソースコードをGitバージョン管理する方法エクセルVBAのソースコードをコマンドラインでインポート、エクスポートができるvbacというツールの使い方を紹介します。これでエクセルVBAのGitバージョン管理が格段にパワーアップします。tonari-it.com Excelマクロ(VBA)をVSCodeで編集したいVisual Studio CodeをExcelマクロ編集時のエ… […]
本当に参考になりました。ありがとうございました。
ただ、取り込み後に文字化けが頻発しましたので、
私はshiftjisに固定しました。どうぞご参考ください。
{
“workbench.iconTheme”: “vscode-vba-icons”,
“files.associations”: {
“*.dcm”: “vba”
},
“git.ignoreMissingGitWarning”: true,
“files.encoding”: “shiftjis”
}
ご参考になったようでよかったです。
> ただ、取り込み後に文字化けが頻発しましたので、
> 私はshiftjisに固定しました。どうぞご参考ください。
ご連絡ありがとうございます。確かに文字化けしてしまいますね。
VBAはShift-JISなので文字コードの変更方法も案内すべきでした。
ご指摘ありがとうございます。
追記させていただきます。
とても参考になりました。
ひとつ質問させてください。
VSCode で編集するときに、VBEで出来ていたコレクションからのプロパティ、メソッドの補完入力できないのですが、VSCodeで自動補完はできないのでしょうか。
よろしくお願いいたします。
ご参考いただきありがとうございます。
おそらくプロパティやメソッドの補完はできないと思います…。
VBA拡張機能でどこまで対応されているか?だと思うのですが、
個人の開発ですし、あまり期待できないと個人的には思っています。
VBEと比べてその点については劣っている状況ではないでしょうか。
[…] Excelマクロ(VBA)をVSCodeで編集したい […]