Sfruttando il codice VBA, vedremo quali istruzioni possiamo usare per fare una di quelle operazioni che forse eseguiamo piu spesso: il copia e incolla.
Ma partiamo subito, portiamoci in Sviluppo, scegliamo Macro e diamo il nome alla nostra nuova macro che chiameremo “copia_incolla” e quindi premiamo su Crea.
Per visualizzare meglio ciò che stiamo facendo posizioniamo sulla parte destra dello schermo la cartella di lavoro e sulla parte sinistra la finestra dedicata al progetto VBA.
Partiamo dall’operazione più semplice possibile che si possa fare, copiare il contenuto di una singola cella in un’altra destinazione, quindi se volessimo copiare il contenuto cella cella A1 in H1 scriveremo:
Range(“A1”).Copy Range(“H1”)
Facciamo partire la macro premendo F8
Come potete vedere Excel con solo copierà il contenuto ma anche la formattazione, proprio lo stesso risultato che otterremo facenco il classico CTRL+C e CTRL+V
Siamo partiti copiando una singola cella, ma tramite l’oggetto range, possiamo indicare un gruppo di celle, la sintassi rimane la medesima, volendo copiare l’intervallo A1:C10 potremo modificare la riga precedente nel seguente modo:
Range(“A1:C10”).Copy Range(“H1”)
Diamo OK ed in questo modo abbiamo creato l’elenco che ci permetterà di scegliere il mese desiderato.
Se volessimo incollare il contenuto in un altro foglio, ci basterà indicare il percorso di destinazione, quindi se volessimo copiare il contenuto precedente, ma come destinazione scegliessimo il “Foglio2” dovremo scrivere:
Range(“A1:C10”).Copy Worksheets(“FOGLIO2”).Range(“A1”)
Per copiare il contenuto di un’intera riga o di un’intera colonna, scriveremo le seguenti righe di codice:
Rows(26).Copy Rows(27)
Columns(“A”).Copy Columns(“H”)
Come per le operazioni di copia e incolla fatte dal foglio di lavoro, possiamo specificare quali opzioni vogliamo, per esempio se copiare solo le formule, solo i valori, la formattazione e via così dicendo
Per queste operazioni useremo il comando PasteSpecial.
Poiché le possibili opzioni sono numerose, tratteremo solo quelle di uso più comune, ad ogni modo una volta che si è compreso come indicare i vari argomenti potrete proseguire in piena autonomia in base alle varie esigenze.
Prima di tutto diamo uno sguardo alla sintassi per capire come gestire i vari parametri
In expression dovremo inserire la cella di destinazione tramite l’istruzione Range
Subito dopo seguirà il comando .PasteSpecial
Tramite Paste scriveremo il codice che indicherà in che modo incollare i dati, cioè se vogliamo incollare tutto, solo le formule, solo i valori e tante altre opzioni
Tramite Operation, potremo indicare se vogliamo aggiungere, dividere, sommare oppure sottrarre un determinato valore alla cella di partenza
SkipBlanks, che potrà assumere solo i valori di True o False per tenere o meno le celle vuote in fase di copia e incolla
Infine Transpose che anche in questo caso potrà assumere solo i valori di True o False per effettuare la trasposizione dei dati da riga a colonna e/o viceversa.
Ma passiamo alla pratica, partendo da una cella contenente una formula, per esempio la cella B24 il nostro intento sarà quello di incollare solo il valore.
Iniziamo a scrivere:
Range(“B24”).Copy
Proseguiamo nella riga successiva con la cella di destinazione:
Range(“I24”).PasteSpecial xlPasteValues
Come potete vedere nella barra delle formule la cella I24 riporta solo un valore numerico anziché la formula SOMMA contenuta nella cella B24
Per copiare il formato della tabella ci basterà indicare dopo il comando PasteSpecial l’istruzione xlPasteFormats, il codice sarà il seguente:
Range(“A1:F24”).Copy
Range(“H1”).PasteSpecial xlPasteFormats
Sempre con il comando PasteSpecial saremo in grado di aggiungere, dividere, moltiplicare o sottrarre un numero per un valore contenuto in un’altra cella, per esempio se scrivessimo il numero 10 nella cella J24 e volessimo moltiplicarlo per il dato presente nella cella I24, il codice sarà il seguente:
Range(“I24”).Copy
Range(“J24”).PasteSpecial , xlPasteSpecialOperationMultiply
Il risultato nella cella J24 sarà il contenuto della cella I24 moltiplicato per 10.
Infine se avessimo la necessità di fare la trasposizione dei dati da riga in colonna o viceversa, vediamo insieme come scrivere il codice.
Supponiamo di voler copiare i nomi delle regioni presenti nella colonna A e di volerli incollare nella riga 29, il codice sarà il seguente:
con il comando Copy definiamo le celle di origine:
Range(“A3:A22”).Copy
Ed in seguito per l’istruzione PasteSpecial scriviamo:
Range(“A29”).PasteSpecial , , , True
Di seguito il codice utilizzato:
Con oggi abbiamo solo una parte delle operazioni che possiamo fare tramite il linguaggio VBA, per copiare ed incollare il contenuto di una o più celle, poiché le opzioni sono molteplici il consiglio che posso dare è quello di provare facendovi aiutare dai vari screen tip che Excel propone durante la scrittura del codice.
Nel video qui sotto trovate tutti i passaggi appena illustrati, buona visione.
5 commenti su “15 – Le MACRO con Excel – Copia e incolla”
eccellente spiegazione, penso, di più non si può.
Grazie
Grazie 1000
salve non ho idea a combinare con vba cinque numeri nel seguente modo in modo verticale e da un altro foglio conoscendo le celle .
foglio1 in l1-m1-n1-o1-p1
———–1–2–3–4–5
foglio2 > l3=1, m3=2
——–> l4=1, m2=3
——–> l5=1, m5=4
——–> l6=1, m6=5
Grazie
Ciao Giorgio,
nella macro devi indicare la cella di partenza (copia) e la cella di destinazione (incolla) mettendo anche il nome del foglio.
Sarà qualcosa di simile a questo:
Worksheets(“FOGLIO1”).Range(“L1”).Copy Worksheets(“FOGLIO2”).Range(“L3”)
Worksheets(“FOGLIO1”).Range(“M1”).Copy Worksheets(“FOGLIO2”).Range(“M3”)
…
e proseguire per tutte le altre celle.
Buona giornata da Excel Espresso
salve,
avrei necessità di copiare, di una stessa riga una serie di celle non contigue, p.e. A1, C1,D1,F1.
come si può riscrivere l’istruzione in questo caso?.
grazie