【问题标题】:Copy-Paste non-contiguous ranges复制粘贴非连续范围
【发布时间】:2019-09-05 11:55:20
【问题描述】:

我在 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 的可能性,要么我犯了一个错误(一遍又一遍)。

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

【问题讨论】:

    标签: excel vba


    【解决方案1】:

    您可以使用Range 对象的Areas 属性来获取联合范围。像下面这样的代码将遍历每个子范围,复制它们,然后将它们粘贴到其他地方。尝试适应您的需求,如果需要帮助,请回信。

    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
    

    【讨论】:

    • 很好的答案@user3561813! OP,请记住,复制单元格不仅仅是将目标单元格的值设置为源值(如果格式对您不重要)。在这个非常小的规模上,我认为这并不重要,但始终需要考虑。
    • @CharlesPL 这是一个很好的观点。较大的数据集可能会导致较大的性能损失。
    • 看起来不错,非常感谢!后续问题:我有另一张表,我基本上会这样做,但我会将数据复制到 PowerPoint。我将不得不考虑将它们放在同一张纸上,但这应该可行;但是,使用您的方法无法解决这两个区域是 PowerPoint 中的两个不同图像的事实,对吗?所以它们必须分开移动。
    • @Alex 我对 PowerPoint 的界面不太熟悉。我能想到的一种选择是将值复制到临时工作表上的连续范围内。从那里,您可以选择整个“加入”范围作为传递到 PowerPoint 的范围。
    • @user3561813 是的,这也是我的解决方案。由于它不是一个大数据集,所以它应该不是问题。再次感谢您的帮助!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-18
    • 2021-10-15
    • 2018-09-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多