2

配列の作成方法はわかったのですが、アイテムを簡単にプッシュできません。次の位置へのインデックスを維持し、アイテムをプッシュするたびにインクリメントする必要があります。

また、プッシュ メソッドとまったく同じように機能する素敵な .Add メソッドを持つコレクションも見つけました。しかし、どうやって彼らに参加するのですか?グローバル Join メソッドは、コレクションでは機能しません。

ここで何が欠けていますか?誰でも配列を定義し、インデックスなしでアイテムを簡単にプッシュし、それらを「、」で区切られた文字列に出力するのを手伝ってくれますか?

ありがとう

4

2 に答える 2

10

直接それを行うことはできません。VBAの配列は通常、使用する前にインデックスを付けてディメンション化する必要があります。

変数を割り当てる前に、動的配列を使用してサイズを変更できます。

Dim arr() As String
ReDim arr(0)

arr(UBound(arr)) = "Some String"
ReDim Preserve arr(UBound(arr) + 1)
arr(UBound(arr)) = "Some Other String"
ReDim Preserve arr(UBound(arr) + 1)
arr(UBound(arr)) = "Some 3rd String"

MsgBox Join(arr, ",")

保存キーワードは、値を上書きするのではなく、配列内の値を維持します。ただし、Preserveはコストがかかり、配列の最後の次元のサイズを変更することしかできないため、上記のアプローチは一般的に推奨されません。

コレクションは異なり、VBA環境では速度が遅く、一般的に柔軟性が低くなります(どの環境かは指定していませんが、Excelを想定します)

Dim coll As Collection
Dim itm As Variant
Dim tempS As String


Set coll = New Collection
coll.Add "Some String"
coll.Add "Some Other String"
coll.Add "Some 3rd String"

For Each itm In coll
    tempS = tempS & itm & ","
Next itm

MsgBox Left(tempS, Len(tempS) - 1)

配列を作成するには、それらをループする必要があります。

ニーズに応じて、他にも多数のオプションがあります

組み込みの方法

文字列については、splitをご覧ください。

Const stri As String = "Some String, Some Other String, Some 3rd String"
Dim arr() As String

arr = Split(stri, ",")

MsgBox Join(arr, ",")

外部オブジェクトの使用

スクリプト辞書

Dim dic As Object

Set dic = CreateObject("scripting.Dictionary")
dic.Add "1", "Some String"
dic.Add "2", "Some Other String"
dic.Add "3", "Some 3rd String"

Debug.Print Join(dic.items, ",")

.Net arrayList

Dim al As Object

Set al = CreateObject("System.Collections.Arraylist")
al.Add "Some String"
al.Add "Some Other String"
al.Add "Some 3rd String"

MsgBox Join(al.ToArray(), ",")
于 2012-10-22T14:32:31.237 に答える
1

Collection オブジェクトを使用して、For...Each ステートメントを使用してループすることができます。

Dim colItems As New Collection
Dim strOutput As String

'Add Items to Collection
colItems.Add "Item 1"
colItems.Add "Item 2"
colItems.Add "Item 3"

'Loop through the collection and place items in strOutput
For Each Item in colItems
    If strOutput <> "" Then strOutput = strOutput & ","
    strOutput = strOutput & Item
Next

Msgbox strOutput

メッセージボックスに が表示されますItem 1,Item 2,Item3

このコード行:

If strOutput <> "" Then strOutput = strOutput & ","

最初にループを通過する場合を除き (項目が追加される前)、すべての項目の後にコンマを追加します。

于 2012-10-22T14:16:13.937 に答える