首页 > 解决方案 > 使用 VBA 复制不相交的范围

问题描述

我试图向朋友解释复制不相交的范围,但发现我什至无法向自己解释。我们有如下示例数据:

在此处输入图像描述

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

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.

标签: excelvba

解决方案


我相信您收到的特定错误(来自 XL2000)的答案在 microsoft支持页面上。它和你想象的一样滑稽:

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

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

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

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

您的最后一个范围不适合三个公认的多项选择中的任何一个。

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

在该帮助页面的下一部分中,使用了措辞“......必须保持连续的矩形......”。而且我认为这可能是说明多选复制/剪切/粘贴中可接受的内容的最简洁方式。换句话说,想想如果这个多选范围不是.Copy你会发生什么。.Cut结果有意义吗?剩余的范围可以“滑动”在一起以删除那些多选的单元格吗?如果没有,那么你也不能复制。出于原因。


推荐阅读