Trovare l’ennesima occorrenza di un carattere (Microsoft Excel)
Barry si ritrova spesso a voler identificare l’ennesima occorrenza di un carattere all’interno di una stringa di testo. Sa di poter utilizzare le funzioni CERCA e TROVA del foglio di lavoro per trovare un’occorrenza iniziale, ma non è sicuro di come trovare, ad esempio, la terza occorrenza della lettera “B” all’interno di una stringa di testo.
In realtà, la funzione SEARCH può essere utilizzata per trovare l’occorrenza desiderata, nel modo seguente:
=SEARCHB("b",G20,(SEARCHB("b",G20,(SEARCHB("b",G20,1)+1))+1))
Notare come la funzione SEARCHB viene utilizzata in modo nidificato. La formula specifica cosa si sta cercando (la lettera “b”) e il numero di livelli di nidificazione indica quale occorrenza all’interno della cella si desidera trovare. La formula restituisce la posizione del carattere desiderato all’interno della cella.
Il problema con una formula del genere, ovviamente, è che è difficile da mantenere e può diventare rapidamente inutilizzabile se si desidera trovare, ad esempio, la settima occorrenza.
Una formula più flessibile sarebbe la seguente:
=FIND(CHAR(1),SUBSTITUTE(A1,"B",CHAR(1),3))
Questa formula esamina il valore in A1. Sostituisce il codice CHAR (1) per la terza occorrenza di “B” all’interno della cella. La funzione FIND cerca quindi all’interno della stringa risultante la posizione in cui si verifica CHAR (1).
Se l’occorrenza desiderata non esiste, la formula restituisce un errore #VALORE.
Se preferisci, potresti creare una funzione definita dall’utente che cercherà l’ennesima posizione di un personaggio. Quella che segue è una macro molto semplice che accetta tre argomenti: la stringa da cercare, il testo da trovare e la posizione desiderata.
Function FindN(sFindWhat As String, _ sInputString As String, N As Integer) As Integer Dim J As Integer Application.Volatile FindN = 0 For J = 1 To N FindN = InStr(FindN + 1, sInputString, sFindWhat) If FindN = 0 Then Exit For Next End Function
La funzione fa distinzione tra maiuscole e minuscole in ciò che cerca e restituisce la posizione all’interno della stringa specificata in cui si verifica il valore sFindWhat. Se non ci sono occorrenze nell’istanza specificata, la funzione restituisce uno 0. Quanto segue mostra come la funzione può essere utilizzata in un foglio di lavoro:
=FindN("b",C15,3)
_Nota: _
Se desideri sapere come utilizzare le macro descritte in questa pagina (o in qualsiasi altra pagina dei siti ExcelTips), ho preparato una pagina speciale che include informazioni utili.
ExcelTips è la tua fonte di formazione economica su Microsoft Excel.
Questo suggerimento (3324) si applica a Microsoft Excel 97, 2000, 2002 e 2003. Puoi trovare una versione di questo suggerimento per l’interfaccia a nastro di Excel (Excel 2007 e versioni successive) qui: