Vai al contenuto principale

Funzione VBA InStr: come cercare testo in Excel VBA

Scopri come usare la funzione VBA InStr per trovare testo nelle stringhe: sintassi, esempi, distinzione maiuscole/minuscole ed errori comuni.
Aggiornato 21 set 2026  · 9 min leggi

Esplora con l'AI

ChatGPTClaudePerplexity

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])

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 Sub

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 Sub

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 Sub

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 Sub

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 Sub

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 Sub

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 Sub

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 Sub

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("john.jacobs@email.com", ".")
    
    MsgBox result

End Sub

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 Sub

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 Sub

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 Sub

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 Sub

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 Sub

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 Sub

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 Sub

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.

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.


Allan Ouko's photo
Author
Allan Ouko
LinkedIn
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.

Argomenti
Excel

Impara con DataCamp

Programma

Fondamenti di Excel

16 h
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.
Vedi dettagliRight Arrow
Inizia Il Corso
Mostra altroRight Arrow