Hai filtrato un elenco in Excel e vuoi copiare i valori visibili di una colonna (per es. “Stato”) e incollarli nella colonna accanto rispettando le stesse righe? Qui trovi cosa funziona nativamente, cosa no, perché e come risolvere con scorciatoie, macro VBA, formule e Power Query.
Perché “copia‑incolla sulle sole righe visibili” crea problemi
Quando applichi un filtro, Excel mostra solo alcuni record ma l’intervallo di celle rimane intatto. Se selezioni una colonna filtrata e premi Ctrl+C, Excel copia soltanto le celle visibili del sorgente. Il problema nasce alla destinazione: quando incolli su un altro intervallo filtrato, Excel ignora il filtro e avanza riga per riga fisicamente (1, 2, 3, …), includendo anche le righe nascoste. Il risultato è un disallineamento: i valori finiscono su righe sbagliate.
Per questo motivo molti utenti ricordano “un tempo funzionava”, ma i professionisti e i MVP di Excel sono concordi: Excel non ha mai gestito nativamente un copia‑incolla “uno‑a‑uno” tra colonne filtrate quando si incollano più valori. È invece supportata un’operazione diversa: incollare o riempire un solo valore nelle sole celle visibili.
Come ragiona Excel dietro le quinte
- Selezione delle celle visibili: il comando Seleziona celle visibili (scorciatoia Alt+;) crea una selezione a più aree delle sole celle mostrate. Copiare (Ctrl+C) prende solo quelle.
- Incolla su intervalli filtrati: quando incolli una matrice di valori, Excel distribuisce i dati nella destinazione senza considerare il filtro: scorre le righe reali, non quelle visibili. È per questo che si “riempiono” anche le righe nascoste.
- Eccezione: singolo valore: digitare un valore, fare Riempimento (Ctrl+R a destra, Ctrl+D in basso) o incollare un solo valore su una selezione di celle visibili funziona come atteso: solo le righe visibili vengono modificate.
Che cosa funziona nativamente e che cosa no
- Funziona: incollare o riempire un unico valore su celle visibili (ad esempio impostare “Confermato” su tutti i record filtrati).
- Non funziona: copiare più valori da una colonna filtrata e incollarli “uno‑a‑uno” su un’altra colonna filtrata mantenendo gli stessi numeri di riga. Excel non lo fa senza codice o trasformazioni.
Soluzioni e workaround (panoramica)
Scopo | Procedura | Punti chiave |
---|---|---|
Incollare un singolo valore nelle sole righe visibili | 1) Seleziona l’intervallo di destinazione. 2) Premi Alt+; (Seleziona celle visibili). 3) Incolla (Ctrl+V) oppure usa Ctrl+R/Ctrl+D per riempire. | Su Mac il tasto Alt corrisponde a Option . In alternativa: Home ▸ Trova e seleziona ▸ Vai a speciale ▸ Celle visibili. |
Duplicare l’intervallo visibile in un’altra colonna rispettando le righe | Usa una macro dedicata (vedi CopyVisibleRanges sotto). Chiede il range da copiare e la prima cella di incolla, poi trasferisce solo le aree visibili mantenendo allineamento riga‑per‑riga. | Crea un modulo VBA (Alt+F11 ▸ Insert ▸ Module), incolla il codice, salva come .xlsm . |
Evitare il disallineamento in modo manuale | Copia le celle visibili (Ctrl+C), incolla su un altro foglio o in un’area senza righe nascoste; poi usa formule/ricerche per riallineare se serve. | Valido se non devi mantenere la stessa riga della lista originale. |
Alternative senza macro | Usa FILTRO per estrarre i record visibili in un’area di lavoro, oppure Power Query per trasformare i dati e scrivere il risultato finito. | Utile per processi ripetitivi o dataset grandi; preferibile se non vuoi sbloccare macro. |
Procedura rapida: un solo valore sulle celle visibili (senza macro)
- Applica il filtro alla tabella o all’elenco.
- Seleziona l’intervallo di destinazione (ad esempio, la colonna “Stato”).
- Premi Alt+; per selezionare solo le celle visibili dell’intervallo.
- Digita il valore da impostare (per es. “OK”) e premi Ctrl+Invio per scriverlo su tutta la selezione oppure incolla un singolo valore (Ctrl+V) oppure usa Ctrl+D/Ctrl+R per riempire.
Note: se hai celle unite, Excel può impedire l’operazione. Evita le unioni quando lavori con filtri. Se l’intervallo è una Tabella (ListObject), le scorciatoie funzionano allo stesso modo.
Macro VBA per copiare “uno‑a‑uno” tra colonne filtrate
La macro seguente, ispirata alla soluzione di Rory Archibald, copia soltanto le parti visibili del range selezionato e le incolla nella posizione di destinazione rispettando l’allineamento riga per riga (anche su fogli diversi). Per impostazione predefinita incolla solo valori; puoi abilitare il copia-incolla completo (formule e formattazioni) impostando il parametro a False
.
Option Explicit
' Copia le aree visibili di un intervallo filtrato e le incolla
' allineando le stesse righe in un'altra colonna (o su un altro foglio).
' Uso:
' 1) Esegui la macro
' 2) Seleziona il range SORGENTE (già filtrato)
' 3) Seleziona la PRIMA cella DESTINAZIONE (stessa riga del primo record visibile)
' Parametro opzionale: PasteValuesOnly = True (solo valori) / False (tutto)
Public Sub CopyVisibleRanges(Optional ByVal PasteValuesOnly As Boolean = True)
Dim rngCopy As Range, firstDest As Range
Dim area As Range, destArea As Range
Dim r0 As Long, c0 As Long
Dim appCalc As XlCalculation
On Error GoTo Fail
' Selezione sorgente e destinazione
Set rngCopy = Application.InputBox( _
Prompt:="Seleziona il RANGE da COPIARE (già filtrato).", _
Title:="CopyVisibleRanges", Type:=8)
If rngCopy Is Nothing Then Exit Sub
Set firstDest = Application.InputBox( _
Prompt:="Seleziona la PRIMA cella di DESTINAZIONE (stessa riga del primo record visibile).", _
Title:="CopyVisibleRanges", Type:=8)
If firstDest Is Nothing Then Exit Sub
Set firstDest = firstDest.Cells(1, 1) ' assicura una sola cella
' Coordinate di riferimento (in alto a sinistra della selezione sorgente)
r0 = rngCopy.Cells(1, 1).Row
c0 = rngCopy.Cells(1, 1).Column
' Ottimizzazioni
appCalc = Application.Calculation
Application.ScreenUpdating = False
Application.EnableEvents = False
Application.Calculation = xlCalculationManual
' Per ciascuna "area" visibile (blocchi contigui di celle mostrate)
For Each area In rngCopy.SpecialCells(xlCellTypeVisible).Areas
' Calcola la destinazione rispettando l'offset di riga e colonna
Set destArea = firstDest.Offset(area.Row - r0, area.Column - c0) _
.Resize(area.Rows.Count, area.Columns.Count)
If PasteValuesOnly Then
' Incolla valori (niente formule/formati)
destArea.Value = area.Value
Else
' Copia completo (formule, formati, ecc.)
area.Copy destArea
End If
Next area
CleanExit:
' Ripristina impostazioni
Application.Calculation = appCalc
Application.EnableEvents = True
Application.ScreenUpdating = True
Exit Sub
Fail:
MsgBox "Operazione annullata o intervallo non valido.", vbExclamation
Resume CleanExit
End Sub
Come inserirla e usarla
- Premi Alt+F11 per aprire l’editor VBA.
- Dal menu Insert ▸ Module crea un nuovo modulo.
- Incolla il codice e salva il file come .xlsm (Abilitato alle macro).
- Torna al foglio, applica i filtri e seleziona l’intervallo sorgente (una o più colonne).
- Esegui CopyVisibleRanges (ad es. Alt+F8 ▸ seleziona macro ▸ Esegui).
- Quando richiesto, clicca la prima cella di destinazione (la riga deve corrispondere al primo record visibile del sorgente).
Consigli:
- Se vuoi incollare anche formati e formule, lancia la macro con
CopyVisibleRanges False
(da una macro wrapper o modificando temporaneamente la prima riga della Sub). - Se lavori spesso con questo comando, aggiungilo alla Barra di accesso rapido o associa una scorciatoia tramite una macro aggiuntiva.
- La macro funziona sia con normali intervalli sia con Tabelle (ListObject) filtrate.
Alternative senza macro
Estrarre i soli record visibili con formule dinamiche
Se ti basta vedere o lavorare con un elenco compatto dei record visibili (senza mantenerli sulle stesse righe originali), puoi usare FILTRO così:
=FILTRO(B2:B100; SUBTOTALE(103; SCARTO(B2; RIF.RIGA(B2:B100)-RIF.RIGA(B2); 0))=1)
SUBTOTALE(103; …)
valuta se la riga è visibile (103 = CONTA.VALORI che ignora righe nascoste).SCARTO
crea un riferimento “per riga”.- La formula restituisce un array compatto con solo le celle visibili della colonna B (ad esempio da incollare in una nuova area pulita).
Limite: l’array risultato non mantiene i dati sulle stesse righe originali. Per incollarli “uno‑a‑uno” al posto giusto serve la macro.
Power Query per trasformazioni ripetibili
Quando questa operazione rientra in un processo ricorrente (ES: report mensili), conviene spostare la logica in Power Query, così:
- Trasforma l’elenco in Tabella (Ctrl+T).
- Dati ▸ Da tabella/intervallo per aprire la query.
- Applica in Power Query gli stessi filtri (non quelli della griglia Excel) e Aggiungi colonna/Trasforma secondo necessità.
- Chiudi & Carica su un nuovo foglio e, se necessario, unisci con la tabella originale tramite una chiave (ID) per riportare i valori “uno‑a‑uno”.
Pro: processo documentato e ripetibile, senza macro. Contro: richiede una chiave di join e scrive in un’area separata; non modifica direttamente le celle filtrate in posizione.
Zero che scompare: come risolvere
Alcuni utenti notano che, dopo incolla o riempimento, il valore 0 sembra “sparire”. In realtà è un’impostazione di visualizzazione. Per ripristinare lo zero:
- Windows: File ▸ Opzioni ▸ Avanzate ▸ Mostra uno zero nelle celle che hanno valore zero.
- Mac: Excel ▸ Preferenze ▸ Visualizzazione ▸ Mostra zero nelle celle con valore zero.
Errori tipici e come evitarli
- “Per l’operazione non è possibile usare una selezione multipla”: succede se provi a incollare una matrice su una selezione a più aree. Usa la macro o incolla un solo valore dopo Alt+;.
- Celle unite: rompono il flusso di copia/riempimento. Prima annulla unione.
- Filtro attivo anche nella destinazione: Excel continuerà a ignorare le righe nascoste alla destinazione solo se incolli un singolo valore. Per più valori, usa la macro.
- Formato vs valore: se noti discrepanze, prova la macro in modalità solo valori (impostazione predefinita). In caso contrario, abilita il copia completo.
Domande frequenti
Posso farlo senza macro mantenendo le stesse righe?
Non in modo nativo: Excel non esegue un incolla “uno‑a‑uno” su un intervallo filtrato quando si tratta di più valori. Le alternative sono macro, Office Scripts (Excel per il Web) o una pipeline Power Query con join su un ID.
Alt+; non funziona sulla mia tastiera
Verifica il layout tastiera (specialmente sui portatili) e prova la via grafica: Home ▸ Trova e seleziona ▸ Vai a speciale ▸ Celle visibili. Su Mac, Alt
=Option
.
Perché “Riempimento” rispetta le celle visibili ma “Incolla” no?
Riempimento e immissione singolo valore agiscono sulla selezione. “Incolla” distribuisce una matrice e scorre le celle fisiche ignorando il filtro.
Funziona anche con più colonne?
Sì. Se selezioni un blocco di più colonne filtrate, la macro mantiene l’offset di colonna relativo quando incolla.
È sicuro in un file condiviso?
Sì, ma documenta la macro e testala in una copia. In ambienti con macro disabilitate, preferisci Power Query o procedure manuali.
Procedura dettagliata consigliata (scenario completo)
- Prepara i dati: se possibile, trasforma l’elenco in Tabella (ti semplifica filtri e riferimenti).
- Applica i filtri sulla colonna “Sorgente”.
- Seleziona la colonna sorgente filtrata (le celle visibili che vuoi trasferire).
- Avvia la macro CopyVisibleRanges e indica la prima cella di destinazione (stessa riga del primo record visibile).
- Verifica a campione alcune righe: i valori devono comparire solo dove il record sorgente era visibile.
- Blocca la procedura aggiungendo la macro alla Barra di accesso rapido (File ▸ Opzioni ▸ Barra di accesso rapido ▸ Macro).
Raccomandazioni pratiche
- Usa Alt+; come soluzione rapida quando devi impostare o incollare un solo valore sulle righe visibili.
- Automatizza con VBA se ti serve spesso la copia “uno‑a‑uno” di intervalli filtrati: la macro CopyVisibleRanges è la via più affidabile.
- Testa in una copia del file prima della produzione, specie in documenti condivisi o con protezioni attive.
- Aggiungi “Seleziona celle visibili” alla Barra di accesso rapido per richiamarlo senza ricordare la scorciatoia.
Approfondimento tecnico: perché non è (ancora) una funzione di Excel
Il filtro agisce a livello di visualizzazione, non cambia l’indirizzamento delle celle. Quando incolli una matrice, Excel deve decidere dove posizionare il primo, il secondo, il terzo valore… La scelta implementata storicamente è di scorrere tutte le righe fisiche della destinazione. Inserire un meccanismo che “salti” automaticamente le righe nascoste alla destinazione renderebbe ambigua l’operazione (e retro‑incompatibile). Per questo motivo, salvo codice personalizzato, Excel non ha mai offerto un incolla “consapevole del filtro” tra colonne diverse per più valori.
Checklist veloce
- Devi riempire lo stesso valore su righe visibili? Alt+; → Ctrl+Invio/Ctrl+D/Ctrl+R.
- Devi trasferire più valori allineati riga‑per‑riga? Usa la macro CopyVisibleRanges.
- Processo ricorrente e tracciabile? Power Query con filtri e join su ID.
- Zero che non si vede? File ▸ Opzioni ▸ Avanzate → abilita l’opzione sugli zero.
Esempio pratico sintetico
Scenario: hai una lista ordini (righe 2:1000). Filtri la colonna Fase = “Da contattare”. Vuoi copiare la colonna Telefono su Telefono 2 soltanto per quei clienti.
- Applica il filtro su Fase = “Da contattare”.
- Seleziona la colonna Telefono delle righe visibili.
- Esegui CopyVisibleRanges, indica come destinazione la prima cella di Telefono 2 alla riga del primo record visibile.
- Controlla: Telefono 2 è valorizzata solo per i clienti “Da contattare”; le altre righe restano intatte.
Quando scegliere cosa
Metodo | Quando usarlo | Pro | Contro |
---|---|---|---|
Alt+; + singolo valore | Impostare lo stesso contenuto su molti record visibili | Immediato; zero codice | Non trasferisce matrici di valori |
Macro CopyVisibleRanges | Copia “uno‑a‑uno” tra colonne filtrate | Allineamento perfetto; veloce anche su migliaia di righe | Richiede abilitazione macro |
Power Query | Pipeline ripetitive e tracciabili | Documentato; rinfrescabile; niente macro | Scrive in aree dedicate; serve un ID per i join |
Formule dinamiche | Estrarre rapidamente i visibili in un’area pulita | Senza macro; interattivo | Non mantiene le righe originali |
Conclusione
Excel non incolla nativamente “uno‑a‑uno” tra colonne filtrate quando si tratta di più valori: è una limitazione storica del motore di incolla. Per operazioni semplici su un singolo valore, Alt+; risolve in un attimo. Per trasferimenti allineati riga‑per‑riga, la macro CopyVisibleRanges è la soluzione più efficace, mentre Power Query e le formule offrono alternative robuste in contesti ripetitivi o di trasformazione dati. Con le pratiche e gli strumenti giusti, il copia‑incolla sulle sole celle visibili smette di essere un problema.