Estrarre le lettere iniziali da una stringa (Microsoft Excel)
Rajeev ha bisogno di una formula che estrarrà le prime lettere di una serie di parole. Ad esempio, se una cella contiene il testo “Rajeev Kumar Pandey”, vorrebbe estrarre, in un’altra cella, le lettere “RKP”.
Il numero di parole in serie può variare da cella a cella.
Ci sono un paio di modi per affrontare questo compito. Si presume, per cominciare, che non si desideri modificare la struttura del foglio di lavoro aggiungendo colonne intermedie. Questa ipotesi preclude, inoltre, l’uso della funzione Text to Columns per dividere la stringa originale in singole parole.
La chiave del problema è assicurarsi che la formula possa determinare dove si trovano gli spazi nella stringa originale. Potresti pensare che una formula come la seguente farà il lavoro:
=LEFT(A1,1)&MID(A1,FIND(" ",A1,1)+1,1)&MID(A1, FIND(" ",A1,FIND(" ",A1,1)+1)+1,1)
Questa formula funziona parzialmente. Funziona perfettamente se la stringa originale ha due spazi che separano tre parole. Se ci sono meno parole, la formula restituisce un errore. Se sono presenti altre parole, restituisce solo le prime lettere delle prime tre parole (ignora qualsiasi cosa dopo la terza parola).
Ciò significa che la formula deve non solo controllare gli spazi, ma gestire gli errori se non ci sono spazi o se ci sono troppo pochi spazi. Il controllo degli errori significa che la formula diventa molto più lunga:
=IF(ISERR(LEFT(A1,1)&MID(A1,SEARCH(" ",A1)+1,1) &MID(A1,SEARCH(" ",A1,SEARCH(" ",A1)+1)+1,1) &MID(A1,SEARCH(" ",A1,SEARCH(" ",A1,SEARCH(" ",A1)+1)+1)+1,1)), IF(ISERR(LEFT(A1,1)&MID(A1,SEARCH(" ",A1)+1,1) &MID(A1,SEARCH(" ",A1,SEARCH(" ",A1)+1)+1,1)), IF(ISERR(LEFT(A1,1)&MID(A1,SEARCH(" ",A1)+1,1)), IF(ISERR(LEFT(A1,1)),"",LEFT(A1,1)),LEFT(A1,1)&MID(A1,SEARCH(" ",A1)+1,1)), LEFT(A1,1)&MID(A1,SEARCH(" ",A1)+1,1)&MID(A1,SEARCH(" ",A1, SEARCH(" ",A1)+1)+1,1)),LEFT(A1,1)&MID(A1,SEARCH(" ",A1)+1,1) &MID(A1,SEARCH(" ",A1,SEARCH(" ",A1)+1)+1,1) &MID(A1,SEARCH(" ",A1,SEARCH(" ",A1,SEARCH(" ",A1)+1)+1)+1,1))
Questa formula gestirà, correttamente, qualsiasi cosa da 0 a 4 parole in una stringa. Si presume inoltre che la stringa non inizi o termini con uno spazio e che non contenga più numeri di spazi tra le parole. Se vuoi gestire un numero maggiore di parole o altre potenziali complicazioni (come il numero di spazi tra le parole), è meglio usare una funzione definita dall’utente.
Esistono diversi modi in cui una funzione definita dall’utente può estrarre i caratteri iniziali dalle parole di una stringa. In effetti, ho ricevuto parecchie variazioni che ottengono la stessa cosa. Il seguente esempio, tuttavia, è forse il codice più conciso che ho incontrato:
Function Initials1(Raw As String) As String Dim Temp As Variant Dim J As Integer Application.Volatile Temp = Split(Trim(Raw)) For J = 0 To UBound(Temp) Initials1 = Initials1 & Left(Temp(J), 1) Next J End Function
Questo codice funzionerà in qualsiasi versione di VBA a partire da Excel 2000. La funzione Split “strappa” una stringa in base alla posizione degli spazi al suo interno. Le singole parole nella stringa vengono inserite in un array (in questo caso, Temp) da cui è possibile accedere alle singole parole. Per usare la funzione nel tuo foglio di lavoro, usa semplicemente qualcosa del genere:
=Initials1(A1)
Se stai usando una versione di Excel che non supporta la funzione Split, allora anche il seguente codice funzionerà bene:
Function Initials2(Raw As String) Dim p As Integer Application.Volatile Initials2 = "" p = 0 Do Initials2 = Trim(Initials2) & Mid(Raw, p + 1, 1) p = InStr(p + 1, Raw, " ") Loop Until p = 0 End Function
_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 (8661) 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: