Controlla se una stringa contiene un'altra stringa


233

Voglio scoprire se una stringa contiene un "," (virgola) al suo interno. Abbiamo altre opzioni oltre a leggere char-by-char?


14
Funziona INSTRper te?
Stephen Quan,

Risposte:


386

Utilizzare la funzione Instr

Dim pos As Integer

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

restituirà 15 in pos

Se non trovato, restituirà 0

Se è necessario trovare la virgola con una formula di Excel, è possibile utilizzare la =FIND(",";A1)funzione.

Si noti che se si desidera utilizzare Instrper trovare la posizione di una stringa senza distinzione tra maiuscole e minuscole, utilizzare il terzo parametro di Instr e dargli la const vbTextCompare(o solo 1 per i duri a morire).

Dim posOf_A As Integer

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

ti darà un valore di 14.

Si noti che in questo caso è necessario specificare la posizione iniziale come indicato nella specifica I collegata: l'argomento iniziale è richiesto se viene specificato il confronto.


4
Ma cosa succede se la stringa trovata è in posizione 0? Come si fa a distinguere tra "trovato sull'indice 0" e "non trovato (0)"?
gEdringer,

10
@gEdringer. Quando la stringa da trovare è all'inizio, restituisce 1.
rene


23

C'è anche la funzione InStrRev che fa lo stesso tipo di cose, ma inizia la ricerca dalla fine del testo all'inizio.

La risposta di Per @ rene ...

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

... restituirebbe comunque 15 in pos, ma se la stringa ha più di una stringa di ricerca, come la parola "the", allora:

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

... restituirebbe 20 in pos, anziché 6.


17

Basandoti sulla risposta di Rene, potresti anche scrivere una funzione che restituiva VERO se era presente la sottostringa o FALSO se non lo fosse:

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
Che tipo di errore del database ci aspettiamo in questa funzione? Il trapping degli errori e il messaggio di errore sembrano essere completamente inutili.
Roobie Nuby,

11
@RoobieNuby Questa è solo la mia gestione degli errori predefinita. L'ho inserito in tutte le mie funzioni perché se qualcosa va storto, voglio che lo staff mi chiami, non provi a ripararlo da solo.
Sinister Beard,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.