下面的行是我一起工作的代碼:查找部分字符串
Dim Name As Long
With Application.WorksheetFunction
Name= .Match("Test:", Range("A1:A1000"), -1)
End With
全是我尋找的是「測試:你好」,但這個詞您好並不總是遵循的測試,所以我不想使用完整匹配。我看到了Instr
函數,但我想知道這個部分匹配的行。
下面的行是我一起工作的代碼:查找部分字符串
Dim Name As Long
With Application.WorksheetFunction
Name= .Match("Test:", Range("A1:A1000"), -1)
End With
全是我尋找的是「測試:你好」,但這個詞您好並不總是遵循的測試,所以我不想使用完整匹配。我看到了Instr
函數,但我想知道這個部分匹配的行。
您可以在公式中使用通配符*
來捕獲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
@AdamWarner請參閱編輯更多信息。 –
任何想法是否'.Match'比'Find()。row'更好用嗎? – BruceWayne
@BruceWayne我曾經辯論過一段時間,有人提供了一個鏈接到一個頁面,其他人已經完成了測試,Match比查找更快。這是[鏈接](https://fastexcel.wordpress.com/2011/10/26/match-vs-find-vs-variant-array-vba-performance-shootout/) –
嘗試'「*測試」。 –
我認爲'-1'需要爲'0'才能找到正確的行。 –
我不知道你可以在非Ranges中使用'With'。整齊地知道。你也可以使用'Find()':'Range(「A:A」)。Find(What:=「Test:」,LookAt:= xlPart).Row',但@ScottCraner有你的答案和通配符。 – BruceWayne