Conversione corretta di maiuscole e minuscole con eccezioni (Microsoft Excel)
Frank ha bisogno di convertire 4.000-5.000 nomi ogni giorno da maiuscolo a maiuscolo. La funzione PROPER gli fornisce un risultato accettabile che necessita ancora di revisione e modifica manuale per far fronte agli acronimi, ecc. Che non dovrebbero essere nascosti. Il pensiero di Frank è che probabilmente ha bisogno della funzione per includere una ricerca in una sorta di elenco di eccezioni, quindi si chiede se esiste una tale capacità per la conversione dei casi in Excel.
Il modo migliore per gestirlo dipenderà dai dati con cui inizi. Ad esempio, diciamo che i seguenti sono i valori di due celle nei dati di origine:
Big John's Mining, LLC USA
Se la tua eccezione è che non vuoi cambiare il caso di LLC, allora hai bisogno di un metodo che esamini parti di ogni cella. Se la tua eccezione è che non vuoi cambiare il caso degli Stati Uniti, allora hai bisogno di un metodo che valuterà il contenuto di ogni cella nel suo complesso.
È più facile prendersi cura del secondo tipo di dati rispetto al primo, quindi diamo un’occhiata a quello per primo. La formula seguente si basa su un elenco di eccezioni che hai da qualche parte nella tua cartella di lavoro. Questo elenco di eccezioni deve essere impostato come intervallo denominato, utilizzando il nome Exceptions.
Se i tuoi dati originali sono nella colonna A, puoi inserire questa formula nella cella B1 e quindi copiarla per quanto necessario:
=IFERROR(VLOOKUP(A1,Exceptions,1,0),PROPER(A1))
Qualsiasi cella che corrisponde pienamente a qualsiasi cosa nella tabella delle eccezioni finirà per apparire esattamente come l’eccezione, e tutto ciò che non corrisponde completamente finirà per avere applicato PROPER.
Per quanto riguarda il primo tipo di dati (in cui è necessario cercare all’interno di ogni cella per le eccezioni), è meglio fare affidamento su una macro. Quello che segue è un esempio di quello che potresti usare come punto di partenza.
Function MyProper(ByVal r As Range) As String Dim vExceptions As Variant Dim vReplacements As Variant Dim vWords As Variant Dim iRaw As String Dim J As Integer Dim K As Integer Dim sTemp As String ' Exceptions array vExceptions = Array("USA", "PhD", "LLC", "and", _ "Kentucky", "D.C.") ' Replacements array vReplacements = Array("USA", "PhD", "LLC", "and", _ "KY", "DC") ' Convert the text to Proper case and store in a string iRaw = StrConv(r, 3) ' Split the words into an array vWords = Split(iRaw, " ") For J = LBound(vWords) To UBound(vWords) For K = LBound(vExceptions) To UBound(vExceptions) If UCase(vWords(J)) = UCase(vExceptions(K)) Then vWords(J) = vReplacements(K) End If Next K Next J ' Rebuild the cell contents sTemp = "" For J = LBound(vWords) To UBound(vWords) sTemp = sTemp & " " & vWords(J) Next J MyProper = Trim(sTemp) End Function
Questa è una funzione definita dall’utente, quindi puoi usare quanto segue per eseguire una conversione sui tuoi dati di origine:
=MyProper(A1)
La velocità della macro dipenderà da due cose: il numero di volte in cui viene utilizzata nel foglio di lavoro (il numero di parole che devi modificare) e il numero di eccezioni che stai verificando nella macro. Con 4.000-5.000 parole e una dozzina di eccezioni controllate, la macro dovrebbe comunque funzionare abbastanza velocemente da essere accettabile. (Sarà sicuramente più veloce che controllare a mano!)
La funzione si basa su due array, vExceptions e vReplacements. Esplode il contenuto della cella nell’array vWords utilizzando la funzione Split. (Dopo l’esecuzione della funzione Split, ogni elemento dell’array vWords conterrà una parola, come definito dall’occorrenza di uno spazio.) Ogni elemento dell’array vWords viene quindi confrontato con ogni elemento dell’array vExceptions. Se corrispondono (o, più propriamente, se la versione maiuscola di ciascuna di esse corrisponde), viene utilizzato l’elemento corrispondente dell’array vReplacements al posto della parola originale. Questo approccio ha l’ulteriore vantaggio di consentire di sostituire gli acronimi, come si fa sostituendo KY con Kentucky e DC con D.C.
Ricorda che ho detto che questa macro è solo un buon punto di partenza.
Ovviamente sarà necessario modificarlo per riflettere le eccezioni e gli elenchi di sostituzioni. Inoltre, è necessario comprendere che se nei dati originali è presente la punteggiatura, tale punteggiatura è considerata parte delle “parole” esplose dalla funzione Dividi. Ad esempio, se i dati originali hanno qualcosa come “Davis, LLC, Stanton”, le virgole sono considerate parte delle parole che seguono. (Ricorda che la divisione è fatta negli spazi.) Quindi, ti ritroverai con “Davis, Llc, Stanton” nel risultato perché “LLC” nell’array vExceptions non corrisponderà a “LLC”, che è nelle vWords Vettore.
ExcelTips è la tua fonte di formazione economica su Microsoft Excel.
Questo suggerimento (7840) si applica a Microsoft Excel 2007, 2010, 2013, 2016, 2019 e Excel in Office 365.