如何比较Excel中的两个范围,其中某些值是整数但其他值是字符串?

时间:2017-03-27 13:19:25

标签: excel-vba vba excel

我正在尝试将一个范围与另一个范围进行比较,但我遇到了问题,因为其中一个具有整数值,而这些似乎与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

3 个答案:

答案 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,所以我相信我有借口。