2017-02-15 7 views
1

多次元配列を生成する方法はわかりません。私のコードはちょうど理解し始めましたが、何が間違っているのかわかりません、それは1つのループを除いて動作していません。VBA Redim Preserve

Sub test() 
    Dim Arr1 As Variant 
    Dim Row As Long 
    For Row = 0 To 3    
     ReDim Arr1(9, Row) 
     Arr1(0, Row) = "Zero" 
     Arr1(1, Row) = "One" 
     Arr1(2, Row) = "Two" 
     Arr1(3, Row) = "Three" 
     Arr1(4, Row) = "Four" 
     Arr1(5, Row) = "Five" 
     Arr1(6, Row) = "Six" 
     Arr1(7, Row) = "Seven" 
     Arr1(8, Row) = "Eight" 
     Arr1(9, Row) = "Nine"  
     Row = Row + 1 
     ReDim Preserve Arr1(9, Row)   
    Next Row 
    MsgBox Arr1(0, 0) 
End Sub 

おかげ

+3

最初REDIMが内側にありますのための??? – gbianchi

+0

これらは、配列に配置するハードコードされた値になりますか(質問内のコードはMCVEですか、実際には使用するデータですか)?または、ワークシートの範囲から値を設定しようとしていますか?それとも計算された値ですか? – YowE3K

答えて

2

はこれを試してみてください:

Sub test() 
    Dim limit As Integer 
    limit = 3 'get limit from somewhere 

    Dim Arr1 as Variant   
    Redim Arr1(0 To 9, 0 To limit) As Variant 

    Dim Row As Long 
    For Row = 0 To 3    
     Arr1(0, Row) = "Zero" 
     Arr1(1, Row) = "One" 
     Arr1(2, Row) = "Two" 
     Arr1(3, Row) = "Three" 
     Arr1(4, Row) = "Four" 
     Arr1(5, Row) = "Five" 
     Arr1(6, Row) = "Six" 
     Arr1(7, Row) = "Seven" 
     Arr1(8, Row) = "Eight" 
     Arr1(9, Row) = "Nine"   
    Next Row 
    MsgBox Arr1(0, 0) 
End Sub 

あなたはすでにあなたの配列がそうちょうど開始時に制限を定義しているしたいの限界を知っています。それ以上のポイントでこれらを再定義する必要はありません。

また、Next RowRow=Row+1と同じことがそうしたくないん両方

更新

あなたはまた、配列

Sub test() 
    Dim limit As Integer 
    limit = 3 'get limit from somewhere 

    Dim Arr1 as Variant   
    Redim Arr1(0 To 9, 0 To limit) As Variant 

    Dim numbers As Variant 
    numbers = Array("Zero", "One", "Two", "Three", "Four", "Five", "Six", "Seven", "Eight", "Nine") 

    Dim Row As Integer, Col As Integer 
    For Row = 0 To 3 
     For Col = 0 To 9 
      Arr1(Col, Row) = numbers(Col) 
     Next Col 
    Next Row 
    MsgBox Arr1(0, 0) 
End Sub 

であなたの文字列を置くことができるような場合更新2

は本当に猫を肌するので、多くの方法がどのようにコレクションを使用することについて...あります

Sub test() 
    Dim numbers As Variant 
    numbers = Array("Zero", "One", "Two", "Three", "Four", "Five", "Six", "Seven", "Eight", "Nine") 

    Dim col As Collection 
    Set col = New Collection 

    Dim i As Integer 
    For i = 0 To 3 'get limit from somewhere 
     col.Add numbers 
    Next i 

    MsgBox col(1)(0) 'col(1 to 4)(0 to 9) 
End Sub 
+1

実際の行+1は、2ステップを短くします – gbianchi

+0

ありがとうございました - 私はよく説明しませんでした! – CallumDA

+0

こんにちは、ありがとう、しかし、2番目の次元0から3は固定されていないと私はそれをどのように変更することができます動的ですか? – Shan

2

範囲はループせずにそれらを繰り返すために使用することができます。

Dim r As Range, Arr1 
Set r = Cells.Resize(10, 4) 

r = [{"Zero";"One";"Two";"Three";"Four";"Five";"Six";"Seven";"Eight";"Nine"}]  
Arr1 = r   ' Arr1 is now (1 To 10, 1 To 4) As Variant 
r.ClearContents 
+0

Wizardry!.. Nice回答 – CallumDA

+0

Wizardry?ほとんど。美しくエレガントな - はい: – PaulG

関連する問題