2017-03-27 19 views
0

我想比较一个范围对另一个,但我有问题,因为其中一个具有整数值,这些似乎无法正确使用Application.Match函数(或实际上Application.WorkSheetFunction.Match函数) 。如何比较Excel中两个范围,其中一些值是整数,而另一些则是字符串?

例如,ExampleRange1中的其中一个值(2616949),其中不应该是是匹配返回值为5(我知道返回的值是正在存在的范围中的值的位置即使2616949不在ExampleRange2中)。 但是在两个范围内都存在的其他值(例如D248330)与正确的位置匹配。

我的理论是,由于'On Error Resume Next',dnmatch中的值在遇到整数时没有被覆盖,但我无法证明这一点。我可以对吗?

Dim dnmatch As Integer 
Dim ExampleRange1 As Range, ExampleRange2 As Range 

Set ExampleRange1 = Ws2.Range("G1:G" & count1) 
Set ExampleRange2 = Ws3.Range("A2:A" & count2) 

For Each dn In ExampleRange1 

On Error Resume Next 
    dnmatch = Application.WorksheetFunction.Match(dn, ExampleRange2, 0) 

    If dnmatch < 1 Then 

     Debug.Print ("no match found") 

    End If 

Next dn 

回答

1

你可能是对的。试试这个:

Dim dnmatch As Integer 
Dim ExampleRange1 As Range, ExampleRange2 As Range 

Set ExampleRange1 = Ws2.Range("G1:G" & count1) 
Set ExampleRange2 = Ws3.Range("A2:A" & count2) 

For Each dn In ExampleRange1 

On Error GoTo Debugs 
dnmatch = Application.WorksheetFunction.Match(dn, ExampleRange2, 0) 
Goto Final 
Debugs: 
dnmatch = 0 
Final: 
If dnmatch < 1 Then 

    Debug.Print ("no match found") 

End If 

Next dn 
0

谢谢你一如既往地成为我的橡皮鸭,我是在我的直觉正确的,所以我就在旁边重置价值(我知道我应该做第一反正)在上的错误恢复后添加

dnmatch = 0 

,但我没有做Excel的VBA所有这一切,所以我相信我有一个借口。

+0

@Pspl,谢谢,我会离开的答案,因为我来到了同样的结论,但我想我2秒打你冲:) – warsong

1

匹配适用于整数,当找不到匹配时会抛出错误。也许使用.find代替

Set rngFound = ExampleRange2.Find(dn.Value, , xlValues, xlWhole) 
If rngFound Is Nothing Then 
    Debug.Print ("no match found") 
Else 
    'Found 
End If 
相关问题