web-dev-qa-db-fra.com

Excel VBA: impossible d'obtenir une correspondance, erreur «Impossible d'obtenir la propriété Match de la classe WorksheetFunction»

Pour l'amour de tout ce qui est bon, je n'arrive pas à faire fonctionner cela. Je reçois toujours l'erreur mentionnée ci-dessus.

J'ai cette table, et j'essaie de savoir si le code correspond à son propre sous-code quelque part dans l'autre colonne, mais c'est une erreur. Votre aide est grandement appréciée.

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
9
Humble Val

Utilisez le Application.Match fonction qui permet de mieux capter les erreurs. Lorsque vous utilisez le WorksheetFunction.Match, lorsqu'une correspondance n'est pas trouvée, elle renvoie une erreur, ce que vous rencontrez.

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

Vous pouvez également potentiellement utiliser la fonction 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

Aucune de ces approches ne vous oblige à utiliser le m1 variable, vous pouvez affecter cette variable dans la partie True de la If/Then, si vous devez identifier la correspondance est trouvée.

19
David Zemens

Tout comme une autre option, cela peut également être fait en plaçant la formule ci-dessous dans la cellule C2 et en la faisant glisser vers le bas en C23.

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