概要
レガシーなのか、あるいはJTCではまだまだ主力なのか。Excelマクロを動かすVBA(Visual Basic for Applications)のプロジェクト構成とモジュールごとの役割について整理しました。
結論としては、"ThisWorkBook"に書いても動きます。ただし、きちんと役割ごとにモジュールを分けることが推奨されます。 です。ThisWorkBookは文字の通りそのBook(Excelファイル)に閉じた場所となっています。
※この記事では、VBAの実行手順やコードについてはほとんど触れていません
経緯
最近ちょっとしたcsv変換の依頼があり、VBAで書きながらふと「VBAにおける実行ファイルの置き場や記述場所って決まりがあったかな?」と思いましたので調べてみました。初学時には、いきなりボタンとThisWorkBookにVBAを書き、ぽちぽちとトライ・エラーしていたと思います。ただ、コードがどこに記述され、どのように保存・実行されるのか、Excelファイルを中心に全体像を理解することで、VBAを効果的に利用することができるのではないかと思います。
マクロとVBA
今更ですが、マクロとVBAの違いを整理すると以下の通りです。
- マクロ: いくつかの動作をまとめて呼び出し実行する機能のこと(Excelに限定されない)
- VBA: MicrosoftのOffice製品(ppt, word, access, excelなど)に組み込まれたプログラミング言語、VBE(Visual Basic Editer)というEditerを用いて記述する
この定義に従うと、Excelマクロとは「Excelを中心としたいくつかの動作をまとめて実行する機能(あるいはその機能をもつファイル)」を表します。そしてその実行方法を実現する手段の一つがVBAによるプログラミング、と言えます。
マクロ | VBA (Visual Basic for Applications) | |
---|---|---|
定義 | 一連の操作を記録・実行する機能 | Microsoft Office製品に組み込まれたプログラミング言語 |
役割 | 定型的な作業の自動化 | Office製品の機能拡張、自動化、カスタマイズ |
コードの記述方法 | 記録マクロ、VBAコードを直接記述 | VBAコードを直接記述 |
柔軟性 | 比較的低い(記録された操作の範囲内) | 高い(複雑な処理や高度なカスタマイズが可能) |
ExcelにおけるVBE(Visual Basic Editer)のプロジェクト構成と役割
Excelファイルで開発タブ > VBEを開くと左側に"プロジェクト"というサイドバーが見えます。この中身は現時点でのアクティブなExcelファイルの情報が記載されています。
項目名 | 概要 |
---|---|
VBAProject(XXXXX) | 開いているExcelファイル(あるいはExcelファイルのアドイン)ごとに階層化するもの |
Microsoft Excel オブジェクト | ThisWorkBookモジュール, Sheetモジュール、などオブジェクトをまとめたフォルダ |
ThisWorkBookモジュール | WorkBook (Excelファイル)全体 に関連するイベント (ブックのオープン、クローズ、保存など) に応答する処理を記述 |
Sheetモジュール | 特定のWorkSheetに関連するイベント (シートの選択、セルの変更など) に応答する処理を記述 |
(標準)モジュール | 特定のBookやSheetに依存しない汎用的な共通処理を記述 |
クラスモジュール | (必要に応じた)独自のオブジェクト (クラス) を定義する場所 |
ユーザーフォーム | ユーザーからの入力を受け付け、ダイアログ・ポップ表示の処理を記述 |
結局どこに書けば良いのか?
極端な話、すべて ThisWorkbookモジュール に記述しても、一応は動作させることができます。なので、そこまで長いコードでなく再利用や他のブックからの呼び出しがなければそれで問題ないと思います。しかし、可読性や再利用なども視野に入れると推奨はされません。
以上です
大規模なコードをVBAで書くことは今後あるのか・・・