Verifique se uma string contém outra string


233

Quero descobrir se uma string contém um "," (vírgula) nela. Temos outra opção além de ler char-by-char?


14
Funciona INSTRpara você?
Stephen Quan

Respostas:


386

Use a função Instr

Dim pos As Integer

pos = InStr("find the comma, in the string", ",")

retornará 15 em pos

Se não for encontrado, retornará 0

Se você precisar encontrar a vírgula com uma fórmula do Excel, poderá usar o =FIND(",";A1) função

Observe que se você deseja usar Instrpara encontrar a posição de uma string que não diferencia maiúsculas de minúsculas, use o terceiro parâmetro de Instr e dê a const vbTextCompare(ou apenas 1 para hard-dreads).

Dim posOf_A As Integer

posOf_A = InStr(1, "find the comma, in the string", "A", vbTextCompare)

lhe dará um valor de 14.

Observe que você deve especificar a posição inicial neste caso, conforme indicado na especificação que eu vinculei: O argumento inicial é necessário se a comparação for especificada.


4
Mas e se a string encontrada estiver na posição 0? Como você distingue entre "encontrado no índice 0" e "não encontrado (0)"?
precisa saber é o seguinte

10
@gEdringer. Quando a seqüência de caracteres a ser encontrada está no início, ela retorna 1.
rene


23

Há também o InStrRev função , que faz o mesmo tipo de coisa, mas começa a pesquisar do final do texto ao início.

Por resposta de @ rene ...

Dim pos As Integer
pos = InStrRev("find the comma, in the string", ",")

... ainda retornaria 15 para pos, mas se a sequência tiver mais de uma sequência de pesquisa, como a palavra "the", então:

Dim pos As Integer
pos = InStrRev("find the comma, in the string", "the")

... retornaria 20 ao pos, em vez de 6.


17

Com base na resposta de Rene, você também pode escrever uma função que retorne TRUE se a substring estiver presente ou FALSE se não estiver:

Public Function Contains(strBaseString As String, strSearchTerm As String) As Boolean
'Purpose: Returns TRUE if one string exists within another
On Error GoTo ErrorMessage
    Contains = InStr(strBaseString, strSearchTerm)
Exit Function
ErrorMessage:
MsgBox "The database has generated an error. Please contact the database administrator, quoting the following error message: '" & Err.Description & "'", vbCritical, "Database Error"
End
End Function

3
Que tipo de erro de banco de dados estamos esperando nesta função? A interceptação de erro e a mensagem de erro parecem ser totalmente inúteis.
Roobie Nuby

11
@RoobieNuby Esse é apenas o meu tratamento de erros padrão. Eu o incluo em todas as minhas funções, porque se algo der errado, quero que a equipe me ligue, para não tentar consertar isso sozinho.
Sinister Beard
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.