Aggiunta di spazi davanti alle lettere maiuscole (Microsoft Excel)
Muhammad ha un lungo elenco di nomi di società in un foglio di lavoro. Il nome di ciascuna azienda ha in qualche modo rimosso tutti gli spazi, in modo che (ad esempio) vengano visualizzati come “AstroPhysics” invece di “Astro Physics”. Muhammad ha bisogno di un modo per elaborare tutti i nomi delle società per inserire un singolo spazio tra ogni occorrenza di una lettera maiuscola, ad eccezione della prima lettera nella cella. Si chiede se ci sia un modo semplice per farlo.
Ci sono alcuni modi in cui puoi aggiungere gli spazi. Prima di arrivare alle inevitabili soluzioni basate su macro, potresti voler esaminare i nomi delle società. Potrebbe essere che ci sia semplicemente un carattere non stampabile tra ogni parola nel nome, invece di uno spazio. È possibile determinarlo modificando la cella, posizionando il punto di inserimento alcuni caratteri prima di una lettera maiuscola e quindi premendo più volte la freccia destra. Dovresti vedere il punto di inserimento spostarsi di un singolo spazio a destra dopo ogni pressione; se sembra “esitare” dove dovrebbe essere lo spazio, allora c’è un carattere non stampabile.
In questo caso, la soluzione migliore è eseguire un’operazione Trova e sostituisci per sostituire il carattere non stampabile con uno spazio effettivo. (Puoi selezionare il carattere non stampabile – tieni premuto il tasto Maiusc mentre premi la freccia destra sul punto in cui credi che sia – e copiarlo. Quindi incollalo nella casella Trova per fare la tua ricerca.)
Supponendo che i dati non contengano caratteri non stampabili, potresti anche provare a utilizzare un approccio non macro. Forse l’approccio più semplice è aggiungere una o due colonne helper. Nella prima puoi inserire una formula per capire la posizione della seconda lettera maiuscola all’interno del nome dell’azienda. Supponendo che il nome dell’azienda sia nella cella A1, la formula, che segue, dovrebbe essere inserita come una formula di matrice:
=SMALL(FIND(0,SUBSTITUTE(A1,CHAR(ROW(INDIRECT("65:90"))),0)&0),2)
Se questa formula è stata inserita nella cella B1, è possibile utilizzare quanto segue per inserire lo spazio nel nome dell’azienda originale:
=LEFT(A1,B1-1)&" " & RIGHT(A1,(LEN(A1)-B1)+1)
Tuttavia, questo approccio presenta un enorme svantaggio: si presume che i dati originali seguano un formato molto rigoroso. Funziona meravigliosamente con nomi di società che iniziano con una lettera maiuscola e che richiedono l’inserimento di un solo spazio. Se il nome non si adatta a questi parametri, non funzionerà come previsto.
Ovviamente puoi superare questi problemi se usi una macro per inserire gli spazi. Quello che segue è un approccio semplice che esamina ogni carattere nella cella. Se il carattere è una lettera maiuscola, viene inserito uno spazio prima del carattere. Al termine della macro, la stringa viene reinserita nella cella.
Function Add_Spaces(ByVal sText As String) As String Dim CharNum As Long Dim FixedText As String Dim CharCode As Long FixedText = Left(sText, 1) For CharNum = 2 To Len(sText) CharCode = Asc(Mid(sText, CharNum, 1)) If CharCode >= 65 And CharCode <= 90 Then FixedText = FixedText & " " & Mid(sText, CharNum, 1) Else FixedText = FixedText & Mid(sText, CharNum, 1) End If Next CharNum Add_Spaces = FixedText End Function
Usare la macro è semplice; se il nome dell’azienda è nella cella A1, viene utilizzato quanto segue:
=Add_Spaces(A1)
Un approccio più compatto consiste nel fare affidamento su espressioni regolari per individuare le lettere maiuscole e inserire uno spazio, come mostrato di seguito:
Function SplitCaps(str As String) As String Dim objRegex As Object Set objRegex = CreateObject("vbscript.regexp") With objRegex .Global = True .Pattern = "([a-z])([A-Z])" SplitCaps = .Replace(str, "$1 $2") End With End Function
Questa particolare tecnica di macro richiede l’attivazione delle espressioni regolari. Puoi farlo nell’editor VB scegliendo Strumenti | Riferimenti e quindi scorrere i riferimenti disponibili per individuare l’opzione Microsoft VBScript Regular Expressions 5.5. Assicurati che la casella di controllo a sinistra del riferimento sia selezionata, quindi fai clic su OK. È quindi possibile utilizzare la funzione SplitCaps da Excel nello stesso modo in cui si potrebbe utilizzare la funzione Add_Spaces.
Naturalmente, l’appropriatezza di qualsiasi approccio dipenderà, in gran parte, dalle caratteristiche dei dati con cui lavorate. Se i nomi originali della tua azienda includono più lettere maiuscole sequenziali (come “ABCCorp.”), Ti ritroverai con troppi spazi nell’output, ad esempio “ABCCorp”. diventa “A B C Corp.” invece di “ABC Corp.”. Inoltre, i caratteri non composti da lettere possono lanciare una chiave inglese nei lavori in modo tale che “H&M”
diventa “H&M” o rimane “H&M” (a seconda dell’approccio macro utilizzato).
Nel tentativo di superare alcuni di questi nomi di società strane, potresti provare un approccio macro diverso che verifica se ci sono più lettere maiuscole sequenziali e regola l’output di conseguenza.
Sub AddSpaces() Dim i As Integer Dim j As Integer Dim PriorCap As Boolean Dim temp As String j = 1 Do While Cells(j, 2) <> "" Cells(j, 3) = "" PriorCap = True For i = 1 To Len(Cells(j, 2)) Select Case Mid(Cells(j, 2), i, 1) Case "A" To "Z", "-" If PriorCap = False Then Cells(j, 3) = Cells(j, 3) & " " & _ Mid(Cells(j, 2), i, 1) Else Cells(j, 3) = Cells(j, 3) & _ Mid(Cells(j, 2), i, 1) End If PriorCap = True Case Else Cells(j, 3) = Cells(j, 3) & _ Mid(Cells(j, 2), i, 1) PriorCap = False End Select Next i j = j + 1 Loop End Sub
_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 (12810) si applica a Microsoft Excel 2007, 2010, 2013, 2016, 2019 e Excel in Office 365.