2013-07-19 49 views
8

Vì tình yêu của tất cả những điều đó là tốt, tôi dường như không làm được điều này. Tôi tiếp tục nhận được lỗi được đề cập ở trên.Excel VBA: Không thể nhận được kết quả phù hợp, lỗi "Không thể có được thuộc tính Match của lớp WorksheetFunction"

Tôi có bảng này và tôi đang cố gắng tìm hiểu xem mã có khớp với mã phụ của riêng nó ở đâu đó trong cột khác không, tuy nhiên nó đang bị lỗi. Giúp đỡ của bạn được đánh giá rất cao.

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

Câu trả lời của David là đúng, nhưng tại sao không chỉ đặt công thức trong cột C? –

+0

Xin chào Doug, tôi sẽ cần phải sử dụng điều này cùng với các chức năng khác mà tôi muốn làm sau này, mà tôi chỉ có thể được thực hiện tối ưu thông qua mã VBA. –

Trả lời

14

Sử dụng Application.Match chức năng cho phép đối với khả năng tốt hơn để lỗi bẫy. Khi sử dụng WorksheetFunction.Match, khi không tìm thấy kết quả phù hợp, nó sẽ trả về lỗi, đó là những gì bạn đang gặp phải.

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 

Bạn cũng có thể có khả năng sử dụng CountIf chức năng:

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

Không phải của các phương pháp đòi hỏi bạn phải sử dụng biến m1, bạn có thể gán biến này trong True một phần của báo cáo kết quả If/Then, nếu bạn cần phải xác định số trong đó kết quả phù hợp.

+0

Cảm ơn, điều này đã làm việc! Nhiều đánh giá cao. –

+0

Câu hỏi nhanh mặc dù: Nếu bạn muốn "khớp" một phần giá trị trong ô, bạn sẽ sử dụng chức năng nào? –

+0

Nó phụ thuộc vào sự phức tạp của một phần khớp. Nó có thể là một cái gì đó đơn giản, ví dụ để đếm sự xuất hiện của bất kỳ tế bào bắt đầu với "steve", đối số thứ hai trong 'CountIf' chức năng sẽ giống như' "steve *' ", hoặc nếu bạn đang tìm kiếm bất kỳ tế bào có chứa từ "steve", bạn có thể sử dụng '" * steve * "', v.v. phức tạp hơn và bạn có thể muốn xem xét sử dụng Cụm từ thông dụng. –

2

Cũng giống như một tùy chọn khác, điều này cũng có thể được thực hiện bằng cách đặt công thức bên dưới vào ô C2 và kéo nó xuống C23.

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

+1, đây là cách để đi, trừ khi có một số lý do thuyết phục cho VBA. –

+1

Cố gắng tìm một kết quả phù hợp để sử dụng một phần với một bộ mã khác. –