Se hai scritto più di qualche macro VBA, probabilmente ti sei già imbattuto in quel momento in cui devi verificare se un testo esiste dentro una cella. In VBA, InStr è una di quelle funzioni che finisci per usare ovunque. Ti dice dove un pezzo di testo compare dentro un altro. Puoi usarla per controllare se un testo esiste in una cella, analizzare valori in un testo o pilotare logiche condizionali in macro che dipendono da pattern testuali.
In questa guida ti accompagno attraverso la sintassi di InStr, alcuni esempi, come funzionano le modalità di confronto (questa parte mette in difficoltà più del dovuto) e alcuni schemi che riuserai davvero.
Ti consiglio di iniziare con il nostro skill track Fondamenti di Excel per costruire basi solide prima di passare a VBA oppure, se hai già un po' di esperienza, segui il nostro corso Funzioni avanzate di Excel per capire meglio come le funzioni migliorano l'efficienza nell'analisi dei dati.
Che cos'è la funzione VBA InStr?
InStr è una funzione VBA che restituisce la posizione della prima occorrenza di una stringa dentro un'altra.
I risultati si comportano così:
Se trova qualcosa, restituisce un numero (la posizione in cui inizia la corrispondenza)
Se non trova nulla, restituisce 0
Per esempio, se "cat" compare alla posizione 5 in una stringa, ottieni 5. Se non c'è, ottieni 0.
Sintassi di VBA InStr
Ecco la sintassi completa di InStr:
InStr([start], string1, string2, [compare])Offerto da
Dove:
start (opzionale): indica a VBA da dove iniziare la ricerca. Se lo ometti, VBA parte dalla posizione 1.
string1 (obbligatorio): il testo completo in cui stai cercando.
string2 (obbligatorio): il testo che stai provando a trovare.
compare (opzionale): definisce come viene effettuato il confronto (distinzione tra maiuscole/minuscole o meno). Se lo ometti, VBA usa la modalità di confronto predefinita, di solito sensibile alle maiuscole/minuscole.
Nota che puoi ignorare gli argomenti start e compare (InStr(string1, string2)) per una versione più semplice. Ma se decidi di usare l'argomento compare, devi fornire anche l'argomento start.
Come funziona VBA InStr
Pensa a InStr come a leggere una frase da sinistra a destra, un carattere alla volta.
La funzione parte da string1, la scansiona e cerca il primo punto in cui string2 corrisponde. Nel momento in cui trova la corrispondenza, si ferma e restituisce la posizione da cui è iniziata.
La posizione della "corrispondenza" è importante perché VBA conta da 1, non da 0. Quindi il primo carattere di una stringa è in posizione 1, il secondo è 2 e così via.
Valori restituiti da VBA InStr spiegati
Interpretare il risultato di InStr è semplice. Puoi ottenere una delle seguenti opzioni:
Numero positivo: se trova una corrispondenza, il numero indica dove inizia.
0: se non c'è alcuna corrispondenza nella stringa
Tuttavia, se le stringhe in input sono Null, la funzione restituisce Null. Anche se puoi ignorarlo per macro basilari, vale la pena ricordare che la differenza può rompere una condizione in silenzio.
Esempi base di VBA InStr
Ora ti mostro alcuni esempi di utilizzo della funzione VBA InStr.
Trovare una parola in una frase
Per verificare se la parola "before" è dentro la nota "Deliver before noon".
Sub Before()
Dim result As Integer
result = InStr("Deliver before noon", "before")
MsgBox result
End SubOfferto da
Il risultato del VBA sopra è 9 perché "before" inizia al nono carattere.
Controllare se un carattere esiste
Per verificare se il carattere "0" esiste in una data stringa, usa il seguente VBA:
Sub ChExist()
Dim result As Integer
result = InStr(“A1023”, “0”)
MsgBox result
End SubOfferto da
In questo caso, qualsiasi risultato maggiore di 0 significa che il carattere è stato trovato.
Cercare dall'inizio di una stringa
Per cercare dall'inizio di una stringa, non devi specificare la posizione di partenza, quindi inizia da 1. È il default ogni volta, a meno che tu non dica diversamente.
Sub ChExist()
Dim result As Integer
result = InStr("Report_2026_Final", "2026")
MsgBox result
End SubOfferto da
Come usare VBA InStr negli If
Quando lavori con un foglio reale, non stai solo cercando un numero: stai cercando di prendere una decisione. Il modo più comune di usare InStr è dentro un'istruzione If per filtrare i dati.
In tutto il tutorial useremo un dataset di esempio, Orders, con le colonne: ID, CustomerName, Email, City e OrderNotes.
If InStr(...) > 0 Then
Dato che InStr restituisce 0 quando non trova nulla, verifichiamo se il risultato esiste quando restituisce un numero maggiore di 0.
Nell'esempio qui sotto, guarda la colonna OrderNotes (colonna 5). Se trova la parola "Fragile", scrive "Handle Carefully" nella colonna 6.
Sub ChExist()
Dim i As Integer
' Loop through rows 2 to 51
For i = 2 To 51
' Check if the order notes mention "Fragile"
If InStr(Cells(i, 5).Value, "Fragile")>0 Then
Cells(i, 6).Value ="Handle Carefully"
End If
Next i
End SubOfferto da
Controlli condizionali per keyword e filtraggio del testo
Puoi usare la funzione InStr anche per verificare keyword nelle stringhe, soprattutto se la frase cambia leggermente. Per esempio, il codice qui sotto controlla se la nota contiene "Call" (come in "Call on arrival" o "Call before delivery"). Poi segnala e aggiunge il tag "Cal Customer" nella colonna 6.
Sub ChExist()
Dim i As Integer
' Loop through rows 2 to 51
For i = 2 To 51
' Check if the order notes mention “Call”
If InStr(Cells(i, 5).Value, “Call”)>0 Then
Cells(i, 6).Value = “Call Customer”
End If
Next i
End SubOfferto da
Distinzione maiuscole/minuscole e modalità di confronto in VBA InStr
Per impostazione predefinita, InStr è case-sensitive (chiamato vbBinaryCompare). Mettiamo che cerchi "chicago" ma nei dati c'è "Chicago": InStr restituirà 0.
Per risolvere, usa l'argomento compare dove:
vbBinaryCompare (Default): distingue tra maiuscole/minuscole ("A" non è uguale a "a").
vbTextCompare: non distingue tra maiuscole/minuscole: "A" è uguale a "a".
Nell'esempio seguente, InStr restituisce 0 perché cerca "fragile" (minuscolo) dentro "Fragile items".
Sub CheckFragile()
Dim result As Integer
result = InStr(1, "Fragile items", "fragile", vbBinaryCompare)
MsgBox result
End SubOfferto da
Usando invece vbTextCompare ottieni 1 con la stessa ricerca, ignorando le maiuscole/minuscole.
Sub CheckFragile()
Dim result As Integer
result = InStr(1, "Fragile items", "fragile", vbTextCompare)
MsgBox result
End SubOfferto da
VBA InStr con posizione di partenza
A volte non vuoi iniziare la ricerca dall'inizio della stringa. L'argomento start indica a VBA da dove cominciare a cercare.
Nell'esempio seguente, l'argomento start è impostato a 10, quindi VBA inizia a cercare dal decimo carattere invece che dal primo. Trova poi "delivery" più avanti nella stringa.
Sub CheckUrgent()
Dim result As Integer
result = InStr(10, “Deliver before noon - urgent delivery”, “delivery”)
MsgBox result
End SubOfferto da
Il risultato dell'esempio sopra è 31, cioè la posizione in cui inizia "delivery".
Questo metodo è utile quando vuoi la seconda occorrenza di qualcosa o ignorare un prefisso noto quando lavori con pattern ripetuti.
VBA InStr vs. InStrRev
Come hai già visto, InStr cerca da sinistra a destra. InStrRev, invece, cerca da destra a sinistra.
Per esempio, abbiamo usato InStrRev per trovare l'ultimo punto nell'email. Il risultato è 18, ossia la posizione del punto prima di "com".
Sub CheckChr()
Dim result As Integer
result = InStrRev("[email protected]", ".")
MsgBox result
End SubOfferto da
Troverai InStrRev più utile quando ti serve l'ultima occorrenza di qualcosa o quando lavori con nomi di file, email o percorsi.
Casi d'uso comuni di VBA InStr
Ora che abbiamo visto esempi di come funziona la funzione VBA InStr, vediamo i casi d'uso più comuni.
Controllare se una cella contiene una keyword
Supponiamo che tu abbia un dataset di ordini dei clienti e che debba contrassegnare ordini per una gestione specifica. Il codice guarda la colonna OrderNotes e segnala tutto ciò che contiene "noon".
Sub ChExist()
Dim i As Integer
' Loop through rows 2 to 51
For i = 2 To 51
If InStr(1, "Deliver before noon", "noon", vbTextCompare) > 0 Then
' Logic to mark as "Morning Delivery"
End If
Next i
End SubOfferto da
Convalidare testo in stile email
Puoi anche usare la funzione InStr per controllare rapidamente formati email validi. Per esempio, il codice qui sotto verifica se l'email contiene @ e scrive "Valid Email Format" nella colonna 6.
Sub ValidateEmail()
Dim i As Integer
' Loop through rows 2 to 51
For i =2 To 51
If InStr(Cells(i, 3).Value, "@")>0 Then
Cells(i, 6).Value ="Valid Email Format"
End If
Next i
End SubOfferto da
Rilevare separatori come virgole o trattini
Puoi usare la funzione InStr per verificare se esiste un trattino, una virgola o una barra nel testo. Nell'esempio sotto, il codice scorre OrderNotes (colonna E), controlla se c'è una virgola nel testo, quindi scrive un risultato in colonna F.
Sub ValidateEmail()
Dim i As Integer
Dim commaPos As Integer
Dim OrderNotes As String
For i =2 To 51
OrderNotes = Cells(i, 5).Value
commaPos = InStr(1, OrderNotes, ",")
' If a comma exists, mark it
If commaPos >0 Then
Cells(i, 6).Value ="Has comma"
Else
Cells(i, 6).Value ="No comma"
End If
Next i
End SubOfferto da
Errori comuni con VBA InStr
Anche da sviluppatore esperto potresti imbatterti in problemi con la funzione InStr che fanno comportare il codice in modo inatteso. Ecco i problemi più comuni che ho incontrato e come risolverli:
Dimenticare che InStr parte da 1: ricorda sempre che le posizioni partono da 1, non da 0. Se arrivi da Python o JavaScript, all'inizio può sembrare strano.
Trattare InStr come True/False: ricorda che InStr non restituisce True o False. Se vuoi trovare qualcosa, devi verificare se il risultato è > 0.
Ignorare le maiuscole/minuscole: come ora sai, InStr è sensibile alle maiuscole/minuscole per default. Se non ti interessa la differenza, dillo usando vbTextCompare nell'argomento compare.
Confondere string1 e string2: ricorda sempre che il primo argomento è dove cerchi. Il secondo è ciò che stai cercando. Se cerchi così InStr(SearchTerm, FullText), otterrai sempre 0.
VBA InStr vs. altre funzioni stringa VBA
Dato che InStr di solito indica dove si trova una stringa in un testo, confrontiamola con altre funzioni sulle stringhe.
InStr vs. Like
L'operatore Like si usa per il pattern matching. Per esempio, il codice sotto controlla "Fragile", ma usa un pattern *, che significa "qualsiasi cosa prima o dopo".
Sub ChExist()
Dim i As Integer
' Loop through rows 2 to 51
For i =2 To 51
If Cells(i, 5).Value Like "*Fragile*" Then
Cells(i, 6).Value ="Handle Carefully"
End If
Next i
End SubOfferto da
Usa InStr se ti serve solo sapere se un testo esiste, e Like quando devi controllare testi con pattern complessi.
InStr vs. Replace
Sebbene tu possa usare InStr per cambiare l'intero valore in una cella, la funzione Replace cambia un testo specifico nella cella.
Nell'esempio seguente, la funzione Replace sostituisce direttamente "Fragile" con "Handle Carefully" dentro il testo.
Sub ReplaceOrder()
Dim i As Integer
For i =2 To 51
Cells(i, 5).Value = Replace(Cells(i, 5).Value, "Fragile", "Handle Carefully")
Next i
End SubOfferto da
InStr vs. Mid
La funzione Mid si usa per estrarre testo da una stringa. Perciò userai spesso Mid con InStr per estrarre il testo dopo averne ottenuto la posizione.
Il codice qui sotto estrae il dominio dalle email nel dataset. La funzione InStr trova dove appare "@" nell'email, poi Mid inizia l'estrazione subito dopo. Il codice termina scrivendo il dominio nella colonna H.
Sub ExtractDomain()
Dim i As Integer
Dim pos As Integer
Dim domain As String
For i =2 To 51
pos = InStr(1, Cells(i, 3).Value, "@")
If pos >0 Then
domain = Mid(Cells(i, 3).Value, pos + 1)
Cells(i, 8).Value = domain
End If
Next i
End SubOfferto da
InStr vs.Split
La funzione Split si usa per dividere il testo in parti specificando un separatore.
Nell'esempio seguente, il codice legge ogni riga dalla colonna A, controlla se c'è una virgola e poi divide il testo in due parti. Scrive Name → colonna B e City → colonna C.
Sub SplitTextColumn()
Dim i As Integer
Dim lastRow As Integer
Dim parts As Variant
Dim text As String
lastRow = Cells(Rows.Count, 1).End(xlUp).Row
For i =2 To lastRow
text = Cells(i, 1).Value
' Only split if a comma exists
If InStr(1, text, ",") > 0 Then
parts = Split(text, ",")
Cells(i, 2).Value = parts(0) ' Name
Cells(i, 3).Value = parts(1) ' City
End If
Next i
End SubOfferto da
Best practice per usare VBA InStr
Per evitare errori nel tuo VBA, ti consiglio le seguenti best practice, che mi hanno fatto risparmiare tempo:
Usa vbTextCompare quando le maiuscole/minuscole non contano: dato che la maggior parte dei dati reali non è coerente nel casing, potresti perdere corrispondenze se ti affidi all'argomento di confronto predefinito.
Combinala con "If" per una logica chiara: cerca sempre di includere una logica che restituisca un valore, perché InStr da sola ti dà solo un numero.
Controlla > 0, non posizioni esatte, a meno che tu non abbia davvero bisogno della posizione.
Tieni il parsing leggibile. Non impilare troppe funzioni in una riga.
Conclusione
InStr è semplice, ma finirai per usarla ovunque. Ti dà la posizione di una stringa dentro un'altra, e quel singolo numero guida molte decisioni in VBA: se qualcosa esiste, da dove estrarre e cosa deve fare la macro dopo. Da sola è solo una ricerca. Combinata con funzioni come Mid, Replace o anche Split, diventa parte di un flusso di lavoro che fa davvero le cose.
Technical writer di Data Science con esperienza pratica in data analytics, business intelligence e data science. Scrivo contenuti pratici e orientati al settore su SQL, Python, Power BI, Databricks e data engineering, basati su lavoro di analytics reale. La mia scrittura unisce profondità tecnica e impatto sul business, aiutando i professionisti a trasformare i dati in decisioni sicure.
FAQ
Cosa restituisce esattamente InStr?⌄
Restituisce la posizione in cui inizia la corrispondenza. Se non trova nulla, restituisce 0.
InStr distingue tra maiuscole e minuscole?⌄
Sì, InStr è sensibile alle maiuscole/minuscole per impostazione predefinita. ”Fragile” e ”fragile” sono trattati come diversi. Usa vbTextCompare se non vuoi una comparazione case-sensitive.
Cosa significa che InStr parte da 1?⌄
Il primo carattere di una stringa è in posizione 1, non 0. Questo conta quando usi il risultato in altre funzioni.
Cosa succede se uno dei valori è Null?⌄
Anche il risultato sarà Null, non 0.
Qual è la differenza tra InStr e InStrRev?⌄
InStr cerca da sinistra a destra, mentre InStrRev parte da destra verso sinistra. Usa la seconda quando conta l'ultima occorrenza.
Acquisisci le competenze essenziali per utilizzare Excel, dalla preparazione dei dati alla scrittura di formule e alla creazione di visualizzazioni. Non è richiesta alcuna esperienza precedente.
Se hai scritto più di qualche macro VBA, probabilmente ti sei già imbattuto in quel momento in cui devi verificare se un testo esiste dentro una cella. In VBA,
InStrè una di quelle funzioni che finisci per usare ovunque. Ti dice dove un pezzo di testo compare dentro un altro. Puoi usarla per controllare se un testo esiste in una cella, analizzare valori in un testo o pilotare logiche condizionali in macro che dipendono da pattern testuali.In questa guida ti accompagno attraverso la sintassi di
InStr, alcuni esempi, come funzionano le modalità di confronto (questa parte mette in difficoltà più del dovuto) e alcuni schemi che riuserai davvero.Ti consiglio di iniziare con il nostro skill track Fondamenti di Excel per costruire basi solide prima di passare a VBA oppure, se hai già un po' di esperienza, segui il nostro corso Funzioni avanzate di Excel per capire meglio come le funzioni migliorano l'efficienza nell'analisi dei dati.
Che cos'è la funzione VBA InStr?
InStrè una funzione VBA che restituisce la posizione della prima occorrenza di una stringa dentro un'altra.I risultati si comportano così:
Per esempio, se "cat" compare alla posizione 5 in una stringa, ottieni
5. Se non c'è, ottieni0.Sintassi di VBA InStr
Ecco la sintassi completa di
InStr:Dove:
start(opzionale): indica a VBA da dove iniziare la ricerca. Se lo ometti, VBA parte dalla posizione 1.string1(obbligatorio): il testo completo in cui stai cercando.string2(obbligatorio): il testo che stai provando a trovare.compare(opzionale): definisce come viene effettuato il confronto (distinzione tra maiuscole/minuscole o meno). Se lo ometti, VBA usa la modalità di confronto predefinita, di solito sensibile alle maiuscole/minuscole.Nota che puoi ignorare gli argomenti
startecompare(InStr(string1, string2)) per una versione più semplice. Ma se decidi di usare l'argomentocompare, devi fornire anche l'argomentostart.Come funziona VBA InStr
Pensa a
InStrcome a leggere una frase da sinistra a destra, un carattere alla volta.La funzione parte da
string1, la scansiona e cerca il primo punto in cuistring2corrisponde. Nel momento in cui trova la corrispondenza, si ferma e restituisce la posizione da cui è iniziata.La posizione della "corrispondenza" è importante perché VBA conta da 1, non da 0. Quindi il primo carattere di una stringa è in posizione 1, il secondo è 2 e così via.
Valori restituiti da VBA InStr spiegati
Interpretare il risultato di
InStrè semplice. Puoi ottenere una delle seguenti opzioni:Numero positivo: se trova una corrispondenza, il numero indica dove inizia.
0: se non c'è alcuna corrispondenza nella stringaTuttavia, se le stringhe in input sono
Null, la funzione restituisceNull. Anche se puoi ignorarlo per macro basilari, vale la pena ricordare che la differenza può rompere una condizione in silenzio.Esempi base di VBA InStr
Ora ti mostro alcuni esempi di utilizzo della funzione VBA
InStr.Trovare una parola in una frase
Per verificare se la parola "before" è dentro la nota "Deliver before noon".
Il risultato del VBA sopra è
9perché "before" inizia al nono carattere.Controllare se un carattere esiste
Per verificare se il carattere "0" esiste in una data stringa, usa il seguente VBA:
In questo caso, qualsiasi risultato maggiore di
0significa che il carattere è stato trovato.Cercare dall'inizio di una stringa
Per cercare dall'inizio di una stringa, non devi specificare la posizione di partenza, quindi inizia da 1. È il default ogni volta, a meno che tu non dica diversamente.
Come usare VBA InStr negli If
Quando lavori con un foglio reale, non stai solo cercando un numero: stai cercando di prendere una decisione. Il modo più comune di usare
InStrè dentro un'istruzioneIfper filtrare i dati.In tutto il tutorial useremo un dataset di esempio,
Orders, con le colonne:ID,CustomerName,Email,CityeOrderNotes.If InStr(...) > 0 Then
Dato che
InStrrestituisce0quando non trova nulla, verifichiamo se il risultato esiste quando restituisce un numero maggiore di0.Nell'esempio qui sotto, guarda la colonna
OrderNotes(colonna 5). Se trova la parola "Fragile", scrive "Handle Carefully" nella colonna 6.Controlli condizionali per keyword e filtraggio del testo
Puoi usare la funzione
InStranche per verificare keyword nelle stringhe, soprattutto se la frase cambia leggermente. Per esempio, il codice qui sotto controlla se la nota contiene "Call" (come in "Call on arrival" o "Call before delivery"). Poi segnala e aggiunge il tag "Cal Customer" nella colonna 6.Distinzione maiuscole/minuscole e modalità di confronto in VBA InStr
Per impostazione predefinita,
InStrè case-sensitive (chiamatovbBinaryCompare). Mettiamo che cerchi "chicago" ma nei dati c'è "Chicago":InStrrestituirà0.Per risolvere, usa l'argomento
comparedove:vbBinaryCompare(Default): distingue tra maiuscole/minuscole ("A" non è uguale a "a").vbTextCompare: non distingue tra maiuscole/minuscole: "A" è uguale a "a".Nell'esempio seguente,
InStrrestituisce0perché cerca "fragile" (minuscolo) dentro "Fragile items".Usando invece
vbTextCompareottieni1con la stessa ricerca, ignorando le maiuscole/minuscole.VBA InStr con posizione di partenza
A volte non vuoi iniziare la ricerca dall'inizio della stringa. L'argomento
startindica a VBA da dove cominciare a cercare.Nell'esempio seguente, l'argomento
startè impostato a10, quindi VBA inizia a cercare dal decimo carattere invece che dal primo. Trova poi"delivery"più avanti nella stringa.Il risultato dell'esempio sopra è
31, cioè la posizione in cui inizia"delivery".Questo metodo è utile quando vuoi la seconda occorrenza di qualcosa o ignorare un prefisso noto quando lavori con pattern ripetuti.
VBA InStr vs. InStrRev
Come hai già visto,
InStrcerca da sinistra a destra.InStrRev, invece, cerca da destra a sinistra.Per esempio, abbiamo usato
InStrRevper trovare l'ultimo punto nell'email. Il risultato è18, ossia la posizione del punto prima di "com".Troverai
InStrRevpiù utile quando ti serve l'ultima occorrenza di qualcosa o quando lavori con nomi di file, email o percorsi.Casi d'uso comuni di VBA InStr
Ora che abbiamo visto esempi di come funziona la funzione VBA
InStr, vediamo i casi d'uso più comuni.Controllare se una cella contiene una keyword
Supponiamo che tu abbia un dataset di ordini dei clienti e che debba contrassegnare ordini per una gestione specifica. Il codice guarda la colonna
OrderNotese segnala tutto ciò che contiene "noon".Convalidare testo in stile email
Puoi anche usare la funzione
InStrper controllare rapidamente formati email validi. Per esempio, il codice qui sotto verifica se l'email contiene@e scrive "Valid Email Format" nella colonna 6.Rilevare separatori come virgole o trattini
Puoi usare la funzione
InStrper verificare se esiste un trattino, una virgola o una barra nel testo. Nell'esempio sotto, il codice scorreOrderNotes(colonna E), controlla se c'è una virgola nel testo, quindi scrive un risultato in colonna F.Errori comuni con VBA InStr
Anche da sviluppatore esperto potresti imbatterti in problemi con la funzione
InStrche fanno comportare il codice in modo inatteso. Ecco i problemi più comuni che ho incontrato e come risolverli:Dimenticare che InStr parte da 1: ricorda sempre che le posizioni partono da 1, non da 0. Se arrivi da Python o JavaScript, all'inizio può sembrare strano.
Trattare InStr come True/False: ricorda che
InStrnon restituisceTrueoFalse. Se vuoi trovare qualcosa, devi verificare se il risultato è> 0.Ignorare le maiuscole/minuscole: come ora sai,
InStrè sensibile alle maiuscole/minuscole per default. Se non ti interessa la differenza, dillo usandovbTextComparenell'argomentocompare.Confondere string1 e string2: ricorda sempre che il primo argomento è dove cerchi. Il secondo è ciò che stai cercando. Se cerchi così
InStr(SearchTerm, FullText), otterrai sempre0.VBA InStr vs. altre funzioni stringa VBA
Dato che
InStrdi solito indica dove si trova una stringa in un testo, confrontiamola con altre funzioni sulle stringhe.InStr vs. Like
L'operatore
Likesi usa per il pattern matching. Per esempio, il codice sotto controlla "Fragile", ma usa un pattern*, che significa "qualsiasi cosa prima o dopo".Usa
InStrse ti serve solo sapere se un testo esiste, eLikequando devi controllare testi con pattern complessi.InStr vs. Replace
Sebbene tu possa usare
InStrper cambiare l'intero valore in una cella, la funzioneReplacecambia un testo specifico nella cella.Nell'esempio seguente, la funzione
Replacesostituisce direttamente "Fragile" con "Handle Carefully" dentro il testo.InStr vs. Mid
La funzione Mid si usa per estrarre testo da una stringa. Perciò userai spesso
MidconInStrper estrarre il testo dopo averne ottenuto la posizione.Il codice qui sotto estrae il dominio dalle email nel dataset. La funzione
InStrtrova dove appare "@" nell'email, poiMidinizia l'estrazione subito dopo. Il codice termina scrivendo il dominio nella colonna H.InStr vs.Split
La funzione
Splitsi usa per dividere il testo in parti specificando un separatore.Nell'esempio seguente, il codice legge ogni riga dalla colonna A, controlla se c'è una virgola e poi divide il testo in due parti. Scrive
Name→ colonna B eCity→ colonna C.Best practice per usare VBA InStr
Per evitare errori nel tuo VBA, ti consiglio le seguenti best practice, che mi hanno fatto risparmiare tempo:
Usa vbTextCompare quando le maiuscole/minuscole non contano: dato che la maggior parte dei dati reali non è coerente nel casing, potresti perdere corrispondenze se ti affidi all'
argomentodi confronto predefinito.Combinala con "If" per una logica chiara: cerca sempre di includere una logica che restituisca un valore, perché
InStrda sola ti dà solo un numero.Controlla > 0, non posizioni esatte, a meno che tu non abbia davvero bisogno della posizione.
Tieni il parsing leggibile. Non impilare troppe funzioni in una riga.
Conclusione
InStrè semplice, ma finirai per usarla ovunque. Ti dà la posizione di una stringa dentro un'altra, e quel singolo numero guida molte decisioni in VBA: se qualcosa esiste, da dove estrarre e cosa deve fare la macro dopo. Da sola è solo una ricerca. Combinata con funzioni comeMid,Replaceo ancheSplit, diventa parte di un flusso di lavoro che fa davvero le cose.Segui il nostro corso Data Analysis in Excel per padroneggiare l'analisi avanzata. Inoltre, segui il nostro corso Intermediate Power Query in Excel per imparare la trasformazione dei dati e l'uso del linguaggio M.