Mutable_Yunの業務改善ブログ

業務改善や生産性向上のブログです。自動化の手段として、VBAやRPAの勉強に役立つ解説をしています。

VBAで複数のモジュールを使いこなす① 標準モジュールを使う

みなさんはVBAを使う時、モジュールを使いこなせているでしょうか。

VBAでは複数のモジュールの種類が存在し、それぞれが複数のモジュールを持つことができます。しかし、それを使いこなせている人は多くないかもしれません。

私もVBAを勉強し初めた頃は標準モジュールを知らず、初めから表示されているシートモジュールに書いていました。

それぞれのモジュールの種類と使いどころ、そして使い分けを知ることでより柔軟な設計ができるだけで無く、頭の中が整理されて作業効率が上がり、また、メンテナンス性も向上します。

この記事は中級です。
レベルに関してはExcel VBAの実力(レベル)を定義してみる 初心者~三段をご参照ください。

それでは始めましょう。


目次

  • 標準モジュールの役割
  • 複数の標準モジュールを使う
  • モジュール名の付け方のコツ
  • 機能の拡張性を持たせる

標準モジュールの役割

標準モジュールは特定のシートやブックによらない、一般的なプロシジャを記述するのに使います。

ブックを開いたり、コピーしたり、メインの自動化の中身を記述するのに使います。

この中に、上述のブックを開いたり、メインの作業をしたりといった内容を細かく分けて、それぞれ別のプロシジャとしてひとつのモジュールに記述していきます。

あとは、この標準モジュールの冒頭などに、このモジュール内のプロシジャを、順に呼び出すためのプロシジャを書いばOKです。

私の場合は先にプロシジャを次々に呼び出すプロシジャをまず書いてしまいます。そして、未作成のプロシジャのCallステートメントの部分をコメントアウトしておきます。

こうすることによって、その後の作業の見通しが良くなり、進捗もよくわかるようになるからです。

例)「受注データ分析更新モジュール」というモジュールを作ってこのようにその中の手順を順次呼び出すプロシジャを作成する

Sub 受注データ分析()

    Call 受注データ取り込み
    Call 分析フォーマット取り込みして別ブックにコピー
    Call 新分析フォーマットに転記
    Call 折れ線グラフの更新
    Call 保存して閉じる
    
End Sub

複数の標準モジュールを使う

なぜ複数の標準モジュールを使うメリットがあるかと言うと、後述する通りマクロブック自体の機能を拡張するためです。

ひとつの作業郡にひとつのモジュールを割り当てて、そのモジュールの中に細かく分けたプロシジャ
を記述していきます。

作業群ごとに標準モジュールを作成した例。標準モジュールの中のSubプロシジャは基本的に他の標準モジュール内のプロシジャを呼び出さない。(それをしたいならクラスモジュールを使ってオブジェクトを生成するのがおすすめ)

f:id:mutable_yun:20190912200806p:plain
作業群ごとに標準モジュールを作成した例
ちなみにこの例では、営業系のモジュールと生産系のモジュールを見やすくする前に「A_」や「B_」をつけています。


以前、本来なら一つの標準モジュール内でSubプロシジャとして分けるレベルの細かい作業をモジュールに分けている人がいました。

これは下記の理由からおすすめできません。

  • ひとつのマクロブックにひとつの作業郡を割り当てているために似たような作業をまとめてひとつのブックにできません
  • 上の裏返しですが、適切にモジュールを管理すれば、ある程度複数の機能を持ったマクロブックができます
  • 最後に、モジュールをまたぐプロシジャの呼び出しを最少にすることができます

別の標準モジュールにあるプロシジャを呼び出してはいけないと言うことはありません。可能です。

しかし、標準モジュールをまたがずにひとつのモジュールでワンセットの作業が完結すると言うことは、そのモジュールの役割が明確になるため、その役割をモジュール名としてつけたときに、分かりやすくなります。

まさに、「モジュール」という感じがしますね。


モジュール名の付け方のコツ

上ですでに述べましたが、役割をわかるようにつけるのがよいです。

例えば「生産計画立案モジュール」などです。

英語でつけるなら「ProductionPlan」など、英単語をくっつけて単語の先頭の文字のみ大文字にすることが多いようですが、あまり気にしなくてよいと思います。

ただ、ひとつのブックの中では無理のない範囲で同じルールに従った方がいいと思います。日本語なら日本語、英語なら英語、大文字で始めるなら大文字で始める、など。バラバラだったら気持ち悪いですしね。

機能の拡張性をもたせる

既に述べてきた点を別の言い方をしただけです。この様に同じ事を別の言い方をすることで視野が広がったり、別の価値に気づく事があります。

ひとつの標準モジュールでひとつの作業郡が完結すると言うことは、新たに標準モジュールを挿入すれば、新たな機能を付け加える事ができる、と言うことです。

さあ、既に作ったことがあるツールのプロシジャがいろんな標準モジュールに散らばっていたら、早速、作業郡の名前のついたモジュールをひとつ作り、散らばったプロシジャをそこに集めましょう。

それが、正しい標準モジュールを複数作って機能を拡張する第一歩です。

作業前のバックアップはお忘れずに!