【发布时间】:2013-04-12 09:44:02
【问题描述】:
我可以找到很多关于“Union”和“Intersect”VBA 方法的问题和示例,但我找不到关于“Set Difference”方法的任何内容?这是否存在(除了使用 union 和 intersect 的组合)?
我正在尝试找到一种简单的方法来获取所有 range1,不包括与 range2 重叠的任何 range1,而不知道任一范围的大小或形状。
任何帮助将不胜感激。
编辑。
尝试解决方案,其中 rng1 是红色部分,rng2 是蓝色部分(已调试以检查这些是否正确):
rng = SetDifference(rng, highlightedColumns)
Function SetDifference(Rng1 As Range, Rng2 As Range) As Range
On Error Resume Next
If Application.Intersect(Rng1, Rng2).Address <> Rng2.Address Then
Exit Function
On Error GoTo 0
Dim aCell As Range
For Each aCell In Rng1
Dim Result As Range
If Application.Intersect(aCell, Rng2) Is Nothing Then
Set Result = Union(Result, aCell)
End If
Next aCell
Set SetDifference = Result
End If
End Function
【问题讨论】:
-
不幸的是,没有像
Range.Difference(Range(A), Range(B))这样的伪代码。我们需要处理Union、Intersect等属性和指令。显示您的范围(图片)或您尝试过的内容(代码)以获得进一步的支持。 -
因此,在红色范围内选择不在蓝色范围内的所有内容的方法基本上就是我所追求的 - 我希望有一种简单简洁的方法来做它像伪代码你已经发布了
-
问题在于设置
range.difference的三种可能尝试。就像你的情况一样——你想要 a)red minus blue,另一个可能有 b)blue minus red,最后的第三个选项是 3)not intersected ranges...你试过什么吗,我的意思是任何代码? -
我在网上找到了上述解决方案并尝试过,但它目前给我错误 1004 - 应用程序定义或对象定义错误。有什么建议吗?
-
调用这个函数,前面加上
set,比如:Set rng = SetDifference(rng, highlightedColumns)
标签: vba excel set theory range