Funzione INSTR
La funzione VBA Instr controlla se una stringa di testo si trova in un'altra stringa di testo. Restituisce 0 se il testo non viene trovato. Altrimenti restituisce la posizione del carattere in cui si trova il testo.
La funzione Instr esegue esatto partite. L'operatore VBA Like può essere utilizzato invece per eseguire corrispondenze/pattern matching inesatti utilizzando i caratteri jolly.
Esempio di strumento
Il seguente frammento di codice cerca la stringa "Cerca in questa stringa" per la parola "Cerca". La funzione Instr restituisce 1 perché il testo si trova nella prima posizione.
123 | Sub TrovaTesto()MsgBox InStr("Cerca in questa stringa", "Cerca")Fine sottotitolo |
Questo secondo esempio restituisce 7 perché il testo si trova a partire dalla settima posizione:
123 | Sub TrovaTesto2()MsgBox InStr("Non cercare in questa stringa", "Cerca")Fine sottotitolo |
Importante! La funzione Instr è che tiene conto del maiuscolo o minuscolo per impostazione predefinita. Ciò significa che "look" non corrisponderà a "look". Per rendere il test insensibile alle maiuscole, leggi di seguito.
Sintassi Instr
La sintassi per la funzione Instr è la seguente:
1 | Instr( [inizio], stringa, sottostringa, [confronto]) |
[inizio] (opzionale) - Questo argomento opzionale è la posizione di partenza della ricerca. Immettere 1 per avviare la ricerca dalla posizione 1 (o lasciare vuoto). Immettere 5 per avviare la ricerca dalla posizione 5. Importante! La funzione INSTR calcola la posizione del carattere contando da 1 NON dalla posizione [iniziale].
corda - La stringa di testo in cui cercare.
sottostringa - La stringa di testo da trovare nella stringa primaria.
[confronta] (opzionale) - Per impostazione predefinita, Instr fa distinzione tra maiuscole e minuscole. Impostando questo argomento puoi rendere Instr Case insensitive:
Argomento vb Valore | Argomento intero | Descrizione |
vbBinaryCompare |
0 | (Predefinito) Fa distinzione tra maiuscole e minuscole |
vbTextCompare |
1 | Non sensibile a maiuscole e minuscole |
vbDatabaseCompare |
2 | Solo accesso MS. Utilizza le informazioni nel database per eseguire il confronto. |
Posizione iniziale strument
La posizione iniziale di Instr ti permette di indicare la posizione del carattere da cui inizierai la tua ricerca. Tieni presente, tuttavia, che l'output di Instr conterà sempre da 1.
Qui impostiamo la posizione di partenza su 3 per saltare la prima B:
123 | Sub Instr_StartPosition()MsgBox InStr(3, "ABC ABC", "B")Fine sottotitolo |
Il risultato è 6 perché la seconda B è il sesto carattere nella stringa.
Test INSTR senza distinzione tra maiuscole e minuscole
Per impostazione predefinita, VBA considera "L" diverso da "l". In altre parole, VBA fa distinzione tra maiuscole e minuscole. Questo è vero per tutte le funzioni di testo. Per rendere VBA insensibile alle maiuscole, imposta l'argomento [compare] su 1 o vbTextCompare.
123 | Public Sub FindText_IgnoreCase()MsgBox InStr(1, "Non cercare in questa stringa", "guarda", vbTextCompare)Fine sottotitolo |
In alternativa, puoi aggiungere l'opzione Confronta testo nella parte superiore del modulo di codice:
1 | Opzione Confronta testo |
12345 | Opzione Confronta testoPublic Sub FindText_IgnoreCase2()MsgBox InStr("Non cercare in questa stringa", "guarda")Fine sottotitolo |
L'opzione Confronta testo influirà su tutto il codice in quel modulo. Personalmente lo metto in cima a qualsiasi modulo che si occupa di testo perché non mi interessano mai le differenze di caso.
Funzione InstrRev
La funzione Instr effettua la ricerca da sinistra. Invece puoi cercare da destra usando la funzione InstrRev. La funzione InstrRev funziona in modo molto simile alla funzione Instr.
123 | Sub FindSomeText_FromRight()MsgBox InStrRev("Cerca in questa stringa", "Cerca")Fine sottotitolo |
Proprio come la funzione Instr, questa restituirà 1 perché c'è solo un'istanza di "Look" nel testo. Ma se aggiungiamo un secondo "Look", vedrai che restituisce la posizione del "Look" più a destra:
123 | Sub FindSomeText_FromRight()MsgBox InStrRev("Cerca in questa stringa Guarda", "Cerca")Fine sottotitolo |
Successivamente esamineremo altri esempi di Instr.
Esempi di stringhe
Se la stringa contiene una sottostringa
Qui useremo un'istruzione If per verificare se una stringa contiene una sottostringa di testo:
123456789 | Public Sub FindSomeText()If InStr("Cerca in questa stringa", "guarda") = 0 ThenMsgBox "Nessuna corrispondenza"AltroMsgBox "Almeno una corrispondenza"Finisci seFine sottotitolo |
Trova stringa di testo in una cella
Puoi anche trovare una stringa in una cella:
12345 | Sub Trova_Stringa_Cella()Se InStr(Range("B2").Value, "Dr.") > 0 AlloraIntervallo ("C2"). Valore = "Dottore"Finisci seFine sottotitolo |
Oppure scorre un intervallo di celle per verificare se le celle contengono del testo:
12345678910 | Sub Search_Range_For_Text()Cella debole come intervalloPer ogni cella nell'intervallo ("b2: b6")Se InStr(cell.Value, "Dr.") > 0 Alloracell.Offset(0, 1).Value = "Dottore"Finisci seCella successivaFine sottotitolo |
Trova la posizione di un carattere in una stringa
Questo codice troverà la posizione di un singolo carattere in una stringa e assegnerà la posizione a una variabile:
1234 | Sotto Trova_Carattere()Dim n As Longn = InStr("Qui guarda qui", "L")Fine sottotitolo |
Stringa di ricerca per parola
Questo codice cercherà una stringa per una parola:
12345678910 | Sub Search_String_For_Word()Dim n As Longn = InStr("Qui guarda qui", "Guarda")Se n = 0 AlloraMsgBox "Parola non trovata"AltroMsgBox "Parola trovata in posizione: " & nFinisci seFine sottotitolo |
Se la variabile contiene una stringa
Questo codice verificherà se una variabile stringa contiene una stringa di testo:
12345678 | Sub Variable_Contains_String()Dim str As Stringstr = "Guarda qui"Se InStr(str, "Qui") > 0 AlloraMsgBox "Qui trovato!"Finisci seFine sottotitolo |
Instr e la funzione sinistra
Instr può essere utilizzato insieme ad altre funzioni di testo come Left, Right, Len e Mid per tagliare il testo.
Con la funzione Left puoi emettere il testo prima di una stringa di testo:
1234567891011 | Sub Instr_Left()Dim str As StringDim n As Longstr = "Guarda qui"n = InStr(str, "Qui")MsgBox Left(str, n - 1)Fine sottotitolo |
Utilizzo di Instr in Microsoft Access VBA
Tutti gli esempi precedenti funzionano esattamente allo stesso modo in Access VBA come in Excel VBA.
Per saperne di più, leggi il nostro articolo: Funzioni di testo VBA