2017-09-21 108 views
3

在這段代碼中,我試圖檢查用戶輸入的輸入(txtList)是否可以在數據列表(txtList)中找到。下面的代碼返回0(串未發現儘管「約翰·豪」和「何三通倪,約翰」是完全一樣的人。有人可以請賜教如何解決這個問題?Excel VBA InStr返回0,儘管子字符串有效

'code returns 0 (substring not found) 
Dim txtList As String, txtInput As String 
txtList = "Ho Tee Nee, John" 
txtInput = "John Ho" 
Debug.Print InStr(1, txtList, txtInput, vbTextCompare) 
+7

這是因爲它正在尋找一個完整的比賽。那不劃分單詞和單獨看,它必須找到完整的字符串在另一個st戒指不是零件。 –

+1

您將需要在兩個命令中分別比較每個單詞,然後比較兩個單詞是否被找到。 –

+1

從編譯器的角度來看它:「abc」,「a,b,c」和「a/b/c」字符串文字有什麼區別?沒有。全部是字符串文字。 InStr無法猜測你的意思。嘗試製作一個[StringContainsAny](https://stackoverflow.com/a/17893442/1188513)函數。 –

回答

7

拆分搜索條件並尋找每一塊。

Dim i As Long, txtList As String, txtInput As Variant 
txtList = Chr(32) & "Ho Tee Nee, John" & Chr(32) 
txtInput = Split("John Ho", Chr(32)) 

For i = LBound(txtInput) To UBound(txtInput) 
    If Not CBool(InStr(1, txtList, Chr(32) & txtInput(i) & Chr(32), vbTextCompare)) Then Exit For 
Next i 

If i > UBound(txtInput) Then 
    Debug.Print "all parts match" 
Else 
    Debug.Print "incomplete match" 
End If 

這是不區分大小寫的搜索。對於區分大小寫的搜索改變vbTextCompare到vbBinaryCompare。

+0

我將搜索條件和搜索字符串用空格括起來以提供「全字搜索」。由於逗號,* Nee *可能存在問題,但我相信您可以通過一些錯誤控制來解決這個問題。 – Jeeped

+0

例如'txtList = Chr(32)&application.trim(替換(「Ho Tee Nee,John」,chr(44),chr(32)))&Chr(32)' – Jeeped