Как вставить массив в Excel? - PullRequest
       0

Как вставить массив в Excel?

0 голосов
/ 10 января 2019

Я пытаюсь вставить диапазон предопределенных значений в Excel. Вот мой код:

Sub arr()

Dim arr As Variant
Set arr = [1,2,3,4,5]

    With ActiveSheet

        .Range("B1").Value = arr

    End With

End Sub

Что я пытаюсь сделать, это в ячейку B1, вставить массив, который у меня есть выше, со значениями от 1 до 5. Кроме того, если бы я хотел отобразить эти значения вертикально, как бы я поступил об этом?

Спасибо

GSC

Ответы [ 2 ]

0 голосов
/ 10 января 2019

Array To Range

Sub ArrayToRange()

    Const cString  As String = "1,2,3,4,5"

    Dim arr As Variant
    Dim vnt As Variant
    Dim i As Integer
    Dim cCell As String

    ' Write list to 1D Array.
    arr = Split(cString, ",")

    'arr = Array(1, 2, 3, 4, 5)

  ' 1D Array - arr

    ' Write to "A1:A5".
    cCell = "A1"
    Range(cCell).Resize(UBound(arr) + 1) = Application.Transpose(arr)

    '' Write to "B1:F1", writes values as text.
    'cCell = "B1"
    'Range(cCell).Resize(, UBound(arr) + 1) = arr

    ' Write to "B1:F1".
    cCell = "B1"
    Range(cCell).Resize(, UBound(arr) + 1) _
            = Application.Transpose(Application.Transpose(arr))

  ' 2D Array - vnt

    ' Resize 2D Array.
    ReDim vnt(1 To UBound(arr) + 1, 1 To 1)

    ' Write from 1D to 2D array.
    For i = 0 To UBound(arr)
        vnt(i + 1, 1) = arr(i)
    Next

    ' Write to "H1:H5".
    cCell = "H1"
    Range(cCell).Resize(UBound(vnt)) = vnt

    ' Write to  "I1:M1".
    cCell = "I1"
    Range(cCell).Resize(, UBound(vnt)) = Application.Transpose(vnt)

End Sub
0 голосов
/ 10 января 2019

Вы можете использовать Join() для объединения массива в одну ячейку.

Sub arr()

Dim arr() As Variant
Dim i As Long
arr = Array(1, 2, 3, 4, 5)

    With ActiveSheet
        .Range("B1").Value = Join(arr, ",")
        ' The loop below will start in C1, and add a single array value until it's exhausted.
        For i = LBound(arr) To UBound(arr)
            .Cells(i + 1, 3).Value = arr(i)
        Next i
    End With
End Sub

Или, для "вертикального" массива, замените мой цикл For i на: .Cells(1,3).resize(Ubound(arr)+1).Value = Application.Transpose(arr) (Спасибо @ScottCraner!)

( Спасибо @AndyG за идею Join () )

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...