2017-03-24 13 views
1

Excelの範囲に4D配列を書き込む際に問題があります。 範囲のVBAマルチ配列

varArray(0) 
- varArray(0)(0) "test01" 
- varArray(0)(1) "test02" 
- varArray(0)(2) "test03" 
- varArray(0)(3) "test04" 

varArray(1) 
- varArray(1)(0) "test11" 
- varArray(1)(1) "test12" 
- varArray(1)(2) "test13" 
- varArray(1)(3) "test14" 

は、最終的にはアレイ内の唯一の2「アイテム」よりもあるでしょうが、理解するために、私はそれらの2をdisplayded:

私のアレイは、このようになります。

私は転置でそれを試してみましたが、私は

Range("A" & CellIndex) = Application.Transpose(varArray(0,1)) 

が動作しないサブ項目にアクセスしないcoudl:S

出力(範囲に書き込み)、次のようになります。

 A  B  C  D 
1 test01 test02 test03 test04 
2 test11 test12 test13 test14 

誰も私にこれを助けることができますか?

+0

"動作しない" - エラーが発生します、えっ?エラーは何ですか? 'varArray(0,0)'のように配列を違う構造にすることはできますか? –

+0

あなたのコードにあるものと現在の出力を表示して、既に得られたもののトラブルシューティングに役立てることができます。 – Mike

答えて

1

Application.Transposeを2回使用できます。列のワークシートにこの意志出力:D

Sub CreateArray() 
    Dim varArray As Variant 
    varArray = Array(Array(1, 2, 3, 4), Array(11, 12, 13, 14)) 

    For i = 0 To 1 
     ThisWorkbook.Worksheets("Sheet1").Range("A1:D1").Offset(i, 0).Value = Application.Transpose(Application.Transpose(varArray(i))) 
    Next i 
End Sub 
+0

これです!ありがとうございます、ソリューションは完璧に動作します。オフセットは欠けていたビットだった – miekW

1

あなたはこのような何かしたいですか:イミディエイトウィンドウで

ます。Option Explicit

Public Sub TestMe() 

    Dim varArray   As Variant 
    Dim lCounter   As Long 
    Dim lCounter2   As Long 
    Dim rngCell    As Range 

    varArray = Array(Array(1, 2, 3, 4), Array(11, 12, 13, 14)) 
    Set rngCell = Cells(1, 1) 

    For lCounter = LBound(varArray) To UBound(varArray) 
     For lCounter2 = LBound(varArray(lCounter)) To UBound(varArray(lCounter)) 

      Debug.Print varArray(lCounter)(lCounter2) 

      rngCell = varArray(lCounter)(lCounter2) 
      Set rngCell = rngCell.Offset(0, 1) 

     Next lCounter2 
     Debug.Print "-----------" 
     Set rngCell = Cells(rngCell.Row + 1, 1) 

    Next lCounter 

End Sub 

結果はこの1つである:

1 
2 
3 
4 
----------- 
11 
12 
13 
14 
----------- 

この出力から、あなたは簡単に来ることができるがあなたの望むもの。

+1

こんにちはVityata、私は範囲にデータを書きたいと思います。それぞれの配列のインデックスは1行になるので、上の2つの列は次のようになります。項目1 A1:D1と項目2 A2:D2 – miekW

+0

2行が続き、範囲に... – Vityata

1

試してみてください。私はあなたが欲しいの出力は、単にあなたの配列ではなく、あなたの転置配列で

Dim varArray(0 To 1, 0 To 3) As String 
    varArray(0, 0) = "test01" 
    varArray(0, 1) = "test02" 
    varArray(0, 2) = "test03" 
    varArray(0, 3) = "test04" 
    varArray(1, 0) = "test11" 
    varArray(1, 1) = "test12" 
    varArray(1, 2) = "test13" 
    varArray(1, 3) = "test14" 
Range("A1:D2") = varArray() 
Range("F1:G4") = Application.Transpose(varArray()) 

と思います。しかし私は2つの出力をコードに入れました。あなたは配列に単一アイテムを転置しようとしている

+1

私はこの配列はOPのそれとは異なる構造を持っていると思う。 OPには、単純な2次元配列ではなく、配列を含む1次元配列があります。 – CallumDA

+0

はい。これは配列の配列ではありません...トランスポーズしたい場合は、演算子を2回(別のものの中に1つ)使用する必要があります。そのため、私はこの簡単な方法を提案しています... – Pspl

1

...住所が自由に変更してください:

Application.Transpose(varArray(0,1)) 

はまた、この配列は、このような方法でインデックス化されていません。 varArray(0)(1)がありますが、にはありません。varArray(0,1)です。

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

Dim x as Long 
For x = LBound(varArray) To UBound(varArray) 
    Range("A1").Resize(1, UBound(varArray(x)) + 1).Offset(x) = Application.Transpose(Application.Transpose(varArray(x))) 

Next