サイトについて      連絡先   検索

VBA 標準モジュール

はじめに

Excel VBA マクロの標準モジュールを作成する方法を紹介します。

標準モジュールには変数や関数などすべてのコードを書けます。

Public で宣言すると、他のワークシートなどから呼び出せるのでコードを再利用できます。

  • 目次
    • 標準モジュールとは
    • 標準モジュールを追加する
    • コードを作成する
    • 標準モジュールのスコープ
    • セルを操作する

標準モジュールとは

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

関数や変数などすべてのコードを書けます。Public な定数や配列や構造体などは、標準モジュールにのみ宣言できます。

マクロとして実行できるのは、標準モジュールに宣言された Public な Sub 関数です。Public な Function 関数は、エクセルの数式から使用できます。

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

使う理由

Sheet1 などのワークシートだけにコードを書いても問題ありません。標準モジュールに Public な関数を作成すると、他のシートや標準モジュールから呼び出せるようになります。同じコードを何度も書く必要がなくなります。

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

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

6

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

7

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

8

コードを作成する

Sheet1 などのワークシートに変数や関数を作成したときと同じように、標準モジュールにも作成できます。コードの書き方に違いはありません。

マクロ関数

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 で宣言された変数を参照するにはファイル名.変数名または変数名のように入力します。関数など、他のものについても同様です。

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

一般的にはファイル名を付けるのが手間なので省略して、同じ名前を付けないようにします。

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


Public 変数 As Integer

Sub 関数() ' 省略すると Public になる

End Sub

Sheet1 のコード


Sub 実行()
    Module1.変数 = 1  ' ファイル名.変数名で参照する
    変数 = 2          ' 変数名だけでも参照できる
  
    Call Module1.関数 ' ファイル名.関数名で参照する
    Call 関数         ' 関数名だけでも参照できる
End Sub

定数と固定長文字列と配列と構造体を Public で宣言するには、標準モジュールにする必要があります。

セルを操作する

Sheet1 で次のコードを実行すると、必ず Sheet1 の A1 のセルに入力されます。これは自身のシートに対して操作しているためです。


Range("A1").Value = "Tipsfound" 
' Me.Range("A1").Value = "Tipsfound" と同じコード

標準モジュールで実行すると、選択中のワークシートの A1 のセルに対して入力されます。

sheet1

これは ActiveSheet.Range.Value の ActiveSheet が省略されているためです。


Range("A1").Value = "Tipsfound"
' ActiveSheet.Range("A1").Value = "Tipsfound" と同じコード

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


Sub 実行()
    Sheets(1).Range("A1").Value = "Tipsfound"        ' 左から 1 番目のワークシート
    Sheets("Sheet1").Range("A1").Value = "Tipsfound" ' Sheet1 という名前のワークシート
End Sub
  • 目次
    • 標準モジュールとは
    • 標準モジュールを追加する
    • コードを作成する
    • 標準モジュールのスコープ
    • セルを操作する