11

出于对所有美好事物的热爱,我似乎无法让它发挥作用。我不断收到上面提到的错误。

我有这张表,我试图找出代码是否与另一列中某处的它自己的子代码匹配,但是它出错了。非常感谢您的帮助。

在此处输入图像描述

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
4

2 回答 2

26

使用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内分配此变量。TrueIf/Then

于 2013-07-19T16:56:32.780 回答
3

作为另一种选择,这也可以通过将下面的公式放在单元格 C2 中并将其向下拖动到 C23 来完成。

=IF(COUNTIF($A$2:$A$23,B2)>=1,"YES","NO")
于 2013-07-19T17:02:18.837 回答