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?

Krishna
fonte
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.

rene
fonte
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
69

Você também pode usar a palavra especial like:

Public Sub Search()
  If "My Big String with, in the middle" Like "*,*" Then
    Debug.Print ("Found ','")
  End If
End Sub
Makah
fonte
3
Link para o formato padrão msdn.microsoft.com/en-us/library/…
Matthew Lock
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.

LimaNightHawk
fonte
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
Barba Sinistra
fonte
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