Vba 如何获取范围中非并集的部分?
我知道我可以通过书写得到两个范围的并集:Vba 如何获取范围中非并集的部分?,vba,excel,Vba,Excel,我知道我可以通过书写得到两个范围的并集: Dim r1 as range Dim r2 as range Union(r1, r2) 但是我能得到r1或r2中不在联合体中的范围吗?union()method()组合了整个范围,这样就不会有r1和r2中不在联合体(r1,r2)中的部分 但是,如果要查找重叠(以及不重叠的单元格),可以查看Intersect()method() 次级测试() Intersect()方法的图片表示: 有一些有趣的函数与查找不相交部分有关。我建议@TimWillia
Dim r1 as range
Dim r2 as range
Union(r1, r2)
但是我能得到r1或r2中不在联合体中的范围吗?union()
method()组合了整个范围,这样就不会有r1
和r2
中不在联合体(r1,r2)中的部分
但是,如果要查找重叠(以及不重叠的单元格),可以查看Intersect()
method()
次级测试()
Intersect()
方法的图片表示:
有一些有趣的函数与查找不相交部分有关。我建议@TimWilliam的答案Union()
method()组合整个范围,这样就不会有r1
和r2
的部分不在Union(r1,r2)
中
但是,如果要查找重叠(以及不重叠的单元格),可以查看Intersect()
method()
次级测试()
Intersect()
方法的图片表示:
有一些有趣的函数与查找不相交部分有关。我建议@TimWilliam的答案如果x属于r1=>x属于r1和其他事物的并集。 没有任何属于r1的东西不属于联盟。
r2也是一样。如果x属于r1=>x属于r1和其他事物的并集。
Sub CombinedMinusIntersect()
Dim rng1 As Range, rng2 As Range, c As Range
Dim rngInt As Range, rngUnion As Range
Dim rngFinal As Range
Set rng1 = Range("A1:B5,C6:D10")
Set rng2 = Range("D9:G16")
Set rngUnion = Application.Union(rng1, rng2)
Set rngInt = Application.Intersect(rng1, rng2)
If Not rngInt Is Nothing Then
For Each c In rngUnion
If Application.Intersect(c, rngInt) Is Nothing Then
If rngFinal Is Nothing Then
Set rngFinal = c
Else
Set rngFinal = Application.Union(rngFinal, c)
End If
End If
Next c
Else
Set rngFinal = rngUnion
End If
rngFinal.Interior.Color = vbYellow
End Sub
没有任何属于r1的东西不属于联盟。
r2也是一样。我能把红色和绿色区域的范围变成一个变量吗?我想设置r=r.green+r。red@user1283776这会变得更复杂,但我在网站上添加了一个链接和代码,与删除部分范围相关。因此,您希望从
联合
中删除相交
。我可以将红色和绿色区域的范围设置为一个变量吗?我想设置r=r.green+r。red@user1283776这会变得更复杂,但我在网站上添加了一个链接和代码,与删除部分范围相关。因此,您希望从联合
中删除相交
。这就是我在场外找到的代码。更干净。酷,非常聪明,对我来说是一个很好的实用功能。我不知道答案会这么复杂:-)但是非常容易理解和干净的代码。非常感谢。这就是我在场外找到的代码。更干净。酷,非常聪明,对我来说是一个很好的实用功能。我不知道答案会这么复杂:-)但是非常容易理解和干净的代码。非常感谢。
Sub CombinedMinusIntersect()
Dim rng1 As Range, rng2 As Range, c As Range
Dim rngInt As Range, rngUnion As Range
Dim rngFinal As Range
Set rng1 = Range("A1:B5,C6:D10")
Set rng2 = Range("D9:G16")
Set rngUnion = Application.Union(rng1, rng2)
Set rngInt = Application.Intersect(rng1, rng2)
If Not rngInt Is Nothing Then
For Each c In rngUnion
If Application.Intersect(c, rngInt) Is Nothing Then
If rngFinal Is Nothing Then
Set rngFinal = c
Else
Set rngFinal = Application.Union(rngFinal, c)
End If
End If
Next c
Else
Set rngFinal = rngUnion
End If
rngFinal.Interior.Color = vbYellow
End Sub