如何粘贴整个数组而不在VBA中循环它?

spe*_*s10 11 arrays excel vba excel-vba

我有这个代码将填充数组

Sub rangearray()

    Dim arr() As Variant
    Dim Rng As Range
    Dim myCell As Range
    Dim i As Integer

    Set Rng = ActiveSheet.Range("G10:G14")

    For Each myCell In Rng
        ReDim Preserve arr(i)
        arr(i) = myCell
        i = i + 1
    Next myCell

    ActiveSheet.Range("H10:H14") = arr()

End Sub
Run Code Online (Sandbox Code Playgroud)

在这里,您可以看到监视窗口中的值是已加载的值

在此输入图像描述

除此之外,当我将数组添加回工作簿时,它只会回滚数组的第一个元素.

在此输入图像描述

是否可以将整个数组粘贴到工作表而不必遍历数组?

在看了Sorceri的链接后,我修改了代码以使用.Transpose函数,所以我修改后的代码现在看起来像这样:

Sub rangearray()

    Dim arr() As Variant
    Dim Rng As Range
    Dim myCell As Range
    Dim i As Integer

    Set Rng = ActiveSheet.Range("A1:A5")

    For Each myCell In Rng
        ReDim Preserve arr(i)
        arr(i) = myCell
        i = i + 1
    Next myCell

    ActiveSheet.Range("B1:B5") = WorksheetFunction.Transpose(arr)

End Sub
Run Code Online (Sandbox Code Playgroud)

Sor*_*eri 12

你会想要使用转置工作表函数http://msdn.microsoft.com/en-us/library/office/ff196261.aspx

见下文.您必须将其分配给范围的值

Sub rangearray()

Dim arr() As Variant
Dim Rng As Range
Dim myCell As Range
Dim i As Integer

Set Rng = ActiveSheet.Range("A1:A5")

For Each myCell In Rng
    ReDim Preserve arr(i)
    arr(i) = myCell
    i = i + 1
Next myCell

ActiveSheet.Range("B1:B5").Value = WorksheetFunction.Transpose(arr)

End Sub
Run Code Online (Sandbox Code Playgroud)

  • 裸链接应作为评论发布;)或者您可能想要改进它?如果链接消失怎么办?它对任何未来的用户都不利. (2认同)
  • 这并不意味着你应该提出一个低质量的答案;)我可能会根据[THIS]对你进行投票(http://meta.stackexchange.com/questions/199929/guess-i-have-still-not-得到了它的悬念)但我选择了第二个选项(见@ juergend的答案)...让你知道,以便你可以改善答案;) (2认同)

Sid*_*out 9

正如我在上面的评论中提到的那样,你不需要一个数组来执行你想要做的动作,但是如果你只想要一个数组解决方案那么你就不需要在循环中填充数组了很长的路要走.直接将范围的值分配给数组.它将创建一个您不需要转置的2D数组.

Sub rangearray()
    Dim arr
    Dim Rng As Range

    With ActiveSheet
        Set Rng = ActiveSheet.Range("G10:G14")

        arr = Rng.Value

        .Range("H10").Resize(UBound(arr, 1)).Value = arr
    End With
End Sub
Run Code Online (Sandbox Code Playgroud)