非IT企業に勤める中年サラリーマンのIT日記

非IT企業でしかもITとは全く関係ない部署にいる中年エンジニア。唯一の趣味がプログラミングという”自称”プログラマー。

Excel/VBA: Property Let/Getを使って標準モジュール上でクラスっぽいことができる

   

以前、Excel/VBAでもオブジェクト指向プログラミングが可能であることを書きました。

 

ここでは、クラスモジュールを使うことでオブジェクト指向プログラミングが可能となったわけですが、標準モジュール上でもクラスっぽいことが可能になります。(「っぽい」と書いた理由は後述)

VBAでのステートメントはSub, Functionのほかに、Propertyステートメントがあります。これを使うことで「クラスっぽい」ものが作れます。

広告

 

エディタの設定

まず、標準モジュールを1つ用意して任意の名前にします。この名前はクラス名になります。今回は「ClassA」としました。

 

この「ClassA」モジュールにPropertyステートメントを書いていきます。

 

ソースコード

以下が「ClassA」内に記述したソースコードです。

インスタンス変数としてString型の変数t、あとはProperty Letステートメントと、Property Getステートメントの2つです。Letはsetter、Getはgetterの役割を果たします。

Dim t As String

Property Let setText(tx As String)
  t = tx
End Property

Property Get getText() As String
  getText = t
End Property
 

 

使い方

以下が「ClassA」モジュールを利用した例です。

Sub PropertyTest()
  ClassA.setText = "Test"
  MsgBox (ClassA.getText)
End Sub
 

 

このコードはまた別の標準モジュールに書いて下さい。

 

このマクロを実行すると以下のようなメッセージが現れます。

 

冒頭で「クラスっぽい」と書いたのは、インスタンス化できないからです。以下のような例は誤りでエラーが出ます。

' 以下は誤り
Set obj = New ClassA
 

 

インスタンス化できればもっと使い勝手は良くなりますが、まあそれはクラスモジュールでやるとして、標準モジュールでのPropertyステートメントはデータの設定などに手軽に使えると思います。

 

広告

 - Excel, VBA