使用VBA复制不相交的范围

时间:2018-04-26 16:44:39

标签: excel excel-vba vba

我试图向朋友解释复制不相交的范围,并发现我甚至无法向自己解释。我们有以下样本数据:

enter image description here

使用超级简单的示例代码,如:

Sub KopyTest()
    Dim rng1 As Range, rng2 As Range, rng3 As Range

    Set rng1 = Range("C6:D11,C13:D14,C16:D18")
    Set rng2 = Range("C6:D11,F6:F11")
    Set rng3 = Range("C6:D11,G9")

    rng1.Copy
    rng2.Copy
    rng3.Copy
End Sub

rng1由三个不相交的块组成黄色+绿色+蓝色
rng2由两个不相交的块组成黄色+粉红色
rng3由两个不相交的块组成块黄色+单个灰色单元

前两个范围复制得很好。 rng3无法复制,我们收到多重选择错误消息。

我们不明白可以直接复制哪些不相交的范围,哪些集需要 UNION()以及哪些集合将失败

一旦我们理解了这一点,我们就可以编写一些代码来分析范围并确定它是否“可复制”而不依赖于OnError

1 个答案:

答案 0 :(得分:3)

我认为答案是here on the microsoft支持页面,针对您收到的特定错误(来自XL2000)。它可能是你所期望的那样:

  

当您选择单元格或范围时,可能会出现这些错误消息   在不同的列或不同的行中。但是,你可以复制和   粘贴不相邻的范围而不会收到错误消息   选择包含以下任何内容:

     

同一列中的多行,例如A1,A3,A5。

     

同一行中的多个列,例如A2,C2,E2。

     

相同列和行中的多个行和列,例如,A1,C1,A3,C3,A5,C5。

你的最后一个范围不适合三种可接受的多选中的任何一种。

允许的多选范围与阵列公式或sumproduct公式中允许的范围非常相似。

在该帮助页面的下一部分中使用了措辞" ...必须保留一个连续的矩形..."。而且我认为这可能是说明多选复制/剪切/粘贴中可接受内容的最简洁方式。换句话说,考虑一下如果您.Copy .Cut这个多选范围而不是.yml会发生什么。结果有意义吗?剩余的范围可以"滑动"一起去除那些多选细胞?如果没有,那么你就无法复制。原因。