Funzione Excel VBA InStr - spiegata con esempi

Ieri ho ricevuto un'e-mail da uno dei miei lettori - June.

Voleva sapere come applicare il formato del carattere in grassetto a una parte specifica di una stringa all'interno di una cella. Ad esempio, applica il formato in grassetto solo alla parola "Hello" da "Hello World".

E voleva farlo per centinaia di cellule contemporaneamente.

Poiché non esiste alcuna funzionalità integrata in Excel in grado di farlo, ho creato una semplice macro che utilizza il Funzione Excel VBA InStr (vedrai come farlo nell'Esempio 4 in questo tutorial).

Ma prima, vediamo come funziona la funzione Excel VBA InStr!

Funzione Excel VBA InStr

In questo tutorial, spiegherò l'uso della funzione InStr in Excel VBA e vedrò alcuni esempi pratici in cui può essere utilizzata.

Funzione Excel VBA InStr - Introduzione

La funzione InStr trova la posizione di una sottostringa specificata all'interno della stringa e restituisce la prima posizione della sua occorrenza.

Ad esempio, se si desidera trovare la posizione di "x" in "Excel", l'utilizzo della funzione InStr VBA di Excel restituirà 2.

Sintassi della funzione InStr

InStr([Inizio], String1, String2, [Confronta] )
  • [Cominciare] - (argomento facoltativo) questo è un valore intero che indica alla funzione InStr la posizione iniziale da cui dovrebbe iniziare a guardare. Ad esempio, se voglio che la ricerca inizi dall'inizio, inserirò il valore come 1. Se voglio che inizi dal terzo carattere in poi, userò 3. Se omesso, viene preso il valore predefinito di 1.
  • Stringa1 - Questa è la stringa principale (o la stringa padre) in cui si desidera eseguire la ricerca. Ad esempio, se stai cercando la posizione di x in Excel, la stringa 1 sarebbe "Excel".
  • Stringa2 - Questa è la sottostringa che stai cercando. Ad esempio, se stai cercando la posizione di x in Excel, String2 sarebbe x.
  • [Confrontare] - (argomento facoltativo) È possibile specificare uno dei tre valori seguenti per l'argomento [confronto]:
    • vbBinaryCompare - Questo farebbe un confronto carattere per carattere. Ad esempio, se stai cercando "x" in "Excel", restituirà 2, ma se stai cercando "X" in "Excel", restituirà 0 poiché X è in maiuscolo. Puoi anche usare 0 invece di vbBinaryCompare. Se l'argomento [Confronta] viene omesso, questo viene preso come predefinito.
    • vbTextCompare - Questo farebbe un confronto testuale. Ad esempio, se cerchi "x" o "X" in Excel, restituirà 2 in entrambi i casi. Questo argomento ignora la lettera maiuscola. Puoi anche usare 1 invece di vbTextCompare.
    • vbDatabaseCompare - Utilizzato solo per Microsoft Access. Utilizza le informazioni nel database per eseguire il confronto. Puoi anche usare 2 invece di vbDatabaseCompare.

Note aggiuntive sulla funzione InStr VBA di Excel:

  • InStr è una funzione VBA e non una funzione del foglio di lavoro. Ciò significa che non è possibile utilizzarlo all'interno del foglio di lavoro.
  • Se String2 (che è la sottostringa di cui stai cercando la posizione) è vuota, la funzione restituirà il valore dell'argomento [Start].
  • Se la funzione InStr non riesce a trovare la sottostringa all'interno della stringa principale, restituirà 0.

Ora diamo un'occhiata ad alcuni esempi di utilizzo della funzione InStr VBA di Excel

Esempio 1 - Trovare la posizione dall'inizio

In questo esempio, userò la funzione InStr per trovare la posizione di "V" in "Excel VBA" dall'inizio.

Il codice per questo sarebbe:

Sub FindFromBeginning() Dim Position As Integer Position = InStr(1, "Excel VBA", "V", vbBinaryCompare) MsgBox Position End Sub

Quando esegui questo codice, mostrerà una finestra di messaggio con il valore 7, che è la posizione di "V" nella stringa "Excel VBA".

Esempio 2 - Trovare la posizione dall'inizio della seconda parola

Supponiamo di voler trovare la posizione di "il" nella frase - "La volpe marrone veloce salta sopra il cane pigro"

Tuttavia, voglio che la ricerca inizi dalla seconda parola in poi.

In questo caso, dobbiamo cambiare l'argomento [Inizio] per assicurarci che specifichi la posizione da cui inizia la seconda parola.

Ecco il codice che lo farà:

Sub FindFromSecondWord() Dim Position As Integer Position = InStr(4, "La volpe marrone veloce salta sul cane pigro", "the", vbBinaryCompare) MsgBox Position End Sub

Questo codice mostrerà la finestra di messaggio con il valore 32 poiché abbiamo specificato la posizione iniziale come 4. Quindi ignora il primo "The" e trova il secondo "the" nella frase.

Se vuoi renderlo più dinamico, puoi migliorare il codice in modo che ignori automaticamente la prima parola.

Ecco il codice avanzato che farà questo:

Sub FindFromSecondWord() Dim StartingPosition As Integer Dim Position As Integer StartingPosition = InStr(1, "La veloce volpe marrone salta sopra il cane pigro", " ", vbBinaryCompare) Position = InStr(StartingPosition, "La veloce volpe marrone salta sopra il pigro dog", "the", vbBinaryCompare) MsgBox Position End Sub

Questo codice trova prima la posizione di uno spazio e lo memorizza nella variabile StartingPosition.

Quindi usa questa variabile come posizione iniziale per cercare la parola "il".

Quindi restituisce 32 (che è la posizione iniziale di "il" dopo la prima parola).

Esempio 3 - Trovare la posizione di @ nell'indirizzo e-mail

Puoi facilmente creare una funzione personalizzata per trovare la posizione di @ in un indirizzo email utilizzando la funzione Excel VBA InStr.

Ecco il codice per creare la funzione personalizzata:

Funzione FindPosition(Ref As Range) As Integer Dim Position As InStr(1, Ref, "@") FindPosition = Posizione Fine Funzione

Ora puoi utilizzare questa funzione personalizzata come qualsiasi altra funzione del foglio di lavoro. Prenderà un riferimento di cella come input e ti darà la posizione di @ in esso.

Allo stesso modo, puoi creare una funzione personalizzata per trovare la posizione di qualsiasi sottostringa all'interno della stringa principale.

Esempio 4 - Evidenziare una parte di stringa all'interno di celle

Questa è la domanda che è stata posta da June (il mio lettore che mi ha anche ispirato a scrivere questo tutorial).

Ecco un esempio di dati nel formato che June mi ha inviato:

La sua domanda era di rendere in grassetto i numeri fuori dalla parentesi.

Ecco il codice che ho creato che fa questo:

Sub Bold() Dim rCell As Range Dim Char As Integer per ogni rCell nella selezione CharCount = Len(rCell) Char = InStr(1, rCell, "(") rCell.Characters(1, Char - 1).Font.Bold = True Next rCell End Sub

Il codice sopra usa il ciclo For Each per passare attraverso ciascuna delle celle nella selezione. Identifica la posizione del carattere della parentesi di apertura utilizzando la funzione InStr. Quindi cambia il carattere del testo prima della parentesi.

Per utilizzare questo codice, è necessario copiare e incollare un modulo nell'editor VB.

Dopo aver copiato e incollato il codice, seleziona le celle in cui desideri eseguire questa formattazione ed esegui la macro (come mostrato di seguito).

Potrebbero piacerti anche i seguenti tutorial VBA di Excel:

  • Funzione SPLIT VBA di Excel.
  • Funzione VBA TRIM.
  • La guida definitiva ai loop VBA di Excel.
  • Una guida per principianti all'utilizzo di For Next Loop in Excel VBA.
  • Come creare e utilizzare un componente aggiuntivo di Excel.
  • Come combinare più cartelle di lavoro in una cartella di lavoro di Excel
  • Come contare le celle colorate in Excel
  • Utili esempi di macro VBA di Excel per principianti.
  • Come ordinare i dati in Excel utilizzando VBA (una guida passo passo)

Aiuterete lo sviluppo del sito, condividere la pagina con i tuoi amici

wave wave wave wave wave