excel 如何使用XML查找一个范围是否包含在另一个范围中?

bhmjp9jg  于 7个月前  发布在  其他
关注(0)|答案(8)|浏览(65)

我有一个问题比较两个范围。为了简单起见,我将采取两个简单的范围M6:M10M6:M8,我想知道第二个是否包含在第一个和第一件事,我认为是写

Sub example()
    Dim range1, range2, inte As range
        Set range1 = range("M6:M10")
        Set range2 = range("M6:M8")
        Set intersec = Intersect(range1, range2)
        If intersec = range2 Then
            [if statement]
        End If
    End Sub

字符串
但此过程返回以下错误:

  • PRB: Error 13 (Type Mismatch) & Error 3061 w/ SQL Queries*

所以也许我不能用这种方式使用方法“intersect”.

piztneat

piztneat1#

这里有一个方法:

Sub ProperSubSet()
    Dim range1 As Range, range2 As Range, inte As Range
    Dim r As Range

    Set range1 = Range("M6:M10")
    Set range2 = Range("M6:M8")

    For Each r In range2
        If Intersect(r, range1) Is Nothing Then
            MsgBox "range2 is not a proper subset of range1"
        Exit Sub
        End If
    Next r
    MsgBox "range2 is a proper subset of range1"
End Sub

字符串

pbossiut

pbossiut2#

首先,将range1和range2变量声明为范围。
然后,当您将intersec变量与range2变量进行比较时,使用range方法的address属性来比较内容。
比如说:

Sub example()
Dim range1 As Range, range2 As Range, intersec As Range
    Set range1 = Range("M6:M10")
    Set range2 = Range("M11:M12")
    Set intersec = Intersect(range1, range2)
    If Not intersec Is Nothing Then
        If intersec.Address = range2.Address Then
            '[CODE GOES HERE]
        End If
    End If
End Sub

字符串

iqjalb3h

iqjalb3h3#

这里有一些你可以尝试的东西:

Sub Test()
    Dim R1 As Range, R2 As Range, R3 As Range

    Set R1 = Application.InputBox("Select first range", , , , , , , 8)
    Set R2 = Application.InputBox("Select second range", , , , , , , 8)

    Set R3 = Intersect(R1, R2)
    If Not R3 Is Nothing Then
        If R3.Address = R1.Address Then
            MsgBox "First Range is subset of second"
        ElseIf R3.Address = R2.Address Then
            MsgBox "Second Range is subset of first"
        Else
            MsgBox "Neither range contained in the other"
        End If
    Else
        MsgBox "Ranges are disjoint"
    End If

End Sub

字符串

zzwlnbp8

zzwlnbp84#

我使用它的方式是这样的:

If Application.Intersect(rng1, rng2) Is Nothing Then 
    'herecomesthecode
Else
    'herecomesthecode
End if

字符串
你可以删除else或者写Not nothing,这取决于你想要实现什么。

crcmnpdw

crcmnpdw5#

另一种变体:

Sub ProperSubSet2()
    Dim range1 As Range, range2 As Range
    Set range1 = [M6:M10]
    Set range2 = [M6:M8]
    Set rComp = Intersect(range2, range1)

    If Not rComp Is Nothing Then
        If rComp.Cells.Count = range2.Cells.Count Then
            MsgBox "range2 is a proper subset of range1"
        Else
            MsgBox "range2 is not a proper subset of range1"
        End If
    Else
        MsgBox "Both ranges aren't intersected at all!"
    End If

End Sub

字符串

muk1a3rh

muk1a3rh6#

你可以做一个交集与范围的比较,以确定一个范围是否包含在另一个范围内。一些代码来显示这一点。

Sub TestExample()
    Dim Range1 As Range: Set Range1 = Range("M6:M10")
    Dim Range2 As Range: Set Range2 = Range("M6:M8")
    MsgBox Example(Range1, Range2)
End Sub

Function Example(Range1 As Range, Range2 As Range) As Integer
    Dim Overlay As Range: Set Overlay = Application.Intersect(Range1, Range2)
    If Not Overlay Is Nothing Then
        If Overlay.Address = Range1.Address Then Example = Example + 1
        If Overlay.Address = Range2.Address Then Example = Example + 2
    End If
End Function

字符串
如果没有一个范围完全包含在另一个范围内,则该函数将返回0,如果第一个范围包含在第二个范围内,则返回1,如果第二个范围包含在第一个范围内,则返回2,如果范围相等,则返回3

jtjikinw

jtjikinw7#

对于一个更强大的解决方案,适用于具有多个区域的范围,彼此不同的范围,具有非常大数量的单元格的范围(所以.CountLarge,而不是.Count),那么这将起作用:

Function RangeContainsRange(BigRange As Range, SmallRange As Range) As Boolean
    If BigRange.Parent Is SmallRange.Parent Then
        RangeContainsRange = Application.Union(BigRange, SmallRange).Cells.CountLarge = BigRange.Cells.CountLarge
    Else
        RangeContainsRange = False
    End If
End Function

字符串

3df52oht

3df52oht8#

Function is_subrange(rn1 As Range, rn2 As Range) As Boolean
    Dim rn As Range
    is_subrange = True
    For Each rn In rn1.Cells
        If Intersect(rn, rn2) Is Nothing Then
            is_subrange = False
            Exit For
        End If
    Next
End Function

字符串

相关问题