更新日:、 作成日:

VBA 標準モジュールの呼び出し

はじめに

Excel VBA マクロで標準モジュールの呼び出し方法を紹介します。

標準モジュールとは、すべてのシートから使用できる変数や関数を宣言するときに使用するファイルです。

Public で変数や関数を宣言すると 標準モジュール名.変数名 のようにして、すべてのシートから呼び出せます。

Public Function 関数は、エクセルの数式に入力できます。

Public や Private の変数はマクロが終了しても値が残ります。続けてマクロを実行するときは必ず初期化します。

標準モジュールとは

VBA マクロのコードを書くためのファイルです。

Public で変数や関数を宣言すると、すべてのシートからその変数や関数を呼び出せます。すべてのシートで同じマクロを実行するには、標準モジュールに作成します。

すべてのシートから同じ変数や関数を呼び出したいときに、標準モジュールを使用します。

Public な定数や固定長文字列や配列や構造体などは、標準モジュールにのみ宣言できます。

同じように VBA のコードを書くファイルにクラスがあります。

詳しくは「クラス」をご覧ください。

標準モジュールを追加する

エクセルの「マクロの記録」を使用すると自動で追加されます。

[挿入] から [標準モジュール] をクリックします。

6

標準モジュールが追加されます。

7

標準モジュールの名前を変更するには、その [標準モジュール] を選択した状態でプロパティウィンドウの [オブジェクト名] を変更します。

8

標準モジュール名は、シートなどから呼び出すときに使用します。

標準モジュールの呼び出し

シートや別の標準モジュールから標準モジュールの変数を参照したり、関数を呼び出すには Public で変数や関数を宣言します。

省略したときの関数は Public になります。

その変数を参照するには 標準モジュール名.変数名 または 変数名 のように入力します。関数などについても同様です。

ただしシートや別の標準モジュールに同じ名前の変数や関数などを宣言できるため、ファイル名.変数名 形式で区別できるようにするのをオススメします。

標準モジュール1 のコード

Public パブリック変数 As Integer

Private プライベート変数 As Integer

Public Sub パブリック関数()

End Sub

Sub パブリック関数() ' 省略すると Public になる

End Sub

Private Sub プライベート関数()

End Sub

Sheet1 のコード

Sub 実行()
    Module1.パブリック変数 = 1   ' ファイル名.変数名で参照する
    パブリック変数 = 2           ' 変数名だけでも参照できる
    Module1.プライベート変数 = 3 ' エラー、Private は参照できない

    Call Module1.パブリック関数   ' ファイル名.関数名で呼び出し
    Call パブリック関数           ' 関数名だけでも呼び出し
    Call Module1.プライベート関数 ' エラー、Private は呼び出せない
End Sub
Public や Private について詳しくは「スコープ」をご覧ください。

マクロ関数

Public な Sub 関数はマクロとして実行できます。引数を入力するとマクロになりません。

Public Sub マクロ1()

End Sub
9

「マクロの記録」から自動でこのような関数が作成されます。

エクセルから呼び出し

Public な Function 関数は、エクセルの数式から呼び出せます。関数の戻り値が結果になります。

Public Function 関数() As String
    関数 = "かんすう"
End Function

Public Function 引数あり(i As Integer) As String
    引数あり = i * 10
End Function
10

変数の初期化

Public や Private の変数はマクロが終了しても値が残ります。続けてマクロを実行すると正常に動作しないことがあります。

このため、マクロを実行したら最初にすべての Public や Private の変数を初期化する必要があります。

初期化方法は「スコープ」の「Public 変数」をご覧ください。

セルを操作する

Sheet1 に Range や Cells を入力すると、自身のシートのセルになります。自身を表す Me. が省略されています。

' どちらも同じコード
Range("A1").Value = "Sheet1" 
Me.Range("A1").Value = "Sheet1"

標準モジュールに Range や Cells を入力すると、開いているシートのセルになります。アクティブシートを表す ActiveSheet. が省略されています。

sheet1
' どちらも同じコード
Range("A1").Value = "アクティブ"
ActiveSheet.Range("A1").Value = "アクティブ"

特定のシートに対して操作したいときは、そのシートを指定します。

Worksheets(1).Range("A1").Value = "Sheet1"        ' 左から 1 番目のワークシート
Worksheets("Sheet1").Range("A1").Value = "Sheet1" ' Sheet1 という名前のワークシート