Excel: copiare e incollare solo le celle visibili dopo un filtro (colonna a colonna)

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.

Indice

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)

ScopoProceduraPunti chiave
Incollare un singolo valore nelle sole righe visibili1) 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 righeUsa 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 manualeCopia 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 macroUsa 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)

  1. Applica il filtro alla tabella o all’elenco.
  2. Seleziona l’intervallo di destinazione (ad esempio, la colonna “Stato”).
  3. Premi Alt+; per selezionare solo le celle visibili dell’intervallo.
  4. 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

  1. Premi Alt+F11 per aprire l’editor VBA.
  2. Dal menu Insert ▸ Module crea un nuovo modulo.
  3. Incolla il codice e salva il file come .xlsm (Abilitato alle macro).
  4. Torna al foglio, applica i filtri e seleziona l’intervallo sorgente (una o più colonne).
  5. Esegui CopyVisibleRanges (ad es. Alt+F8 ▸ seleziona macro ▸ Esegui).
  6. 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ì:

  1. Trasforma l’elenco in Tabella (Ctrl+T).
  2. Dati ▸ Da tabella/intervallo per aprire la query.
  3. Applica in Power Query gli stessi filtri (non quelli della griglia Excel) e Aggiungi colonna/Trasforma secondo necessità.
  4. 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)

  1. Prepara i dati: se possibile, trasforma l’elenco in Tabella (ti semplifica filtri e riferimenti).
  2. Applica i filtri sulla colonna “Sorgente”.
  3. Seleziona la colonna sorgente filtrata (le celle visibili che vuoi trasferire).
  4. Avvia la macro CopyVisibleRanges e indica la prima cella di destinazione (stessa riga del primo record visibile).
  5. Verifica a campione alcune righe: i valori devono comparire solo dove il record sorgente era visibile.
  6. Blocca la procedura aggiungendo la macro alla Barra di accesso rapido (File ▸ Opzioni ▸ Barra di accesso rapido ▸ Macro).

Raccomandazioni pratiche

  1. Usa Alt+; come soluzione rapida quando devi impostare o incollare un solo valore sulle righe visibili.
  2. Automatizza con VBA se ti serve spesso la copia “uno‑a‑uno” di intervalli filtrati: la macro CopyVisibleRanges è la via più affidabile.
  3. Testa in una copia del file prima della produzione, specie in documenti condivisi o con protezioni attive.
  4. 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.

  1. Applica il filtro su Fase = “Da contattare”.
  2. Seleziona la colonna Telefono delle righe visibili.
  3. Esegui CopyVisibleRanges, indica come destinazione la prima cella di Telefono 2 alla riga del primo record visibile.
  4. Controlla: Telefono 2 è valorizzata solo per i clienti “Da contattare”; le altre righe restano intatte.

Quando scegliere cosa

MetodoQuando usarloProContro
Alt+; + singolo valoreImpostare lo stesso contenuto su molti record visibiliImmediato; zero codiceNon trasferisce matrici di valori
Macro CopyVisibleRangesCopia “uno‑a‑uno” tra colonne filtrateAllineamento perfetto; veloce anche su migliaia di righeRichiede abilitazione macro
Power QueryPipeline ripetitive e tracciabiliDocumentato; rinfrescabile; niente macroScrive in aree dedicate; serve un ID per i join
Formule dinamicheEstrarre rapidamente i visibili in un’area pulitaSenza macro; interattivoNon 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.


Indice