2016-06-07 110 views
0

下面的行是我一起工作的代碼:查找部分字符串

Dim Name As Long 
      With Application.WorksheetFunction 
       Name= .Match("Test:", Range("A1:A1000"), -1) 
      End With 

全是我尋找的是「測試:你好」,但這個詞您好並不總是遵循的測試,所以我不想使用完整匹配。我看到了Instr函數,但我想知道這個部分匹配的行。

+2

嘗試'「*測試」。 –

+2

我認爲'-1'需要爲'0'才能找到正確的行。 –

+1

我不知道你可以在非Ranges中使用'With'。整齊地知道。你也可以使用'Find()':'Range(「A:A」)。Find(What:=「Test:」,LookAt:= xlPart).Row',但@ScottCraner有你的答案和通配符。 – BruceWayne

回答

4

您可以在公式中使用通配符*來捕獲Test:之後的任何內容。

而且我們要返回的確切所以第三個標準應該是0

Dim Name As Long 
With Application.WorksheetFunction 
    Name= .Match("Test:*", Range("A1:A1000"), 0) 
End With 

但如果沒有找到匹配這種方法VBA會報錯了。與通配符`

我們可以刪除WorksheetFunction部分和VBA將通過錯誤,所以我們可以測試它:

Dim Name As Long 
With Application 
    If IsError(.Match("Test:*", Range("A1:A1000"), 0)) then 
     msgbox "No match found" 
    Else 
     Name= .Match("Test:*", Range("A1:A1000"), 0) 
    End if 
End With 
+0

@AdamWarner請參閱編輯更多信息。 –

+0

任何想法是否'.Match'比'Find()。row'更好用嗎? – BruceWayne

+1

@BruceWayne我曾經辯論過一段時間,有人提供了一個鏈接到一個頁面,其他人已經完成了測試,Match比查找更快。這是[鏈接](https://fastexcel.wordpress.com/2011/10/26/match-vs-find-vs-variant-array-vba-performance-shootout/) –