复制粘贴非连续范围

时间:2019-04-15 13:24:47

标签: excel vba

我在Excel中有数据。我想将标题和一些数据从表格的中间复制到Powerpoint。我知道您无法在Excel中复制非相邻单元格的选择,但我对它可以在VBA中使用感到印象深刻。

我的尝试:

With Workbooks(1).Sheets(1)
    Set rng = Union(.Range("B2:K3"), .Range("B45:K85"))
End With

我可以选择“ rng”,但不能将其粘贴到任何地方,因为我收到错误消息,即您不能粘贴不相邻的单元格。

我也尝试过此方法,但是导致整个表(B2:K85)被复制:

With ThisWorkbook.Sheets("Sheet1")
        Set rng1 = .Range("B2:K3")
        Set rng2 = .Range("B45:K85")
        Set NewRng = .Range(rng1.Address & ":" & rng2.Address)
End With

我已经搜索了这个问题并尝试了各种方法,但是我误解了VBA可能发生的情况,或者我犯了一个错误(一遍又一遍)。

那么我必须更改我的代码还是必须解决它?我的替代解决方案是复制粘贴两个范围中的每个范围,将它们置于彼此之下,然后复制整个现已连续的范围。

1 个答案:

答案 0 :(得分:4)

您可以使用Areas对象的Range属性来获取联合范围。如下所示的代码将循环遍历每个子范围,将其复制并粘贴到其他位置。尝试适应您的需求,并在需要帮助时回信。

Sub Test()
    Dim rng As Range
    Dim r As Range
    Dim destination As Range


    Set rng = Union(Range("A1:B3"), Range("D1:E2"))
    Set destination = Range("H1")


    For Each r In rng.Areas
        r.Copy destination
        Set destination = destination.Offset(, 3)
    Next r
End Sub