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

VBA クラス

はじめに

Excel VBA クラスの使い方を紹介します。

Worksheet などのオブジェクト型がクラスで作成されています。

複数のフィールドを定義でき、その状態にしたがって関数で動作します。

クラスは複雑なので無理に使用する必要はありません。ワークシートと標準モジュールだけでも大丈夫です。

クラスの追加

VBE の「挿入」をクリックして [クラス モジュール] をクリックします。

5

クラスが追加されます。

6

定義

ワークシートできたことは、クラスで同じように定義できます。通常は他のシートや標準モジュールから呼び出すので Public で定義します。

Public FirstName As String
Public LastName As String
  
Public Sub 実行()
    Dim s As String
    s = MyName
    Debug.Print (s)
End Function

Public Function MyName() As String
    MyName = FirstName & LastName
End Function

クラスの関数を直接 VBA やマクロとして実行することはできません。

宣言と初期化

クラスを使用するには必ず New を使用してインスタンス化する必要があります。クラスは Object 型なので代入には Set を使用します。

インスタンス化を忘れるとエラーが発生します。

Dim c As Class1

' インスタンス化されていない
c.FirstName = "Tips" ' オブジェクト変数または With ブロック変数が設定されていません。

インスタンス化すると使用できます。

' インスタンス化
Dim c As Class1
Set c = New Class1

' 初期化
c.FirstName = "Tips"
c.LastName = "found"

' 関数の呼び出し
Dim userName As String
userName = c.MyName ' userName には "Tipsfound" が入ります。
クラスが不要になった時点で必ず Nothing を設定します。これでインスタンスが確実に破棄され、メモリが解放されます。
Dim c As Class1
Set c = New Class1

' 処理

' 解放
Set c = Nothing

自作のクラスであればそこまで気にする必要はありませんが、COM オブジェクトを使用しているときは必須です。初めから Nothing を設定する癖をつけておくと忘れずに済みます。

コンストラクタ

クラスにはコンストラクタやデストラクタはありません。代わりにイベントがあります。

(General) をクリックして [Class] をクリックします。

3

(Declarations) をクリックして取得したいイベントを選択します。

4

Initialize イベントを使えばインスタンス化した時に、フィールドに初期値を設定できます。

Private Sub Class_Initialize()
    FirstName = "苗字"
    LastName = "名前"
End Sub

Dim c As Class1
Set c = New Class1

Debug.Print (c.MyName) ' 苗字名前

フィールドの値が 0 や空文字だと都合が悪い時などに便利です。

値型と参照型の違い

クラスはオブジェクトで参照型です。

関連ページ