VBAでのクラスに関する備忘録です.

目次

  1. クラスファイル
  2. クラスの書き方
    1. アクセス修飾子
    2. プロパティ
    3. コンストラクタ・デストラクタ
    4. メソッド
    5. self
  3. クラスの使い方
  4. コレクション
  5. 参考文献

クラスファイル

エクスポート・インポートするときの拡張子はclsとなります.

クラスの書き方

アクセス修飾子

PrivatePublicでメンバ変数のスコープを定めます.
次は,クラスの内部で使用するメンバ変数の定義例です.

Private メンバ変数 As

プロパティ

内部変数とする場合,取得はGet,設定は変数ならLet,オブジェクトならSetで行います.
Private メンバ変数 As 型であるとき,getは

Public Property Get プロパティ名() As
プロパティ名 = メンバ変数
End Property

によって行い,setは

Public Property Let プロパティ名(ByVal 変数 As 型)
メンバ変数 = 変数
End Property

によって行います.(オブジェクトを返す場合はLetSetにします.)

コンストラクタ・デストラクタ

コンストラクタは

Private Sub Class_Initialize()
' コンストラクタ
End Sub

と書き,デストラクタは

Private Sub Class_Terminate()
' デストラクタ
End Sub

と書きます.

メソッド

SubプロシージャやFunctionプロシージャは通常通りの書き方ができます.
適宜アクセス修飾子を前置して使います.
オブジェクトを返す関数を作成するときは,Setが必要です.

self

インスタンス自身を指すにはMeとします.

クラスの使い方

xをプロパティ,xに作用するxMoveメソッドを持つMyClassクラスを通常のモジュールから呼び出す例です.

Sub クラスの使用例()
Dim myInstance As MyClass
Set myInstance = New MyClass 'コンストラクタ実行

myInstance.x = 100 'プロパティへの代入
myInstance.xMove (10) 'プロシージャや関数の実行

Set myInstance = Nothing 'デストラクタ実行
End Sub

コレクション

インスタンスをコレクションで扱うことができます.
コレクションは

Dim コレクション名 As Collection
Set コレクション名 As Collection

によって定義します.

コレクションへの追加は

コレクション名.Add インスタンス, キー

によって行います.
削除はRemoveメソッド,取得はItem(キー)メソッドです.

参考文献

スピル関数やPower Query,コメントへのリプライなどの新しい機能が紹介されているほか,他のプログラミング言語で処理することの多いファイル操作や読み書きもマクロでパッケージ化して第三者に渡したい場合に助けとなる逆引き辞典です.

  • 大村あつし・古川順平 (2021)「Excel VBA コードレシピ集」技術評論社.

いつも隣にITのお仕事にクラスモジュールの入門的解説があります.