Excel VBAでコンストラクタに引数を渡す方法

ExcelVBAでコンストラクタに引数を渡す方法

Excel VBAでコンストラクタに引数を渡す方法

Excel VBAでクラスモジュールを使う際、他のプログラミング言語と異なり、直接コンストラクタに引数を渡すことができません。JavaやPythonでは、当たり前のようにできたので、使いにくさを感じました。

これは、一見すると大きな制約のように思えますが、実は巧妙な方法でこの問題を回避することができます。この記事では、その方法を詳しく解説していきます。

目次

コンストラクタに引数を渡す必要性

クラスをインスタンス化する際に初期設定が必要なケースは多々あります。例えば、特定のファイルパスや初期値を設定したい場合などです。多くのオブジェクト指向言語では、このような初期設定をコンストラクタで行いますが、VBAではその直接的な方法が提供されていません。

例えばHumanクラスから、Aさんを作る時に、名前を渡してインスタンス化する。ということができません。

'Humanクラス

Private nickName As String

Private Sub Class_Initialize(Bybal namae As String)
    nickName = namae
EBybal 
'mainメソッド

Dim ahuman as Human
Set ahuman = New Human("大阪の稲垣") 'これが出来ない

解決策: 初期化メソッドの使用

Excel VBAでは、コンストラクタへの引数渡しを模倣するために、クラスに初期化メソッド(Initなどの名前が一般的)を追加することが一つの解決策になります。この方法を用いることで、インスタンス化後にすぐに初期化メソッドを呼び出し、必要な引数を渡すことができます。

Private name As String

Public Sub init(namae As String)

    Me.name = namae

End Sub
'mainメソッド

Dim ahuman as Human
Set ahuman = New Human
ahuman.init("大阪の稲垣")

initというSubプロシージャを追加し、インスタンス化直後に呼び出し、初期値を必ずセットするようにします。この手法によって、コンストラクタに引数を渡すことがでいない問題をクリアすることができます。

まとめ

Excel VBAでは直接コンストラクタに引数を渡すことはできませんが、初期化メソッドを用いることでこの制約を賢く回避することができます。この手法は、クラスの初期設定が必要なあらゆるシチュエーションで役立ちます。是非、この方法を活用して、より効率的で読みやすいVBAプログラムを作成してみてください。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

コメント

コメントする

目次