2013-07-19 17 views
8

Z miłości do wszystkiego, co jest dobre, nie mogę sprawić, żeby to działało. Nadal dostaję powyższy błąd.Excel VBA: Nie można uzyskać dopasowania, błąd "Nie można uzyskać właściwości Match klasy WorksheetFunction"

Mam tę tabelę i próbuję sprawdzić, czy kod pasuje do jej własnego pod-kodu gdzieś w drugiej kolumnie, ale jest to błąd. Twoja pomoc jest bardzo doceniana.

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 
+0

Odpowiedź Davida jest prawidłowa, ale dlaczego nie podać po prostu wzoru w kolumnie C? –

+0

Witam Doug, będę musiał użyć tego w połączeniu z innymi funkcjami, które chciałbym wykonać później, co mogę zrobić tylko optymalnie za pomocą kodu VBA. –

Odpowiedz

14

użyć funkcji Application.Match co pozwala na lepszą zdolność do wychwytywania błędów. Podczas korzystania z WorksheetFunction.Match, gdy dopasowanie nie zostanie znalezione, zwraca błąd, który występuje.

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 

Można też potencjalnie użyć CountIf funkcję:

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

Żadna z tych metod wymaga użycia zmiennej m1 można przypisać tej zmiennej w True części zestawienia If/Then, jeśli musisz zidentyfikować gdzie dopasowanie zostanie znalezione.

+0

Dzięki, to zadziałało! Bardzo doceniane. –

+0

Szybkie pytanie: co zrobić, jeśli chcesz "dopasować" część wartości w komórce, jaką funkcję użyjesz? –

+0

Zależy od tego, jak skomplikowane jest częściowe dopasowanie. Może to być coś prostego, na przykład, aby policzyć wystąpienia każdej komórki zaczynającej się od "steve", drugim argumentem w funkcji "CountIf" będzie "steve *" "lub jeśli szukasz jakiejś komórki zawierającej słowo "steve", możesz użyć '" * steve * "', itp. Bardziej skomplikowane i możesz chcieć zaglądać do używania Wyrażeń regularnych. –

2

Podobnie jak w przypadku innej opcji, można to również zrobić, umieszczając poniższy wzór w komórce C2 i przeciągając go do C23.

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

+1, to jest droga, chyba że jest jakiś ważny powód dla VBA. –

+1

Próba znalezienia dopasowania do użycia w części z innym zestawem kodów. –

Powiązane problemy