Righe: tagliare righe e (incollarle) inserirle in un altro foglio. - dal 04/09/04 pagina vista: volte Modifica: copiare righe ed incollare a distanza su altro foglio ed eliminare riga di origine rimasta vuota 17/12/2010 Nel presentare queste note, mi sono venuti in mente i corsi di "Taglio & Cucito" che seguono i sarti o le sartine: non avevo mai considerato che potremmo considerarci degli "stilisti", visto che anche noi compiamo operazioni di "Cut & Paste" sui fogli di Excel. Amenità a parte, ci occuperemo di una semplice operazione:
Esitono molti modi diversi nel presentare questo esercizio, per ciò che riguarda il criterio di selezione delle righe che vogliamo tagliare, dipende dalle necessità di ognuno, e sono veramente tante, quindi esaminiamone alcune tanto per capire i concetti :
E' evidente che muteranno le condizioni di identificazione delle righe, ma la procedura di "Taglio & Cucito" resterà sempre la solita. Vediamo un paio di esempi: il primo cercherà tutte le righe in un determinato range, dove le celle della colonna A (la colonna n. 1) contengono un valore. Precisiamo inoltre che NON useremo il Paste (incolla) in questi due esempi, ma Insert (inserisci) : infatti una riga si può incollare o inserire, e l'inserimento avviene sempre nella riga superiore alla riga che verrà selezionata come destinazione. Giova ripetere che Excel provvederà in automatico a rinumerare progressivamente le righe sul foglio destinazione. Non scordiamoci inoltre che un foglio può contenere al massimo 65536 righe, e se fossero già tutte occupate e si volesse inserirne un'altra, cosa pensate che succederà? Provate e lo vedrete. Ultima cosa: nel foglio di origine, con Cut vengono tagliate le righe e quelle tagliate resteranno vuote, excel non effettua il riordino delle righe tagliate. Questo provocherà dei vuoti che limiteranno l'azione dell'uso di End inserito nel secondo esempio sotto. Scegliere quindi il metodo Cut senza il Paste quando si voglia intenzionalmente lasciare righe vuote, altrimenti converrà usare il terzo esempio che trovate alla fine di questa pagina, in cui si usa i metodi Cut + Paste + Delete, che elimineranno fisicamente la riga copiata permettendo il riordino righe da parte di excel.
Il nocciolo delle istruzioni responsabili del taglio e dell'inserimento sono due sole righe: (a parte il ciclo While necessario per trovare la prima riga libera dove incerire la riga tagliata)
Vediamo un'altro esempio dove cercheremo tutte le celle in cui il testo inizi per la lettera "c", ed useremo in questo caso la Funzione End per reperire l'ultima cella occupata in una determinata colonna. Ricordo che per usare End dovremo avere tutte le righe dell'area dati, nella colonna su cui eseguiamo la ricerca, occupate da valori: se una cella sarà vuota End si interromperà a questa cella anche se sotto continuano celle con valori. Cercheremo quindi nella colonna B tutti i nomi che comincino con la "c", e trovata la cella, taglieremo l'intera riga inserendola in un altro foglio.
Come vedete le istruzioni per taglia e inserisci sono le stesse, cambiano solo gli altri parametri. Precisazione: non cadiamo in equivoci : stiamo cercando nella colonna B i nomi che niziano per "c" per identificare una riga e tagliarla, e sappiamo che le celle, visto che abbiamo usato End, portano valori in celle successive; questo non vuol dire nella colonna A, per ogni riga in cui la cella B è occupata, sia occupata anche lei. Si potrebbe verificare una situazione come la seguente:
Solo la riga 3 porta un valore anche nella colonna A, ma tutte e tre le righe della B il cui nome inizia con la "c" verranno tagliate. Nelle istruzioni viste sopra, con il ciclo While, stiamo cercando, sul foglio destinazione, la prima cella vuota nella Colonna A (infatti While Cells(iRow, 1) <> "" dove 1 indica il numero di colonna), ma questo provocherebbe la sovrascrittura delle righe in cui la colonna A è vuota. Dovremo solo modificare l'istruzione in modo che il ciclo While cerchi nella colonna B, dove saremo sicuri che se non ci sarà un valore è perchè siamo alla fine dell'elenco presente. Chiaro ? speriamo. Quindi l'istruzione diventerà : While Cells(iRow, 2) <> "" dove 2 rappresenta la colonna B. L'istruzione Rows(iRow).Insert non va modficata perchè restituisce il numero di riga indipendentemente dalla colonna in cui si cerca la cella libera. E vediamo infine il terzo esempio, dove useremo il Cut & Paste & Delete. Non verrà usata l'istruzione Insert. Vediamo le istruzioni. Commenterò in verde solo le istruzioni che cambiano rispetto ai due esempi precedenti, evidenziando col grassetto:
Copiare righe ed incollare a distanza su altro foglio ed eliminare (Delete) la riga di origine rimasta vuota A volte non è necessario usare il Taglia (Cut) per copiare i dati di un'intera riga, a distanza, ma si può usare il metodo Copy per la copia di una intera riga , e si può poi cancellare (Delete) la riga di origine che è stata copiata. Come abbiamo detto nelle note sopra, il Cut provoca il taglio dei dati (che finiscono nelle clipboard (in memoria) in attesa di una destinazione) ma lascia la riga appena tagliata al suo posto, con tutte le celle bianche, vuote. Se la visione di una riga bianca in una tabella disturba o comunque non la si desidera, possiamo scegliere due strade per non vederla più:
Vediamo un esempio di quanto consigliato sopra: (la riga 3 e la colonna C della Sub sotto sono solo di esempio, (ognuno userà gli indici di riga e la colonna che vorrà))
Nota: il comando Copy copia non solo il contenuto di una cella o di una riga, ma anche la formattazione, quindi bordi cella se ce ne sono, colore cella, ecc. Se non si desiderano questi "accessori" si può usare il metodo Copia/Incolla (Copy/Paste) (vedi 6 articoli sul sito).
Buon lavoro. prelevato sul sito www.ennius.altervista.org |