IT系/VBA/基本/モジュール

Last-modified: 2020-07-18 (土) 13:23:08

目次


概要

モジュールに関するVBAのTIPS。

モジュールとは

「モジュール」は、「プロジェクト」の中の構成単位。

  • プロジェクト
    実行単位の仕組みの「かたまり」。複数個のモジュールをまとめて管理する集合体。
    Excelの場合は、1つのワークブックが1つの「プロジェクト」となる。
  • モジュール
    「プロジェクト」の中の構成単位で、プログラムを管理するための一つの単位。
    要は、VBAのコードを書いて保存する場所のことで、ここにプログラム、プロシージャが作られる。
    「標準モジュール」、「クラスモジュール」、「シートモジュール」、「ブックモジュール」、「フォームモジュール」の種類がある。
    「標準モジュール」のことを単に「モジュール」と呼ぶこともある。

モジュールの大別

オブジェクトにくっついてるモジュール

  • 各オブジェクトでのみ使用可能なモジュール。
  • Microsoft Excel Objects(ワークシートに付随する「シートモジュール」、ワークブックに付随する「ブックモジュール」)、フォームに付随する“「フォームモジュール」。
  • イベントプロシージャ(ユーザーの操作で発生するイベントに対応して実行されるプロシージャ)を使える。
  • Publicの宣言が許されていない。

オブジェクトにくっついてないモジュール

  • オブジェクトを横断して使用可能な汎用的なモジュール。
  • 「標準モジュール」、「クラスモジュール」*1
  • Publicの宣言が可能。
  • 標準モジュールに Public な関数を作成すると、他のシートや標準モジュールから呼び出せる。

モジュールの種類

標準モジュール

  • プログラムを記述するのに使用するモジュール。
  • この標準モジュールを軸にプログラムを作成していくのが基本。
  • マクロを作成した場合も、この標準モジュールにプログラムが記録される。
  • Publicの宣言が可能。
    このため、標準モジュールは、共通のプログラム、グルーバルに使用する変数/定数などを記述する用途に使われることが多い。

クラスモジュール

  • 「クラス」と呼ばれるオブジェクトを定義するのに使用するモジュール。
  • クラスは型(オブジェクトの設計図)で、型を使って実体化(インスタンス)したものがオブジェクト。
  • このモジュールに記述したプログラムは、Newでオブジェクトを生成して初めて使用可能になる。
  • クラスには状態を示す値と、処理が含まれるため、状態(値)の違うオブジェクトを複数保持できる。
  • オブジェクト指向における三大要素のうち、VBAは、継承*2も多態性も使えないため、クラスを使う場合、カプセル化を意識すればよい。
  • すなわち、関連するデータやその操作を一つ(カプセル)にまとめること、必要な情報のみ外部に公開し、不必要なものは非公開として隠蔽することを意識する。
  • 今まで、(日本の?)一般的なVBA開発ではあまり使用されていなかった。
  • 近年(2020年)は他オブジェクト指向言語を経験した開発者が増え、使用することも増えてきた感がある。
  • クラスモジュールを使用せずに標準モジュールだけでもプログラムは作成可能。
  • 自作のイベント処理を作るような場合は、クラスモジュールを使うとよい。

フォームモジュール

  • 画面(フォーム)のイベントプロシージャや、画面処理に関するプログラムを記述するモジュール。
  • 一般的に、その画面に関係のないプログラムは記述しない。
  • シートモジュール、フォームモジュールは、シート名/フォーム名をそのまま変数名としてオブジェクトを扱える(Newが不要)ようになっている。
  • これはVBAの環境が利便性のために勝手に生成しているのであって、決してオブジェクトの生成が行われていないわけではない。
  • シートモジュールをNewした場合、オブジェクトの実体はVBAが生成したオブジェクトと同じになる。
  • フォームモジュールをNewした場合はシートモジュールの場合と異なり、実体が別のオブジェクトになる。

Microsoft Excel Objects(シートモジュール、ブックモジュール)

  • 開いているExcelブックを構成しているExcelのブックやシートの総称。
  • 各ブック・シートを操作したタイミング(イベント)で自動的に実行する処理(イベントプロシージャ)を作成する場合などに利用。
  • 各ワークシートは「シートモジュール」、「ThisWorkbook」は「ブックモジュール」と呼ぶ。

モジュールの操作

「標準モジュール」、「クラスモジュール」、「フォームモジュール」の追加・名称変更・削除の方法。
以下は、標準モジュールについて記載しているが、クラス・フォームの操作も名称が違うだけでほぼ同等である。

標準モジュールの追加

  • Visual Basic Editorのメニューで[挿入]-[標準モジュール]を選択。
  • または、プロジェクト内を右クリックで[挿入]→[標準モジュール]。
  • [Alt]→[I]→[M]の順にキー操作でも実行可能。
  • 初期名は「Module[n]」。[n]は数字。

標準モジュールの名称変更

  • プロパティウインドウで行う。
  • 「(オブジェクト名)」を編集。半角全角使用可能。ただし、先頭に数字は使えず、記号はアンダーバー(_)のみ。

標準モジュールの削除

  • プロジェクト内の削除したい標準モジュールを右クリック→「XXXの解放」(XXXはモジュール名)。
  • [Alt]→[F]→[R]の順にキー操作でも実行可能。

TIPS

別ページの一覧を入れる。

'IT系/VBA/基本/モジュール/' には、下位層のページがありません。

リンク集

重複を恐れないリンク集。

動画

その他メモ



*1 「クラスモジュール」もオブジェクトとして動作するモジュールだが、ここでいうオブジェクトはアプリケーション上の具体的な「ブック」「シート」「画面(フォーム)」を指す
*2 インターフェースは使える