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