VBAではマクロを記述する場所として複数の標準モジュールを利用できるが、何を基準に分けたら良いか分からないというツイートを見かけたので、私の考えを記しておこうと思い久々にブログ更新。
モジュール分割の大前提として、私はまずプロシージャが適切に分割されているかどうかが重要だと考える。
例えば以下のようにそれぞれのマクロが単一のプロシージャで構成されているとき、モジュール分割の動機は薄い。
しかしプロシージャの分割を覚えると、単一の機能を果たすマクロが複数のプロシージャで構成されることが発生する。
紙面の都合で2つのマクロを図示しているが、実際にはどんどんマクロが増え、どのマクロがどのプロシージャを呼び出すのが、ごちゃごちゃして訳が分からない状態になってくる。
すると、モジュールを分割して整理したいという要求が生まれる。
【注意】図ではマクロ1つに1モジュールになっているがこれはあくまで紙面の都合である。そんなことをしてるとマクロが増えるたびにモジュールが増え、モジュールだらけになってしまう。あくまで管理しやすい単位に分割するということ。
モジュールをGoogle検索すると、『装置・機械・システムを構成する、機能的にまとまった部分。』という表記がある。
例えば過去にAutoScrapBookというマクロブックを作った際は、自動スクリーンショット機能(スクラップ)の他に、編集機能、エクスポート機能、シートクリア機能、設定機能などのリボンメニューを作った。
この機能グループをそれぞれVBAの標準モジュールと対応付けている。
私はモジュール分割を『マクロのカテゴライズ』だと考えている。普通、部屋を整理整頓するときも、文房具・食器・薬・掃除道具なんかを一緒くたに入れたりしない。マクロの整理もそれと似たようなもので、モジュール名≒カテゴリ名と考えるとうまく整理できるんじゃないかと思う。
参考としてソフトウェア工学で使用される凝集度という言葉についてリンクを掲載する。
凝集度 - Wikipedia
もちろん、機能的凝集が最善とされている。
あと、共通部分を切り出して別モジュールにするという意見が割と沢山見られたけれど、一概にそれが良いとも言えないので、デメリットも把握したうえで対応されると良いと思う。
thom.hateblo.jp
そもそもプロシージャがうまく分割できないという方は以下ご参考までに。
thom.hateblo.jp
以上