【ExcelVBA】クラスモジュール の Property Let/Get に配列を使う
目次
クラスモジュール内で配列を使う方法
Class1 の内容

Private Arr(0 To 100) As Long Property Let Values(i As Long, value As Long) Arr(i) = value End Property Property Get Values(i As Long) As Long Values = Arr(i) End Property
標準モジュール(Module1) の内容

Sub Sample1()
Dim ClsTest As Class1: Set ClsTest = New Class1
ClsTest.Values(0) = 5 'Property Let Values(0, 5)
ClsTest.Values(1) = 7 'Property Let Values(1, 7)
Debug.Print ClsTest.Values(0) 'Property Get Values(0) As Long
Debug.Print ClsTest.Values(1) 'Property Get Values(1) As Long
End Sub
実行結果
5
7
7
標準モジュール内で配列を使う方法
次はインスタンスを複数生成するバージョン。けど、実用的ではありませんね。Class2 の内容

Private OutValue As Double
Property Let DoubleNumber(InValue As Double)
OutValue = InValue
End Property
Property Get DoubleNumber() As Double
DoubleNumber = OutValue
End Property
標準モジュール(Module2) の内容

Dim ClsTest() As Class2
Sub Sample2()
ReDim Preserve ClsTest(1)
Set ClsTest(0) = New Class2 'インスタンス生成
Set ClsTest(1) = New Class2 'インスタンス生成
ClsTest(0).DoubleNumber = 1.1
ClsTest(1).DoubleNumber = 9.9
Debug.Print ClsTest(0).DoubleNumber
Debug.Print ClsTest(1).DoubleNumber
End Sub
実行結果
1.1
9.9
9.9
クラスモジュール内で配列(ReDim Preserve)を使う方法
コメント頂いた 風韻さん のアイデアです。とても柔軟に扱えるのでおすすめです。ありがとうございます(^_^)Class1 の内容

Dim Arr() As Variant
Property Let Values(i As Long, value As Long)
ReDim Preserve Arr(i)
Arr(i) = value
End Property
Property Get Values(i As Long) As Long
Values = Arr(i)
End Property
標準モジュール(Module1) の内容

Sub Sample3()
Dim ClsTest As Class1: Set ClsTest = New Class1
ClsTest.Values(0) = 20 'Property Let Values(0, 20)
ClsTest.Values(1) = 14 'Property Let Values(1, 14)
Debug.Print ClsTest.Values(0) 'Property Get Values(0) As Long
Debug.Print ClsTest.Values(1) 'Property Get Values(1) As Long
End Sub
実行結果
20
14
14




ディスカッション
コメント一覧
失礼致します。
メンバ変数で配列を扱う方法が分からず困っていたところ、こちらの記事に出会うことができ大変助かりました。
ありがとうございました。
動的配列を使う方法ですが、一つの案を試したところ上手く行ったようです。
よろしければご覧頂けますでしょうか。
1. メンバ変数で動的配列を記述する。
2. 配列のサイズを変更するメソッドを同じクラスモジュール内に記述する。
3. 上述のメソッドを実行する。
(引数で配列のサイズ値を渡す)
後はこちらの記事で解説されている、静的配列を使う方法をそのまま実践致しました。