コレクションの作成−Collectionオブジェクト
Collectionオブジェクトを使うと、文字列、数値、オブジェクトを要素とする
独自のオブジェクトを作成できます。

■ 基 本 ■

	Dim colTest As Collection
	Set colTest = New Collection
または・・・
	Dim colTest As New Collection

のように宣言をした後、Addメソッドでメンバーを追加します。

	With colTest
	    .Add Item:="アイテム1", key:="i1"
	    .Add Item:="アイテム2", key:="i2"
	    .Add Item:="アイテム3", key:="i3"
	    .Add Item:="アイテム4", key:="i4"
	    .Add Item:="アイテム5", key:="i5"
	End With

※引数”Key”は指定しなくてもよい

このようにして作成した独自コレクションにアクセスするには・・・

	colTest("i1") ⇒ "アイテム1"
	colTest(3)   ⇒ "アイテム3"

のように、インデックス、もしくは"Key"を指定してアクセスすることができます。

■ 重 要 ■

1.Collectionに追加できるメンバーのデータ型は同じでなくてもよい。
2.Keyによる識別が可能

2.については基本でも触れたとおりですが、例えば2次元配列に格納した
データと比較したとき、この意味がわかるのではないでしょうか。例えば・・・

	Dim MyVar As Variant
	MyVar = Range("A1:B100").Value

  このようなバリアント型配列があったとして、この配列の各要素にアクセス
    する方法は・・・

	MyVar(2,3)

  のようにインデックスだけに限られます。

1.については、例えばユーザフォーム上に配置したコントロールをコレクショ
ンに追加することで、ループ構造でのアクセスが容易になります。以下は2の特
徴についてのサンプルです。

(前提)コマンドボタン:2、オプションボタン:2、チェックボックス:1
    テキストボックス:1、コンボボックス:1
	※オブジェクト名は標準のまま

'=============================================================
'モジュールレベル変数
Private colTest As Collection

'=============================================================
'フォーム初期化イベント

Private Sub UserForm_Initialize()

    Dim k As Integer

    Set colTest = New Collection

    '作成したコレクションに要素を追加
    With colTest
        .Add TextBox1
        .Add ComboBox1, "MyCombo"
        .Add OptionButton1
        .Add OptionButton2
        .Add CheckBox1
        .Add "文字列"
        .Add 1000
    End With

    For k = 1 To 5
        'Keyを指定してコンボボックスにアクセスできることをテスト
        colTest("MyCombo").AddItem "アイテム" & k
    Next k

    CommandButton1.Caption = "転記"
    CommandButton2.Caption = "アイテム削除"

End Sub

'=============================================================
'セルへの転記

Private Sub CommandButton1_Click()

    Dim i As Integer

    For i = 1 To colTest.Count
        'インデックス指定によるコレクションへのアクセステスト
        '格納されている要素がコントロールの場合には規定値のValue
        'プロパティーの値がセルに書き込まれる
        ActiveSheet.Cells(1, i).Value = colTest(i)
    Next i
End Sub

'=============================================================
'Collectionに格納した要素の削除。Removeメソッドを使用

Private Sub CommandButton2_Click()

    Dim i As Integer

    For i = colTest.Count To 1 Step -1
        colTest.Remove i
    Next

    '削除の結果をメッセージボックスで確認
    MsgBox "colTest.Countの結果は: " & colTest.Count

End Sub

Excel97,2000



戻る


Excel Word Access VBA! モーグ