Dim A (1 To 3) As String
配列をセルの垂直範囲にダンプしようとするA1:A3
と、配列の最初のセルがすべての範囲で複製されます。
たとえば、そのように仮定 A(1) = "a" , A(2) = "b" , A(3) = "c"
すると、結果はa
すべてのA1:A3
範囲にあります。
コードはRange("A1:A3").Value = A
私は何が間違っているのですか?
ありがとう!
Sub Tester()
Dim a(1 To 3)
a(1) = "a"
a(2) = "b"
a(3) = "c"
Range("A1:A3").Value = a 'all "a"
Range("A1:C1").Value = a 'works, because left-to-right is the default
Range("A1:A3").Value = Application.Transpose(a) 'works
End Sub
私の通常の方法は、範囲オブジェクトと同じ次元の配列を再調整することです
範囲「A1:A3」の場合、3 *12Dアレイです
Sub testing()
Dim a()
' a(1 to rowCount, 1 to columnCount)
ReDim a(1 To 3, 1 To 1)
a(1, 1) = "A"
a(2, 1) = "B"
a(3, 1) = "C"
Range("A1:A3").Value = a
End Sub
この関数は、1D配列を「垂直」2D配列に転置し、これをに割り当てることができますRange.Value
。Application.Transpose
大きなアレイ(Excel 2013 x64の14464セル)には適していません。
Private Function array_as_2d(arr)
'Convert 1D array into 2D array
Dim tmp
tmp = Array()
lb = LBound(tmp)
ReDim tmp(LBound(arr) To UBound(arr), lb)
For i = LBound(arr) To UBound(arr)
tmp(i, lb) = arr(i)
Next i
array_as_2d = tmp
End Function
Sub test_assign()
Dim a(0 To 2)
a(0) = 7
a(1) = 8
a(2) = 9
Range("A1:A3") = array_as_2d(a)
Range("B1:B3") = array_as_2d(Array(1, 2, 3))
End Sub