VBAのCollectionオブジェクトの基本

VBA
スポンサーリンク

VBAにおけるCollectionオブジェクトを使用することで文字列、数値、オブジェクトを要素とした独自のコレクション(オブジェクト)を作成できます。

独自のCollectionを使うことで、生成したオブジェクト変数に要素を格納したり、取り出したりできます。わかりやすく言えば配列変数のように扱えます。
私は業務で規定フォームへのデータ転記をよく行うので、Collectionオブジェクトは重宝しています。

VBAデータ転記方法-列挙型Enum-
データを転記する際に必須となる列挙型Enumの使い方をダウンロードデータを使って紹介しています。
VBAデータ転記方法-関数・配列編-
MID関数,LEFT関数、Split関数、Join関数を使った文字の加工、データ転記の方法について紹介しています。
スポンサーリンク
スポンサーリンク

Collectionとは?

そもそも、Collectionとは何か?オブジェクトが複数まとまったものです。

ではオブジェクトとは何か?VBAで操作を行う「モノ」のことを言います。

オブジェクトについての記事はこちら↓

10日で習得!VBA入門③-オブジェクト、プロパティ-
VBAの基本なるオブジェクトとプロパティについて演習問題付きに紹介しています。 記事を読み進めていくことで、マクロVBAを使って同一シート内のデータ処理を自動化するために必要なVBAスキルを習得できます。VBA初学者が添付のレジュメを使って一緒に手を動かしながらVBAコードを記述していくことで、自分のペースでじっくり確実に習得することができます。

オブジェクトとコレクション

既存のオブジェクトにはコレクションが存在します。コレクションの中の1つの要素、つまり単一のオブジェクトを指定する際は、Workbooks(”○○.xlsx”)Worksheets(”シート名”)Worksheets(1)などと記述します。

スポンサーリンク

Collectionオブジェクト(サンプルコード)

さて、改めてCollectionオブジェクトは先述のWorkbooksやWorksheetsなどの既存のオブジェクトではなく、独自のオブジェクトを作成できるものです。

Sub ColTest()
    Dim cols As Collection
    Set cols = New Collection
    
    Dim i As Long
    'コレクションにアイテムとキーを登録
    cols.Add Item:="A", Key:="1"
    cols.Add Item:="B", Key:="2"
    cols.Add Item:="C", Key:="3"
    
    'アイテムの呼び出し
    MsgBox cols(1)
    MsgBox cols.Item(2)
    MsgBox cols("3")
    
    'アイテムの出力1
     For i = 1 To cols.Count
        Cells(i, 1) = cols(i)
     Next i
     i = 1
     Dim colvar As Variant
     'アイテムの出力2
     For Each colvar In cols
        Cells(i, 2) = colvar
        i = i + 1
     Next
    
End Sub

Collectionの初期化

Dim cols As Collection
Set cols = New Collection

Dim コレクション名 As Collection
Set コレクション名 = New Collection

上記にように、宣言します。以下のように記述することもできます。

Dim コレクション名 as New Collection

メソッド:アイテム(Item)とキー(Key)の登録

Collectionオブジェクトの基本的な使い方として、Addメソッドを使って、ItemとKeyを登録します。

Collectionオブジェクトのメソッド
 'コレクションにアイテムとキーを登録
    cols.Add Item:="A", Key:="1"
    cols.Add Item:="B", Key:="2"
    cols.Add Item:="C", Key:="3"

Keyの重複

また、Keyは省略可能です。また、Keyに重複する値を登録するとエラーになります。

Removeメソッド

Collectionの要素を削除するときはRemoveメソッドを使います。インデックス番号で指定または、キーを設定していればキー名を指定して削除もできます。

コレクション名.Remove(インデックス番号あるいはキー名)

スポンサーリンク

要素の取得(出力)

「インデックス番号を指定」あるいは「キー名を指定」して要素を取得します。

'アイテムの呼び出し
    MsgBox cols(1)’インデックス番号
    MsgBox cols.Item(2)'アイテムのインデックス番号
    MsgBox cols("3")'キー名の指定

これについては、身近なものとしてWorksheetsコレクションと一緒ですよね。Worksheets(1)、Worksheets(“シート名”)でシートを指定します。

全要素の取得

For Nextステートメント、For EachNextステートメントを使って全要素を取得できます。

 'アイテムの出力1
     For i = 1 To cols.Count
        Cells(i, 1) = cols(i)
     Next i    
 'アイテムの出力2
     i = 1
  Dim colvar As Variant
     For Each colvar In cols
        Cells(i, 2) = colvar
        i = i + 1
     Next
スポンサーリンク

Collectionを使った重複削除

Keyに重複する値を登録できないことを利用して、重複削除(ユニーク化)にCollectionを使います。

赤字が重複の製品コードです。下記のコードでB列にユニークな製品コードを出力します。

Sub ColTest2()
    Dim cols As Collection
    Set cols = New Collection
    Dim i As Long
    On Error Resume Next
    For i = 2 To 18
        cols.Add Cells(i, 1), Cells(i, 1)
    Next
    On Error GoTo 0
    For i = 1 To cols.Count
        Cells(i + 1, 2) = cols(i)
    Next
End Sub
スポンサーリンク

まとめ

1、Collectionオブジェクトを使用することで、独自のコレクション(オブジェクト)を作成できる。
2、Addメソッド、Keyメソッド、ItemメソッドでCollectionオブジェクトに要素を登録していく。
3、Keyは省略可能であり、重複の値を登録することができない。
4、全要素を取得するときはForNext、ForEachを使う。

コメント

タイトルとURLをコピーしました