0

データベースから配列ディメンションの文字列を取得するとします。これは次のようになります: これ"[1][2][1]"で対応する値が得られました。これを B と呼びます。

この形式の配列を作成する必要があります。(x,(B))

別の値を A と呼び、この Dimension-String:[1][1]があった場合、配列は次のように埋められます。(A,(B))

偶然にも、文字列を持つ C という名前の別の値がある場合[1][2][2]、配列は次のようになります。(A,(B,C))

私は次のようなことを考えました:

Redim Array1(1)
Redim Array2(1)
Array1(0) = A
Array2(0) = B
Array2(1) = C
Array1(1) = Array2()

しかし、それはダイナミックな方法で。vba はネストされた配列をサポートしていないようです。残念ながら、「次元」が一貫していないため、多次元配列は機能しません。任意の助けをいただければ幸いです

編集:試した:

c = 0
dim array1() as Variant
redim preserve array1(c)
array1(c) = split(mid("[1][4]",2,len("[1][4]")-2),"][")

型の不一致エラーが発生しました

4

3 に答える 3

1

これは機能します:

Private Sub testArray()
  Dim DynamicArray1() As Variant
  Dim DynamicArray2() As Variant

  ReDim DynamicArray1(1)
  ReDim DynamicArray2(1)
  DynamicArray1(0) = "A"

  DynamicArray2(0) = "B"
  DynamicArray2(1) = "C"

  DynamicArray1(1) = DynamicArray2
End Sub

Sub test2()
  Dim c As Integer: c = 0
  Dim array1() As Variant
  ReDim Preserve array1(c)
  array1(c) = Split(Mid("[1][4]", 2, Len("[1][4]") - 2), "][")
End Sub
于 2012-11-16T14:20:07.970 に答える
0

VBA では配列をネストできます。親配列がバリアント配列であることを確認するだけです。「子」配列は、任意のタイプにすることができます。その場合、親配列の要素は引き続きバリアントになりますが、バリアントはたまたま配列になります。これを使用する方法の例を次に示します。

Dim array1(1)
Dim array2(1 To 2) As String
array2(1) = "Hello"
array2(2) = "World"
array1(1) = array2
'Usage explanation:
'array1(1) returns the first element of parent array
'array1(1)(1) returns the first element of the returned element.
MsgBox array1(1)(1) & " " & array1(1)(2)
于 2012-11-16T14:17:46.507 に答える
0

配列ではなく常にコレクション/辞書を使用できます。必要に応じて入力して展開する必要はありません

于 2012-11-16T15:28:34.433 に答える