見習いエンジニアがゆく

見習いエンジニアの勉強帳 VBA・NWなどなどITの勉強用ブログです。のんびり、のんびり。

【VBAエキスパートの勉強】ExcelVBAベーシック ~2.モジュールとは~

モジュールとは、マクロを記述する専用のエリアのことです。

f:id:melancholy198x:20190415194546j:plain

 

  • 「マクロ」は、プログラミング言語VBA」で記述される。
  • 「マクロ」は、モジュールという専用のエリアに記述する。
  • VBAのコードも、もちろんモジュール内に記述する。

 

今回はそのモジュールについて、書きます。

 

 

モジュールの種類

モジュールはオブジェクト毎にあります。

モジュールを持つオブジェクト

  • ブック(Workbookオブジェクト)
  • シート(Sheetオブジェクト)
  • フォーム(UserFormオブジェクト)

※シートモジュールでは、ワークシート(Worksheetオブジェクト)のモジュールが一般的。また、グラフ専用のグラフシート(Chartオブジェクト)にもモジュールが用意されている

 

オブジェクトに属さない汎用的なモジュール

  • 標準モジュール
  • クラスモジュール

※クラスモジュールは、クラスを定義するときに利用します。

 

<モジュールの例>

f:id:melancholy198x:20190415191836j:plain

 

補足:オブジェクトとは

オブジェクトは、「もの」「主体」「対象物」などの意味で、Excelを構成する部品であり、VBAの操作対象のことです。

 

「セルA1」に100を代入する→セルA1が操作対象

「ワークシート」を増やす→ワークシートが操作対象

 

セルはRangeオブジェクト、セルが存在するワークシートはWorksheetオブジェクト、ワークシートが存在するWorkbookオブジェクトなど、Excelは様々なオブジェクト・部品から構成されています。

 

モジュールにマクロを記述する際のルール

マクロは、どこのモジュールに記述して良いが、以下のようなルールがあるので注意。

 

イベントを利用するマクロはオブジェクトのモジュールに記述

対象のワークシートが選択された状態(アクティブ)にすることで、Activateイベントが発生する。そのイベントを利用して自動で起動するマクロは、Worksheetオブジェクトのモジュールに記述する必要があります。 

 

上位オブジェクトを省略したときの意味が異なる

例えば、以下のコードの場合を説明します。

コード例

Sub sample()
    Range("A1").Value = "hello world"
End Sub

 

上記のようにRangeオブジェクト(セル)の上位オブジェクトが省略されているとき、コードを記述したモジュールによって意味が異なります。

 

Worksheetオブジェクトのモジュールに記述した場合

WorksheetオブジェクトのセルA1が対象になる

 

標準モジュールに記述した場合

アクティブシートのセルA1が対象となる。

 

Worksheetモジュールにコードを書いた場合、マクロを実行すると記述したWorksheetのセルA1が対象になり、

標準モジュールにコードを記述した場合、マクロを実行するとアクティブシートのセルA1が対象になります。

 

宣言できる変数・定数などの制限

すべてのモジュールで使用できるグローバルエリア変数、定数、ユーザー定義型、APIの宣言など、標準モジュールに記述する必要があります。