2016-04-11 97 views
2

我有一个比较两个范围的问题。为了简单起见,我将采取两个简单的范围M6:M10M6:M8,我想知道,如果第二个是包含在第一个的第一件事情我虽然是写如何查找范围是否包含在另一个范围内? VBA

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

所以也许我不能使用的方法“相交”以这种方式......如何测试范围的包括任何暗示? 非常感谢!

+0

'Dim range1,range2,inte As range' decla res'range1'和'range2'是变体(不是这就是问题)。另外 - 你提到的错误似乎与你显示的代码无关,但可能隐藏在方括号中。 –

+0

也相交的方法如果没有相交,则不返回,可能是一个问题。您应该检查相交是否为第一个 –

+0

您能否确认哪条线路会产生错误?怀疑它会是'If intersec = range2 Then'。如果您试图确认intersec和range2完全重叠,请尝试:'如果intersec.Address = range2.Address Then'。 –

回答

3

这里有一种方法:

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 
+0

谢谢!!!!!! –

1

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

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

您可以删除其他或写没有什么,取决于你想要达到的目标。

2

首先,声明你的范围1和范围变量的范围。

然后,当您将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 
+0

正确..冲和不注意..更新了答案,无需处理任何错误。 –

1

这里的东西,你可以尝试:

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 
0

另一个额外的变体:

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 
0

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

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

0

对于具有多个区域的范围工作的更稳健的解决方案,不同工作表上的范围相互之间,范围包含非常大量的单元格(如.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 
相关问题