我正在尝试将一个范围与另一个范围进行比较,但我遇到了问题,因为其中一个具有整数值,而这些似乎与Application.Match函数(或实际上是Application)无法正常工作。 WorkSheetFunction.Match函数)。
例如,ExampleRange1中其中一个值不应该匹配的值(2616949)返回值5(我知道返回的值是即使2616949不在ExampleRange2中,值在被比较的范围内的位置。 但是在两个范围内确实存在的其他值如D248330与正确的位置匹配。
我的理论是,由于“错误恢复下一步”' 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
答案 0 :(得分: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
答案 1 :(得分:1)
匹配对整数有效,当找不到匹配时会抛出错误。也许使用 .find 代替
Set rngFound = ExampleRange2.Find(dn.Value, , xlValues, xlWhole)
If rngFound Is Nothing Then
Debug.Print ("no match found")
Else
'Found
End If
答案 2 :(得分:0)
感谢我一如既往地成为我的橡皮鸭。我的预感是正确的所以我添加了
dnmatch = 0
紧接着On Error Resume旁边的重置值(我知道我应该首先完成),但是我还没有那么长时间做Excel VBA,所以我相信我有借口。