Excel VBA:无法获得匹配,错误“无法获取WorksheetFunction类的Match属性”

时间:2013-07-19 16:49:08

标签: excel vba excel-vba vlookup

对于所有善良的爱,我似乎无法让这一切发挥作用。我一直收到上面提到的错误。

我有这个表,我试图找出代码是否在另一列中的某个地方匹配它自己的子代码,但它是错误的。非常感谢您的帮助。

enter image description here

Sub testing()

    Dim m1 As long
    Dim myrange As Range

    Set myrange = Worksheets("Sheet1").Range("B2:B23")

    For e = 2 To 23
        m1= Application.WorksheetFunction.Match(Cells(e, 1).Value, myrange, 0)

        If m1 > 0 Then
            Cells(e, 3).Value = "Yes"
        Else
            Cells(e, 3).Value = "No"
        End If
    Next e

MsgBox "Complete!"

End Sub

2 个答案:

答案 0 :(得分:19)

使用Application.Match功能可以更好地捕获错误。使用WorksheetFunction.Match时,如果找不到匹配项,则会返回错误,这正是您遇到的错误。

If Not IsError(Application.Match(Cells(e, 1).Value, myrange, 0)) Then
    'Do stuff when the match is found
    Cells(e, 3).Value = "Yes"
Else:
    Cells(e, 3).Value = "No"
End If

您还可以使用CountIf功能:

If Application.WorksheetFunction.CountIf(myRange, Cells(e,1).Value) > 0 Then
    Cells(e,3).Value = "Yes"
Else:
    Cells(e,3).Value = "No"
End If

这两种方法都不要求您使用m1变量,如果需要识别,可以在True语句的If/Then部分内分配此变量找到匹配。

答案 1 :(得分:3)

正如另一种选择,这也可以通过将下面的公式放在单元格C2中,然后将其拖到C23来完成。

=IF(COUNTIF($A$2:$A$23,B2)>=1,"YES","NO")