Excel non “salta” i vuoti quando i vuoti non sono veri vuoti ma stringhe ""
restituite da una formula. In questa guida trovi metodi pratici (manuali, formula unica, VBA e Power Query) per unire fino a 8 colonne di codici in una sola, evitando sovrascritture e refusi.
Scenario reale: perché Incolla speciale → Salta celle vuote non funziona
Hai otto colonne che in ogni riga cercano parole‑chiave e, se trovate, restituiscono un codice; altrimenti restituiscono una stringa vuota. Un esempio tipico:
=SE(VAL.NUMERO(TROVA("hg"; BL3)); "HG"; "")
Con circa 3.000 righe, l’idea era accodare/riunire i risultati in un’unica colonna usando Copia → Incolla speciale → Salta celle vuote. Peccato che Excel non salti affatto quelle che “sembrano” vuote: ISBLANK()
restituisce FALSO se la cella contiene una formula, e la stringa ""
non è un vero “vuoto” per Excel. Risultato: valori sovrascritti.
Come Excel interpreta “vuoto”, stringa vuota, e perché ti riguarda
- Cella vuota reale: non contiene nulla. È ciò che serve a “Salta celle vuote”.
- Stringa vuota
""
: è un contenuto (testo a lunghezza zero). Per Excel non è “assenza di contenuto”. ISBLANK(A1)
: vero solo se A1 è davvero vuota (nessuna formula).CONTA.VUOTE()
: conta anche le stringhe vuote come “vuoti logici” (utile in reportistica, ma non per l’incolla con “Salta vuoti”).- Regola chiave: una formula non può “cancellare” una cella; può solo restituire un valore (incluso
""
). Per ottenere un vuoto reale serve un’azione manuale o una macro.
Soluzioni collaudate (confronto rapido)
# | Strategia | Come funziona | Vantaggi | Limiti / Caveat |
---|---|---|---|---|
1 | Trasformare i “vuoti” in veri vuoti (manuale) | 1) Seleziona l’intervallo 2) Trova & Seleziona → Trova, lascia “Trova” vuoto, Cerca in: Valori, Trova tutto 3) Ctrl+A → chiudi la finestra 4) Premi Canc per eliminare i contenuti | Celle davvero vuote → “Salta celle vuote” ora funziona | Operazione ripetitiva; da rifare per ogni blocco di colonne |
2 | Convertire prima a valori | Copia → Incolla speciale → Valori sulla stessa colonna, poi applica il metodo 1 | Le formule non “ricompaiono” al ricalcolo | Perdi le formule (ok se il calcolo è concluso) |
3 | Macro VBA | Scansiona l’area; se cell.Value="" allora cell.ClearContents ; opzionale: reinserisce formule da un archivio | Automatizza su 3.000 righe × 8 colonne | Richiede abilitare macro; file .xlsm o Personal.xlsb |
4 | Evitare colonne intermedie (formula “tutto‑in‑uno”) | Uso di LET , TEXTJOIN , IF /IFS , XLOOKUP o una mappa codici; niente copia/incolla | Niente “Salta vuoti”, niente macro | Richiede Excel 365 / 2021 per alcune funzioni dinamiche |
5 | Power Query | Importi la tabella, aggiungi colonne condizionali, combini e ricarichi | Processo pulito, ripetibile, documentabile | Curva di apprendimento; disponibile da Excel 2016+ |
Percorso consigliato (rapido e pragmatico)
- Chiudi i calcoli: se non devi più aggiornare i risultati, converti le otto colonne a valori (Copia → Incolla speciale → Valori).
- Pulisci i falsi vuoti: usa il metodo “Trova tutto → Canc” oppure la macro qui sotto per ottenere veri vuoti.
- Unisci: Copia ogni colonna e incolla nella colonna finale con Incolla speciale → Salta celle vuote.
- Versione da consegna: salva una copia “pulita” senza macro (formato
.xlsx
).
Metodo manuale in dettaglio (affidabile e senza macro)
Passo A — Congela il risultato in valori
- Seleziona la prima colonna di codici (es. da C3:C3002).
- Copia (Ctrl+C).
- Incolla speciale → Valori (icona “123”). La colonna ora contiene valori (inclusi testi vuoti), non più formule.
- Ripeti per le altre 7 colonne.
Passo B — Trasforma i testi vuoti in vuoti reali
Hai due opzioni, scegli quella che preferisci.
- Opzione 1: Trova tutto → Canc
- Seleziona l’intervallo (le otto colonne).
- Home → Trova & Seleziona → Trova (o Ctrl+F), lascia “Trova” vuoto, clic su Opzioni e imposta Cerca in: Valori.
- Trova tutto → Ctrl+A per selezionare tutte le occorrenze → Chiudi.
- Premi Canc. Le celle diventano davvero vuote.
- Opzione 2: Filtro “(Vuote)”
- Applica il Filtro alla riga di intestazione.
- Per ogni colonna: apri il menu filtro → seleziona (Vuote) → seleziona le celle visibili → Canc.
Passo C — Incolla con “Salta celle vuote”
- Copia la prima colonna di codici → Incolla nella colonna destinazione.
- Per le colonne successive: Incolla speciale → Salta celle vuote. Solo i valori non-vuoti andranno a riempire i buchi, senza sovrascrivere quanto già presente.
Tip di verifica: prima di procedere, prova su una copia del file. Inserisci una colonna di controllo con =LUNGHEZZA(D3)
: 0 indica cella vuota reale; >0 indica contenuto (anche una stringa vuota trasformata in altro valore).
Soluzione automatica: macro VBA per “svuotare davvero” le celle con ""
Se devi ripetere spesso l’operazione su migliaia di righe, la macro seguente pulisce un’area selezionata rimuovendo i falsi vuoti (""
) ma lascia intatti gli altri valori.
' Modulo standard (Inserisci → Modulo). Salva come .xlsm.
Option Explicit
Sub ClearPseudoBlanks()
Dim rng As Range, c As Range
Dim calc As XlCalculation
On Error Resume Next
Set rng = Application.InputBox("Seleziona l'intervallo da pulire", Type:=8)
On Error GoTo 0
If rng Is Nothing Then Exit Sub
```
Application.ScreenUpdating = False
calc = Application.Calculation
Application.Calculation = xlCalculationManual
Application.EnableEvents = False
For Each c In rng.Cells
' Cancella solo le celle che contengono una stringa vuota
If c.Value = "" Then
c.ClearContents
End If
Next c
Application.EnableEvents = True
Application.Calculation = calc
Application.ScreenUpdating = True
```
End Sub
Uso: Alt+F8 → ClearPseudoBlanks → seleziona l’area (le otto colonne) → OK. Poi incolla con Salta celle vuote.
Variante: conserva un archivio delle formule
Se vuoi poter ripristinare velocemente le formule originarie dopo la pulizia, archivia i modelli in celle nascoste o in un foglio “ArchivioFormule” e usa una seconda macro per reinserirle dove ti servono. In alternativa, assegna Nomi definiti (es. FormulaCodiceHG
) alle formule “tipo” per reinserirle all’occorrenza.
Soluzione senza copia/incolla: una sola formula che fa tutto
Se hai Excel 365/2021, puoi evitare del tutto l’operazione di incolla. Di seguito tre ricette, a seconda di ciò che vuoi ottenere nella colonna finale.
Caso 1 — Vuoi concatenare tutti i codici presenti sulla riga (ignorando i vuoti)
Supponi che le otto colonne di codici siano C:J. La formula è sorprendentemente semplice:
=TESTO.UNISCI(""; VERO; C3:J3)
Per Excel in inglese: =TEXTJOIN("", TRUE, C3:J3)
. Il parametro “ignora vuoti” fa sì che né le celle vuote né le stringhe ""
vengano concatenate.
Caso 2 — Vuoi il primo codice non vuoto da sinistra
Questa è l’equivalente “coalesce” tra colonne, utile se cada riga deve avere un solo codice finale (priorità da sinistra a destra).
=LET(v; C3:J3; SE.ERRORE(INDICE(FILTRO(v; v<>""); 1); ""))
In inglese: =LET(v, C3:J3, IFERROR(INDEX(FILTER(v, v<>""), 1), ""))
.
Caso 3 — Mappa chiavi → codici (eviti otto colonne intermedie)
Metti in un piccolo elenco (due colonne) le coppie chiave da cercare e codice da emettere, ad esempio in un intervallo chiamato Mappa
con colonne Chiave
e Codice
. Poi, per ciascuna riga del testo di partenza (es. BL3), usa:
=TESTO.UNISCI(""; VERO; SE(VAL.NUMERO(TROVA(Mappa[Chiave]; BL3)); Mappa[Codice]; ""))
Questa formula genera direttamente il risultato, senza creare colonne “HG”, “BM”, “JRL”, ecc. Se una riga contiene più chiavi, concatenerà i relativi codici in ordine di elenco.
Nota separatori: se in Excel vedi errore, potrebbe dipendere dal separatore di elenco (;
vs ,
). Sostituisci coerentemente tutti i punti‑e‑virgola con virgole (o viceversa) in base alle impostazioni locali.
Power Query: processo ripetibile, documentato e “a prova di mano”
Power Query (scheda Dati → Recupera e trasforma) è ideale se questo flusso ti serve ogni mese o su file diversi. Concetto:
- Importa la tabella dati.
- Aggiungi colonne condizionali o una colonna personalizzata che calcoli i codici.
- Sostituisci le stringhe vuote con valori null.
- Combina le otto colonne in un’unica colonna, ignorando i null.
- Carica il risultato in Excel.
Esempio di logica (M) che unisce le colonne C1:C8
in “Codice”:
let
Fonte = Excel.CurrentWorkbook(){[Name="TabellaDati"]}[Content],
// Se le colonne contengono stringhe vuote, trasformale in null
VuotiComeNull = Table.ReplaceValue(Fonte, "", null, Replacer.ReplaceValue, {"C1","C2","C3","C4","C5","C6","C7","C8"}),
// Crea una lista dei valori di riga e rimuovi i null
CodiceUnito = Table.AddColumn(VuotiComeNull, "Codice", each
Text.Combine(
List.RemoveNulls(
Record.FieldValues(
Record.SelectFields(_, {"C1","C2","C3","C4","C5","C6","C7","C8"})
)
), ""
), type text),
// (Opzionale) Rimuovi le colonne originali
Risultato = Table.RemoveColumns(CodiceUnito, {"C1","C2","C3","C4","C5","C6","C7","C8"})
in
Risultato
Vantaggi: flusso ripetibile con un clic su Aggiorna, zero macro, tracciabilità delle trasformazioni.
Diagnosi e controllo qualità
Prima di incollare (o quando dubiti del risultato), usa questa mini‑checklist:
- Vuoto reale?
=LUNGHEZZA(A1)=0
è vero sia per celle vuote sia per""
. Usa=VAL.VUOTO(A1)
per solo celle senza contenuto. - Formula o valore?
=E.FORMULA(A1)
ti dice se la cella contiene una formula. - Conta dei buchi:
=CONTA.VUOTE(C3:J3)
aiuta a capire quanto “rumore” hai per riga. - Dupliche: se più colonne possono emettere lo stesso codice, usa
UNICI()
prima diTESTO.UNISCI()
:=LET(v; C3:J3; TESTO.UNISCI(""; VERO; UNICI(FILTRO(v; v<>""))))
Quando scegliere l’una o l’altra strada
- Una tantum su un file: converti a valori → “Trova tutto → Canc” → “Salta celle vuote”. È il più veloce.
- File ricorrenti ma senza IT: formula “tutto‑in‑uno” con
LET
/TESTO.UNISCI
. Niente macro, bassa manutenzione. - Processo periodico con più origini: Power Query. Porti a casa ripetibilità e log.
- Molti file, molte tabelle: macro VBA (anche in Personal.xlsb) per dare il “colpo di scopa” ai falsi vuoti.
Best practice per evitare di ricaderci
- Decidi l’output finale (un solo codice o più codici concatenati) prima di progettare le formule: cambierà drasticamente la tua strategia.
- Evita il pattern “se non trovato →
""
” nelle colonne intermedie quando sai che poi userai “Salta celle vuote”. Valuta direttamente il coalesce con formula finale. - Usa nomi definiti per formule ripetute (es.
CodiceHG(BL3)
conLAMBDA
) per semplificare il debug. - Documenta la mappa chiavi → codici in una tabella a due colonne. Puoi così spostarti da otto formule a una sola con
TESTO.UNISCI
+TROVA
. - Salva versioni: tieni un
.xlsx
pulito da consegnare e un.xlsm
di lavoro con macro e formule complete.
FAQ essenziali
“Salta celle vuote” non dovrebbe ignorare anche ""
?
No. Quell’opzione non incolla solo quando la cella sorgente è realmente vuota. Una formula che restituisce ""
produce un valore testuale (lunghezza zero) che viene incollato e può sovrascrivere il contenuto destinazione.
CONTA.VUOTE()
considera ""
come vuoto. Perché non funziona uguale?
Perché contare e incollare saltando sono processi diversi. CONTA.VUOTE
tratta i testi vuoti come vuoti per comodità analitica; l’incolla speciale richiede l’assenza totale di contenuto nella sorgente.
Esiste una funzione “NULL()” in Excel?
No. Le formule non possono eliminare il contenuto di una cella: possono solo scriverne uno. Per svuotare davvero una cella serve un’azione dell’utente (Canc), una macro (ClearContents
) o una trasformazione esterna (Power Query).
Uso Mac o Excel web: posso applicare le stesse tecniche?
Sì. I concetti sono identici. Le scorciatoie e i menu possono cambiare (es. su Mac Cmd al posto di Ctrl), ma “Valori”, “Trova tutto → Canc” e “Salta celle vuote” esistono anche lì. Power Query è disponibile su Excel 365 per Mac (anteprime mediante Get Data), con alcune differenze di connettori.
Esempi pronti da incollare
Otto formule “cerca e restituisci codice”
Schema generico per una colonna intermediaria:
=SE(VAL.NUMERO(TROVA("chiave"; [@Testo])); "CODICE"; "")
Una sola formula “unione codici” da colonne C:J
=TESTO.UNISCI(""; VERO; C3:J3)
Una sola formula “primo codice da sinistra”
=LET(v; C3:J3; SE.ERRORE(INDICE(FILTRO(v; v<>""); 1); ""))
Mappa chiavi‑codici (senza colonne intermedie)
=TESTO.UNISCI(""; VERO; SE(VAL.NUMERO(TROVA(Mappa[Chiave]; BL3)); Mappa[Codice]; ""))
Controlli finali prima di consegnare
- Convalida: aggiungi un conteggio dei codici per riga
=LUNGHEZZA(CodiceFinale)
. Valori anomali (0 o molto alti) puntano subito eventuali problemi. - Spazi fantasma: se alcuni codici provengono da testi rumorosi, applica
ANNULLA.SPAZI()
nella catena di calcolo. - Ordine dei codici: se serve un ordine specifico (es. HG prima di BM), imposta l’ordine nella mappa o nell’ordine delle colonne usate da
TESTO.UNISCI
. - Univocità: se lo stesso codice può comparire più volte, passa per
UNICI()
come mostrato sopra.
Riepilogo tecnico (per chi deve motivare la scelta)
- Una cella con formula che restituisce
""
non è vuota: contiene testo a lunghezza zero. - Trova tutto → Canc o una macro
.ClearContents
trasformano quei “finti vuoti” in vuoti reali. - “Salta celle vuote” si basa sull’assenza completa di contenuto nella sorgente.
- Se puoi, elimina il problema alla radice: crea direttamente la colonna finale con
TESTO.UNISCI
/FILTRO
o con Power Query.
Checklist operativa in 2 minuti
- Blocca i risultati: Incolla speciale → Valori su ogni colonna codice.
- Pulisci: Trova tutto → Canc (o macro) per ottenere veri vuoti.
- Unisci: incolla le colonne nella colonna finale con Salta celle vuote.
- Verifica: lunghezza > 0 dove ti aspetti un codice; 0 dove non deve esserci nulla.
- Salva la versione “pulita”
.xlsx
da consegnare.
Appendice: macro bonus per sostituire le stringhe vuote su aree enormi
Se l’area è molto grande, puoi filtrare rapidamente solo le celle formula e ridurre le iterazioni:
Sub ClearPseudoBlanks_Fast()
Dim rng As Range, area As Range, f As Range
On Error Resume Next
Set rng = Application.InputBox("Seleziona l'intervallo", Type:=8)
On Error GoTo 0
If rng Is Nothing Then Exit Sub
```
Application.ScreenUpdating = False
Application.Calculation = xlCalculationManual
Application.EnableEvents = False
'Considera solo le celle con formula
On Error Resume Next
Set area = rng.SpecialCells(xlCellTypeFormulas)
On Error GoTo 0
If Not area Is Nothing Then
For Each f In area
If f.Value = "" Then f.ClearContents
Next f
End If
Application.EnableEvents = True
Application.Calculation = xlCalculationAutomatic
Application.ScreenUpdating = True
```
End Sub
Conclusione
Il comportamento di Excel è coerente: “Salta celle vuote” richiede vuoti veri, non stringhe vuote. Sapendo questo, puoi scegliere l’approccio migliore per la tua situazione: pulizia manuale o macro se vuoi mantenere il flusso attuale, oppure un design di formula/Power Query che elimina del tutto la necessità di incollare. In tutti i casi, con i passaggi e gli esempi qui sopra ottieni una colonna finale corretta e stabile, senza sovrascritture né sorprese.