Sommario
Per gestire gli spazi bianchi nel modo più efficace, utilizzate le espressioni regolari per rimuovere tutti gli spazi in una cella, sostituire più spazi con un singolo carattere, tagliare gli spazi solo tra i numeri e altro ancora.
Qualunque siano i dati di input utilizzati, difficilmente si incontra un set di dati senza spazi. Nella maggior parte dei casi, gli spazi bianchi sono un bene: vengono utilizzati per separare visivamente le diverse informazioni e renderle più facili da percepire. In alcune situazioni, tuttavia, possono diventare un male: gli spazi extra possono incasinare le formule e rendere i fogli di lavoro quasi ingestibili.
Perché usare un'espressione regolare per tagliare gli spazi bianchi in Excel?
Prima di entrare nel vivo dell'utilizzo delle espressioni regolari per rimuovere gli spazi bianchi nei fogli di lavoro di Excel, vorrei affrontare la domanda che sorge spontanea: perché abbiamo bisogno delle regex quando Excel ha già la funzione TRIM?
Per capire la differenza, vediamo cosa viene considerato spazio bianco in ciascun caso:
- La funzione TRIM incorporata è in grado di spogliare solo gli elementi carattere spaziale che ha valore 32 nel sistema ASCII a 7 bit.
- Le espressioni regolari possono identificare alcune forme diverse di spazi bianchi, come lo spazio ( ), la tabulazione (\t), il ritorno a capo (\r) e la nuova riga (\n). Inoltre, c'è la funzione carattere di spazio bianco (\s) che corrisponde a tutti questi tipi e risulta estremamente utile per la pulizia dei dati di input grezzi.
Sapendo esattamente cosa succede dietro le quinte, è molto più facile trovare una soluzione, giusto?
Come attivare le espressioni regolari in Excel
È risaputo che Excel non supporta le espressioni regolari. Per abilitarle, è necessario creare una funzione VBA personalizzata. Fortunatamente ne abbiamo già una, denominata RegExpReplace Nel linguaggio di Excel, "rimuovere" è solo un'altra parola per "sostituire con una stringa vuota" :)
Per aggiungere la funzione a Excel, è sufficiente copiare il codice da questa pagina, incollarlo nell'editor VBA e salvare il file con il formato cartella di lavoro abilitata alle macro (.xlsm).
Ecco la sintassi della funzione come riferimento:
RegExpReplace(text, pattern, replacement, [instance_num], [match_case])I primi tre argomenti sono obbligatori, gli ultimi due sono facoltativi.
Dove:
- Testo - la stringa originale da cercare.
- Modello - la regex da cercare.
- Sostituzione - il testo da sostituire. A rimuovere spazi bianchi , si imposta questo argomento su uno dei due:
- stringa vuota ("") per tagliare assolutamente tutti gli spazi
- spazio carattere (" ") per sostituire più spazi con un unico carattere di spazio
- Numero_istanza (facoltativo) - il numero dell'istanza. Nella maggior parte dei casi, si ometterà per sostituire tutte le istanze (impostazione predefinita).
- Caso_di_corrente (facoltativo) - un valore booleano che indica se far coincidere (TRUE) o ignorare (FALSE) le maiuscole del testo. Per gli spazi bianchi, è irrilevante e quindi omesso.
Per ulteriori informazioni, consultare la funzione RegExpReplace.
Come rimuovere gli spazi bianchi con le regex - esempi
Con la funzione RegExpReplace aggiunta alla cartella di lavoro, affrontiamo i diversi scenari uno alla volta.
Rimuovere tutti gli spazi bianchi usando una regex
Per rimuovere tutti gli spazi in una stringa, è sufficiente cercare qualsiasi carattere di spazio bianco, compresi spazi, tabulazioni, ritorni a capo e avanzamenti di riga, e sostituirli con una stringa vuota ("").
Modello : \s+
Sostituzione : ""
Supponendo che la stringa di origine sia in A5, la formula in B5 è:
=RegExpReplace(A5, "\s+", "")
Per semplificare la gestione dei modelli, è possibile inserire la regex in una cella predefinita e fornirla alla formula utilizzando un riferimento assoluto come $A$2, in modo che l'indirizzo della cella rimanga invariato quando si copia la formula lungo la colonna.
=RegExpReplace(A5, $A$2, "")
Rimuovere più di uno spazio bianco
Per rimuovere spazi bianchi extra (cioè più di uno spazio consecutivo), utilizzare la stessa regex \s+ ma sostituire le corrispondenze trovate con un singolo carattere di spazio.
Modello : \s+
Sostituzione : " "
=RegExpReplace(A5, "\s+", " ")
Si noti che questa formula mantiene un carattere di spazio non solo tra le parole, ma anche all'inizio e alla fine di una stringa, il che non va bene. Per eliminare gli spazi bianchi iniziali e finali, annidare la formula precedente in un'altra funzione RegExpReplace che elimina gli spazi dall'inizio e dalla fine:
=RegExpReplace(RegExpReplace(A5, "\s+", " "), "^[\s]+".
Regex per rimuovere gli spazi bianchi iniziali e finali
Per cercare gli spazi bianchi all'inizio o alla fine di una riga, utilizzare le ancore di inizio ^ e fine $.
Guida spazi bianchi:
Modello : ^[\s]+
Trailing spazi bianchi:
Modello : [\s]+$
Leader e trailing spazi bianchi:
Modello : ^[\s]+
Qualunque sia la regex scelta, sostituire le corrispondenze con nulla.
Sostituzione : ""
Ad esempio, per eliminare tutti gli spazi all'inizio e alla fine di una stringa in A5, la formula è:
=RegExpReplace(A5, "^[\s]+
Come mostrato nella schermata sottostante, questa operazione rimuove solo gli spazi bianchi iniziali e finali, mentre gli spazi tra le parole rimangono intatti, creando una visione piacevole per l'occhio del lettore.
Rimuovere gli spazi bianchi extra ma mantenere le interruzioni di riga
Quando si lavora con stringhe a più righe, si può desiderare di eliminare gli spazi extra ma di mantenere le interruzioni di riga. Per fare ciò, invece del carattere di spazio bianco \s, cercare spazi [ ] o spazi e tabulazioni [\t ]. Quest'ultimo schema è utile quando i dati di partenza sono importati da un'altra fonte, ad esempio un editor di testo.
Nel set di dati sottostante, supponiamo di voler tagliare tutti gli spazi iniziali e finali e tutti gli spazi intermedi tranne uno, mantenendo intatte le righe multiple. Per svolgere questo compito, sono necessarie due diverse funzioni RegExpReplace.
La prima funzione sostituisce più spazi con un singolo carattere di spazio.
=RegExpReplace(A5, " +", " ")
L'altro elimina gli spazi dall'inizio e dalla fine di una riga:
=RegExpReplace(A5, "^ +
Basta annidare le due funzioni una nell'altra:
=RegExpReplace(RegExpReplace(A5, " +", " "), "^ +".
E otterrete un risultato perfetto:
Regex per sostituire più spazi con un solo carattere
Se si desidera rimuovere tutti gli spazi da una stringa e sostituire ogni gruppo di spazi consecutivi con un carattere specifico, è necessario procedere in questo modo:
Per prima cosa, utilizzare questa regex per tagliare gli spazi bianchi iniziali e finali:
=RegExpReplace(A8, "^[\s]+
Quindi, servite la funzione di cui sopra al file testo di un'altra RegExpReplace che sostituisce uno o più spazi bianchi consecutivi con il carattere specificato, ad esempio un trattino:
Modello : \s+
Sostituzione : -
Supponendo che la stringa di origine sia in A8, la formula assume questa forma:
=RegExpReplace(RegExpReplace(A8, "^[\s]+
Oppure è possibile inserire i modelli e le sostituzioni in celle separate, come mostrato nella schermata:
Regex per rimuovere le righe vuote
Ecco una domanda che gli utenti che hanno più righe in una cella pongono di frequente: "Ci sono molte righe vuote nelle mie celle. C'è un modo per eliminarle oltre a passare attraverso ogni cella e cancellare manualmente ogni riga?" La risposta: è facile!
Per corrispondere a righe vuote che non hanno un singolo carattere dall'inizio ^ della riga corrente fino alla riga successiva ´n, la regex è:
Modello : ^\n
Se le righe visivamente vuote contengono spazi o tabulazioni, utilizzare questa espressione regolare:
Modello ^[\t ]*\n
Basta sostituire la regex con una stringa vuota utilizzando questa formula e tutte le righe vuote saranno eliminate in un colpo solo!
=RegExpReplace(A5, $A$2, "")
Rimozione degli spazi bianchi con gli strumenti RegEx
Gli esempi precedenti hanno dimostrato solo una piccola parte delle meravigliose possibilità offerte dalle regex. Purtroppo, non tutte le funzioni delle espressioni regolari classiche sono disponibili in VBA.
Fortunatamente, gli strumenti RegEx inclusi nella nostra Ultimate Suite sono privi di queste limitazioni, poiché vengono elaborati dal motore RegEx .NET di Microsoft. Ciò consente di costruire modelli più sofisticati che non sono supportati dalle RegExp di VBA. Di seguito è riportato un esempio di espressione regolare.
Regex per rimuovere lo spazio tra i numeri
In una stringa alfanumerica, supponiamo di voler rimuovere gli spazi bianchi solo tra i numeri, in modo che una stringa come "A 1 2 B" diventi "A 12 B".
Per trovare una corrispondenza con uno spazio bianco tra due cifre qualsiasi, è possibile utilizzare i seguenti accorgimenti:
Modello : (?<=\d)\s+(?=\d)
Per creare una formula basata sulle regex di cui sopra, ecco due semplici passaggi da eseguire:
- Sul Dati Ablebits nella scheda Testo gruppo, fare clic su Strumenti Regex .
- Sul Strumenti Regex selezionare i dati di origine, immettere la regex, scegliere l'opzione Rimuovere e premere Rimuovere .
Per ottenere i risultati come formule e non come valori, ricordarsi di mettere un segno di spunta nel campo Inserire come formula casella di controllo.
Tra poco vedrete il AblebitsRegexRemove inserito in una nuova colonna a destra dei dati originali.
In alternativa, è possibile inserire la regex in una cella, ad esempio A5, e inserire la formula direttamente in una cella utilizzando l'opzione Funzione di inserimento nella finestra di dialogo, dove AblebitsRegexRemove è classificato sotto AblebitsUDFs .
Poiché questa funzione è stata progettata appositamente per rimuovere le stringhe, richiede solo due argomenti: la stringa di input e la regex:
=AblebitsRegexRemove(A5, $A$2)
Ecco come rimuovere gli spazi in Excel utilizzando le espressioni regolari. Vi ringrazio per la lettura e vi aspetto sul nostro blog la prossima settimana!
Download disponibili
Rimuovere gli spazi bianchi con la regex - esempi (file .xlsm)
Ultimate Suite - versione di prova (file .exe)