2

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

私は何が間違っているのですか?

ありがとう!

4

3 に答える 3

11
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
于 2012-12-21T00:27:41.530 に答える
1

私の通常の方法は、範囲オブジェクトと同じ次元の配列を再調整することです

範囲「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
于 2012-12-21T03:26:44.977 に答える
-2

この関数は、1D配列を「垂直」2D配列に転置し、これをに割り当てることができますRange.ValueApplication.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
于 2019-11-13T07:48:17.390 に答える