2017-04-19 1 views
0

다음 코드에서 shLookshSource의 문자열을 rowSt으로 표시된 행을 반복하여 검색하려고하는 텍스트 항목 목록이있는 시트입니다.와일드 카드로 검색

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

이 아니라, shLook의 모든 텍스트가 와일드 카드를 포함하지만 경우, 더 이상 shSource에 문자열을 해당 찾을 수있는 작품.

텍스트 항목 목록에 와일드 카드를 넣을 수 있도록 다른 방법을 구현할 수 있습니까? 당신은 단순히 문자열이 존재하는지 여부를 알고 싶은 경우

+0

'shLook.Cells (row, col) .Value'를 VBA에 전달하면 문자열로 간주됩니다. 와일드 카드는 스크립트 자체 내에서 사용해야합니다. – Masoud

+0

나는 이것이 Excel에 있다고 생각 하나? 누락 된 태그를 추가하십시오 – 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"를 검색하는 경우 잘못된 일치를 얻을 것이기 때문에, 첫 번째 부분을 수행하지 않고 두 번째 부분을 할 수 없습니다.

+0

와우, 이것은 매우 도움이됩니다 감사합니다! 와일드 카드가 검색 문자열 중간에있는 경우 @YowE3K가 제안한 위의 코드를 어떻게 적용 할 수 있습니까? 나는 차량 번호의 긴 목록이있는 경우, I는 검색 문자열이 원하는 것 : Vehicle_no _ * _ to_sell 각 차량 번호의 검색 문자열을 정교하게하는 데에 반대 : Vehicle_no_1_to_sell Vehicle_no_2_to_sell Vehicle_no_3_to_sell 등 – falconrae

+0

당신이 정말 match가 시작되는 위치 이후에, 또는 문자열이 "일치"하는지 여부 만 찾으려고합니까? ' "Vehicle_no_1_to_sell" "Vehicle_no _ * _ to_sell"과 같이'True'를 반환해야하므로 코드의 첫 번째 부분이 작동합니다. 위치를 찾는 것이 더 어려울 것입니다. – YowE3K

관련 문제