こんにちは!大阪市住之江区に拠点を置く会社『縁紡ぐ』の稲垣です。
当社は、Excel、ACCESS、RPAなどのシステム開発や既存ツールを使った業務効率化の提案、また、ITスキルアップのための教育に力を入れています。効率的なビジネス運営を目指している企業様、ITスキルの向上を図りたい企業や個人の方に、最適なご提案をさせていただきます。業務プロセスの改善とITスキルアップをサポートし、共に成長するパートナーでありたいと考えています。
Excel VBAでコンストラクタに引数を渡す方法
Excel VBAでクラスモジュールを使う際、他のプログラミング言語と異なり、直接コンストラクタに引数を渡すことができません。JavaやPythonでは、当たり前のようにできたので、使いにくさを感じました。
これは、一見すると大きな制約のように思えますが、実は巧妙な方法でこの問題を回避することができます。この記事では、その方法を詳しく解説していきます。
コンストラクタに引数を渡す必要性
クラスをインスタンス化する際に初期設定が必要なケースは多々あります。例えば、特定のファイルパスや初期値を設定したい場合などです。多くのオブジェクト指向言語では、このような初期設定をコンストラクタで行いますが、VBAではその直接的な方法が提供されていません。
例えばHumanクラスから、Aさんを作る時に、名前を渡してインスタンス化する。ということができません。
'Humanクラス
Private nickName As String
Private Sub Class_Initialize(Bybal namae As String)
nickName = namae
End sub
'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プログラムを作成してみてください。
稲垣
- Excel、ACCESSでのシステム開発が得意
- ITスキルを共有し実践的に学びながら成長する人を見るのが幸せ
- 自家焙煎するほどのコーヒー好き
- 使用言語 VBA、Python、Javascript、Java、HTML、CSS etc.
- 保有資格 Kintoneアソシエイト、日商簿記検定2級、マンション管理士、管理業務主任者、情報セキュリティマネジメント、ExcelVBA etc.
- 業務フロー図の作成や業務時間分析を通して、効率化ポイントを探る人
- お客様にとって本当に良いことかを第一に考える人
コメント