【VBA】Collectionを配列にする

【VBA】Collectionを配列にする

VBAでリストを扱う際、よく使われるのはCollectionだと思います。

しかし、リストを何らかのメソッドで使用する場合には引数として配列を求められることも多いんですよね。

Collectionから一括で配列にするメソッドがありそうでなかったため、自分で作成しました。

コピペ用です。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
'//////////////////////////////////////////////////
' Collectionを配列にする
'//////////////////////////////////////////////////
Private Function CollectionToArray(ByVal targetCollection As Collection) As Variant
 
    Dim resultArray()
    Dim arraySize
    Dim index
    Dim val
  
    ' 配列のサイズを取得する
    arraySize = targetCollection.Count
    ' 配列のサイズが0ではない場合
    If arraySize <> 0 Then
     
        ' 取得したサイズで配列を作成する
        arraySize = arraySize - 1
        ReDim resultArray(arraySize)
    End If
     
    ' indexの初期値を設定する
    index = 0
    For Each val In targetCollection
     
        resultArray(index) = val
        index = index + 1
 
    Next
  
    ' 戻り値に設定する
    CollectionToArray = resultArray
 
End Function

使い方は引数にCollectionを入れるだけです。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
'//////////////////////////////////////////////////
' メソッド呼び出し確認用
'//////////////////////////////////////////////////
Public Sub callMethod()
 
    Dim strList As Collection
    Dim strArray()
 
    ' Collectionを初期化する
    Set strList = New Collection
    ' Collectionに要素を追加する
    strList.Add ("いぬ")
    strList.Add ("ねこ")
    strList.Add ("おうむ")
 
    ' CollectionをArrayにする
    strArray = CollectionToArray(strList)
 
End Sub

Collectionに一発変換できるメソッドがありそうなものですけどね。

変換するにしても、もっと良い方法がありそうです。

One Response to "【VBA】Collectionを配列にする"

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です