Excel VBAのクラスを学ぶ2
はじめに
前回はクラスについて、プロパティを定義する方法までを説明しました。
今回は続きの、クラスにはメソッドを定義する方法から始めます。
◆目次◆
クラスにメソッドを定義する方法
オブジェクトにメソッドを追加する方法と同じです。
- Subプロシージャ
- Functionプロシージャ
例:Personクラスに、挨拶をするメソッドと、お腹がすいたら「ご飯を食べる」というメッセージを返すメソッドを追加
'[Person] Public Sub Greet() MsgBox "Hello!" End Sub Public Function Eat() As String If MsgBox("お腹がすいた?", vbYesNo) = vbYes Then Eat = "ご飯を食べる" End If End Function '[Module1] Sub personclass_test1() Dim myPerson As Person Set myPerson = New Person myPerson.Greet MsgBox myPerson.Eat End Sub
実行結果は、以下のとおりです。 * 「Hello!」というメッセージボックスが表示される * 「お腹がすいた?」というメッセージボックスが表示され、「はい」を選択すると、「ご飯を食べる」というメッセージボックスが表示される
Cloneメソッド
自身のコピーをオブジェクトとして生成し返すメソッドです。
例:同じ名前と血液型を持つクローンメソッドを作る
'[Person]クラスモジュール '変数Nameはパブリック変数にして、ほかのモジュールでも参照可能にする Public Name As String '変数bloodType_はプライベート変数にして、Propertyプロシージャでセッターとゲッターを作る Private bloodType_ As String Public Property Let BloodType(ByVal newBloodType As String) bloodType_ = newBloodType End Property Public Property Get BloodType() As String BloodType = bloodType_ End Property 'クローンメソッドを使って '同じ名前と血液型を持つインスタンスを戻り値を使って生成する Public Function Clone() As Person Dim objNew As Person Set objNew = New Person objNew.Name = Me.Name objNew.BloodType = Me.BloodType Set Clone = objNew End Function '[Module1]標準モジュール Sub cloneTest1() 'myPersonというPersonクラスのインスタンスを生成する Dim myPerson As Person Set myPerson = New Person myPerson.Name = "Bob" myPerson.BloodType = "A" 'clonePersonというmyPersonと同じ名前と血液型をクローンのインスタンスを生成する Dim clonePerson As Person Set clonePerson = myPerson.Clone Debug.Print clonePerson.Name '出力結果:Bob Debug.Print clonePerson.BloodType '出力結果:A 'clonePersonの名前を変更する clonePerson.Name = "Mike" 'myPersonとclonePersonの名前と血液型を確認する Debug.Print myPerson.Name '出力結果:Bob Debug.Print myPerson.BloodType '出力結果:A Debug.Print clonePerson.Name '出力結果:Mike Debug.Print clonePerson.BloodType '出力結果:A End Sub
clonePersonはmyPersonとは異なるインスタンスなので、clonePersonの名前(Name)を変更しても、myPersonに影響はありません。
コンストラクタとデストラクタ
どちらもイベントプロシージャで設定します。
- コンストラクタ
インスタンスが生成されたときに実行される。
Initializeイベントで呼び出されるプロシージャ
Private Sub Class_Initialize() 'インスタンスが生成されたときに行う処理 End Sub
- デストラクタ
インスタンスへの参照がすべて失われたときに実行される。
Terminateイベントで呼び出されるプロシージャ
Private Sub Class_Terminate() 'インスタンスへの参照がすべて失われたときに行う処理 End Sub
さいごに
まだクラスの使いどころがわかっていないので、これから活用して覚えていきたいと思います。