Excelマクロ(VBA)をVSCodeで編集したい

VBA

生産性向上が叫ばれる時代ですが、お手軽な手段として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に付属しているエディタを使うことになりますが機能が残念なことにここ数年進化が見られません。

残念なExcelのVBAエディタ

目標: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に公開されているものをダウンロード下さい。

binにExcelマクロファイルを格納しておく
Ariawase v0.6.0 解説(vbac 編)
まずはこいつから。ライブラリ本体には興味ないけどこいつは要る、という話もあるとかないとか。 Ariawase is free library for VBA cowboys. vbac は、フリーの VBA ライブラリ Ariawase に同梱されるツールで、各種のマクロ有効 O...
vbaidiot/ariawase
Ariawase is free library for VBA cowboys. Contribute to vbaidiot/ariawase development by creating an account on GitHub.

Excel設定変更

vbac.wsfが動作するためにExcelの設定変更を行う必要があります。Excelのオプションからセキュリティ関連の設定を変更します。
下記画面はOffice365のExcelの例。Excelのオプションから「トラストセンター」→「トラストセンターの設定」をクリックします。

上記はOffice365の場合、Excel2016では「セキュリティセンター」のはず。

トラストセンターの「マクロの設定」を選択し、開発者向けのマクロの設定から「VBAプロジェクト オブジェクトモデルへのアクセスを信頼する」にチェックし、OKボタンをクリックします。

VSCodeで編集、構成管理を行うためにvbacでソースファイルを外部出力

vbac.wsfをコマンドプロンプトで実行します。
cdコマンドで作業フォルダに移動し、vbac.wsfのコマンドを実行します。

cd 準備作業1で作成したフォルダ
cscript vbac.wsf decombine

上記コマンドを実行すると、作業フォルダの配下に「src」-「Excelファイル名のフォルダ」が作成され、Excelファイル名のフォルダの中にExcelマクロのソースファイルが出力されているはずです。

このタイミングで必要に応じて、git等のローカルリポジトリを作成し構成管理を開始しましょう。

VSCodeの拡張機能を追加

VSCode をインストールしていない場合は、インストールしましょう。
素のVSCode のままでもExcelマクロの編集は可能ですが、単なるテキストエディタと変わりないです。そこでScott Spence様が公開されているVSCode拡張機能を追加したほうが楽になります。
拡張機能の検索で「VBA」と検索し、下記3つの機能を追加してください。

  • VSCode VBA
  • vba-snippets
  • vscode-vba-icons
Visual Studio Code – コード エディター | Microsoft Azure
ほぼすべての言語に対応し、任意の OS で動作する強力なコード エディター、Visual Studio Code を使用して、Azure で編集、デバッグ、デプロイを行います。
VSCode VBA - Visual Studio Marketplace
Extension for Visual Studio Code - VBA language syntax highlighting support and code snippets for VSCode
vba-snippets - Visual Studio Marketplace
Extension for Visual Studio Code - Code snippets of vba for VSCode.
vscode-vba-icons - Visual Studio Marketplace
Extension for Visual Studio Code - VBA icons for use with VSCode VBA.

最後にマクロソースファイルの関連付けを行います。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 decombine
cscript vbac.wsf combine

Excelでデバッグ

ソースを反映したらExcelマクロを開きデバッグしてみましょう。Alt+F11キーでExcelのVBAエディタが開くのでソースが反映されていることを確認してからデバッグ作業を行ってください。

デバッグ作業が終わったらExcelは必ず閉じるようにしましょう。開いたままでvbacによるソース取込は動かないようです。

編集したソースとソースを反映したマクロをgit管理(commit)

デバッグを行い、問題なくマクロが動作したら、Excelマクロと修正したソースのコミットを行います。
準備作業で作成したフォルダでローカルにリポジトリを作成されている場合は、ソースについては編集した分の差分が表示されているはず。
Excelマクロとソースを合わせてコミットしておきましょう。

旧態依然のExcelマクロ開発でもなんとかなる

日本の会社の現場ではExcelマクロまだまだ現役です。中小企業ならなおさらですよね。生産性向上の一環として旧態依然のExcelマクロ開発案件が増えるもモチベーションあがらない、というケースが多いんじゃないかって思ってたんです。実際私もそうでした。

コードの大規模化+複数人の開発となった場合、標準のExcelマクロのエディタでは編集機能が弱い+構成管理もできない、という管理面での苦しみから逃れられない状況でした。

この状況をなんとかしなきゃ…ということで、マクロソースファイルの外だし+VSCode等の外部エディタ編集+git等の構成管理、という手を採用しました。VSCodeは習熟できていない+拡張機能の改善に期待という課題はありますが「コードの大規模化+複数人の開発」という状態への対処としては有効な一手だったと思います。

コメント

  1. 通りすがり より:

    便利そうですね!使わせていただきます。

    下記、恐らく誤記と思われます。

    <vbacでソースファイルをExcelに取込>

    cscript vbac.wsf decombine ではなく、
    cscript vbac.wsf combine でしょうか?

    VSCodeでターミナルを起動できますので、自分はコマンドプロンプトを立ち上げずに上記コマンドをそのまま打ち込んでいます。(cdも不要なので)

    • カネゴ より:

      ご指摘ありがとうございます。
      その通りです。修正させていただきます。
      (小さいですがコマンドプロンプトの画面はご指摘の内容でした)

      > VSCodeでターミナルを起動できますので、自分はコマンドプロンプトを立ち上げずに
      > 上記コマンドをそのまま打ち込んでいます。(cdも不要なので)
      ありがとうございます。
      VSCodeからのターミナル起動がよくわからなかったので昔ながらの方法でやりましたが、
      そちらのほうが便利そうですね。
      追記させていただきます。