2017-04-19 18 views
0

次のコードでは、shLookは、シートshSourceの文字列を検索するテキスト項目のリストを含むシートであり、行はrowStとなります。ワイルドカードで検索する

LPosition = InStr(1, shSource.Cells(rowSt, 18), shLook.Cells(i, 1).Value) 

これがうまく機能は、しかしshLook内の任意のテキストは、ワイルドカードが含まれている場合、もはやshSourceに対応する文字列を検索することができません。

テキスト項目のリストにワイルドカードを入れるために、これを実装する別の方法がありますか?

+0

'shLook.Cells(row、col).Value'をVBAに渡すと、文字列とみなされます。スクリプト内でワイルドカードを使用する必要があります。 – Masoud

+0

私はこれが優れていると思いますか?不足しているタグを追加してください – phil652

答えて

0

あなたは単にあなたが使用することができ、文字列が存在するかどうかを知りたい場合は、次の

Dim found As Boolean 
Dim searchString As String 
searchString = shLook.Cells(i, 1).Value 
If Left(searchString, 1) <> "?" Then searchString = "*" & searchString 
If Right(searchString, 1) <> "?" Then searchString = searchString & "*" 
found = shSource.Cells(rowSt, 18).Value Like searchString 

あなたはその文字列が始まる位置を知りたい場合は、あなたがやって前に出ワイルドカード文字を削除する必要があります。 Instr

If Found Then 
    LPosition = InStr(shSource.Cells(rowSt, 18), Replace(Replace(searchString, "?", ""), "*", "")) 
End If 

注:あなたは単にあなたが「XYZABCIJK」内の「?ABC」を検索する場合には偽の試合になるだろうので、最初の部分をやったことなく、第2の部分を行うことはできません。

+0

うわー、これは非常に有益です! ワイルドカードが検索文字列の中央にある場合は、@ YowE3Kで提案されている上記のコードをどのように適応させることができますか?私は車両番号の長いリストを持っている場合、私は、検索文字列になりたいでしょう: Vehicle_no _ * _ to_sell 各車両番号の検索文字列を詳しく説明することとは対照的に、 : Vehicle_no_1_to_sell Vehicle_no_2_to_sell Vehicle_no_3_to_sellなど – falconrae

+0

あなたが実際にありますマッチが開始される位置の後、または単に文字列が "マッチする"かどうかを調べようとしていますか? '' Vehicle_no_1_to_sell "Vehicle_no _ * _ to_sell"のように '' True'を返さなければならないので、コードの最初の部分が機能します。ポジションを見つけることはより困難になります。 – YowE3K

関連する問題