配列の要素をCollection化するFunction

配列の要素をコレクション化するFunction

配列の要素をコレクションに格納する

ちょっと思いつきで作ってみた。

リスト1 標準モジュール
Public Function convertArrayToCollection( _
                  ByRef targetArray As Variant) As Collection
  If Not IsArray(targetArray) Then Exit Function
  Dim tmp As New Collection
  Dim i As Long
  For i = LBound(targetArray) To UBound(targetArray)
    tmp.Add targetArray(i)
  Next
  Set convertArrayToCollection = tmp
End Function

見ての通り、引数で渡された配列の要素を1つ1つ取り出してコレクションにAddしているだけ。

使ってみた

次のコードで実行。

スト2 標準モジュール
Public Sub testArrayToCollection()
  Dim ar(3) As String    '……(1)'
  ar(0) = "アホ"
  ar(1) = "ボケ"
  ar(2) = "クズ"
  ar(3) = "デコスケ"
  Dim cl As New Collection    '……(2)'
  Set cl = convertArrayToCollection(ar)
  Dim i As Integer
  With cl
    For i = 1 To .Count
      Debug.Print cl.Item(i)
    Next
  End With
End Sub

まず(1)からの5行

Dim ar(3) As String
ar(0) = "アホ"
ar(1) = "ボケ"
ar(2) = "クズ"
ar(3) = "デコスケ"

で、実験用に要素数4のString型配列ar()を用意。

(2)からの2行

Dim cl As New Collection
Set cl = convertArrayToCollection(ar)

で、Collection型の変数clをNewして、リスト1のFunctionの返り値をセット。

後は、Forループで要素を1つ1つ取り出してDebug.Printでイミディエイトに表示しているだけ。

実行結果

f:id:akashi_keirin:20180309205053j:plain

ひとまず、意図どおり。

ただし、1次元配列にしか対応していないので、なんだかなあ、である。

@akashi_keirin on Twitter