Copiare colonne



  • Copiare colonne
    di verbo data: 11/07/2013 18:25:55

    Ciao a tutti qualcuno sa dirmi se esiste la possibilità di creare una macro che ad ogni nuova attivazione, mi copia celle diverse.
    Cerco di spiegarmi:
    Ho un foglio dove ogni settimana vado ad incollare dei dati sulle colonne, quindi la prima settimana ho occupato le colonne A, B e C, la settimana successiva nel foglio oltre ad aver occupato le colonne precedenti ho occupato anche le colonne D, E e F, terza settimana avrò occupato anche le colonne G, H e I.
    Quello che ho bisogno è che la seconda settimana devo copiare il contenuto delle celle D e F e copiarle in altro foglio, e fino a questo punto ci riesco, ma il problema nasce la terza settimana in cui ho la necessità che mi deve copiare i contenuto delle colonne G e I e copiarle nell’altro foglio nelle colonne attigue alle precedenti
    Spero qualcuno possa darmi dei suggerimenti
    Grazie
    Luigi



  • di paolomath (utente non iscritto) data: 12/07/2013 08:35:48

    Ciao,

    ho ipotizzato che nella prima cella delle colonne A, B, C, D ecc. ci sia un valore.

    Il codice allegato copia l'ultima colonna e la terzultima del foglio Foglio1 nell'ultima e penultima del Foglio2.

    Un po' spartana ma dovrebbe andare.

    Bye bye.
     
    Sub Copia_Col()
    
        Dim Massimo As Integer
        Massimo = 0
        
        While Sheets("Foglio1").Cells(1, Massimo + 1).Value <> ""
            Massimo = Massimo + 1
        Wend
    
        Sheets("Foglio1").Select
        Range("C1").Activate
        Columns(Massimo).Select
        Selection.Copy
        Sheets("Foglio2").Select
        Columns(2 * Massimo / 3).Select
        ActiveSheet.Paste
        Sheets("Foglio1").Select
        Columns(Massimo - 2).Select
        Selection.Copy
        Sheets("Foglio2").Select
        Columns(2 * Massimo / 3 - 1).Select
        ActiveSheet.Paste
        
    End Sub



  • di verbo data: 13/07/2013 13:57:10

    Paolo scusa, ma solo ora ho visto che mi avevi risposto.
    Quello che mi hai postato è un codice VBA funziona come se fosse una normale macro?
    Ora comunque provo e ti faccio sapere.
    ciao
    Luigi
     
     funziona come se fosse una normale macro?



  • di verbo data: 13/07/2013 14:07:11

    Ciao Paolo, ho inserito il tuo codice ovviamente ho sostituito la voce foglio 1 e foglio 2 con i rispettivi nomi dei mie due fogli.
    Quando faccio partire la macro mi compare la maschera errore di run-time1004 errore definito dall'APPLICAZIONE O DALL'OGGETTO e se clicco su debug compare evidenziata in giallo la seguente parte del codice
    Columns(Massimo).Select
    Forse che devo nominare le colonne?
    Aspetto tuoi consigli e grazie
    Luigi



  • di paolomath data: 14/07/2013 23:01:34

    "ho ipotizzato che nella prima cella delle colonne A, B, C, D ecc. ci sia un valore. "

    Quindi nella prima riga ci deve essere qualcosa (nome colonne, intestazione, ecc.)
    Altrimenti Massimo=0 e ti da l'errore che dici.

    Bye



  • di verbo (utente non iscritto) data: 15/07/2013 20:21:47

    Ho messo i titoli a ciascuna colonna adesso però l'errore me lo da in
    Columns(Massimo - 2).Select

    Ti allego il file cosi capisci cosa mi serve, nel file non trovi le colonne intestate perchè non funzionando ancora la macro non ho salvato le correzioni.
    ciao e grazie
    Luigi



  • di paolomath data: 16/07/2013 08:10:06

    Ciao, non c'è l'allegato...



  • di verbo (utente non iscritto) data: 16/07/2013 11:36:24

    Provo a rimetterlo
    Nel la macro dovrebbe funzionare nella pagina Riep incrementi sett.
    In pratica deve copiarmi nelle colonne "D" ed "E", il contenuto delle colonne "E" ed "G" del foglio "Incrementi settimanali", ( quelle he vedi ora nel folgio l'ho fatto manualmente copiando prima la colonna "E" e poi la colonna "G" del foglio incrementi settimanali) e cosi di seguito, ovvero quando avrò inserito i dati nelle colonne "i", "J" E "K" del foglio "Incrementi settimanali" deve copiare il contenuto delle colonne "I" e "K" di questo foglio nelle colonne "G" e "H" del foglio Riep incrementi settimanali.
    Pr quanto riguarda le intestazioni nella prima riga del foglio incrementi settimanali , come ti ho detto nel foglio non trovi ancora nietne tranne che le colonne "B e C, ma ieri mentre provavo la macro da te suggerito avevo messo iun ogni cella una lettera e lo stersso non funzionava.
    ciao e grazie dell'aiuto
    Luigi



  • di paolomath data: 16/07/2013 12:08:20

    Ciao, era diversa la struttura che avevo pensato...

    Prova se l'allegato va bene. Poi devi usare incolla speciale per incollare le colonne che contengono formule, altrimenti ottieni tutti 0.

    Bye



  • di verbo (utente non iscritto) data: 16/07/2013 15:28:16

    No Paolo non funziona
    Honotato che di fatto la macro va sempre a scrivere nelle colonne "G" del foglio Riep incrementi sett, mentre ho visto che nella colonna "H" ci sono le formule.
    In realtà quello che a me serve è che nella colonna "G" del foglio Riep incrementi sett vengano riportate le nazioni che sono riportate nella colonna "I" del foglio incrementi settimanali, mentre nella colonna "H" deve copiarmi non le formule della colonna "K" del foglio Incrementi settimanali, ma il valore.
    e Cosi via la settimana successiva quando andro a copiare i dati nella colonne "L", "M" ed "N" del foglio incrementi settimanali, la macro non deve copiarmi i dati riportati nella colonna "L" del foglio incrementi settimanali nella colonne "G" del foglio Riep incrementi sett,, ma deve copiarlo nelle "J", mentre i valori e non le formule delal colonna "K" del foglio incrementi patrimoniali devo essere riportati nella colonna "K" del foglio Riep incrementi sett



  • di paolomath data: 16/07/2013 15:45:07

    cit:"mentre ho visto che nella colonna "H" ci sono le formule."

    Infatti

    cit :"Poi devi usare incolla speciale per incollare le colonne che contengono formule, altrimenti ottieni tutti 0"

    Quindi, invece di
    ActiveSheet.Paste
    metti
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False

    cit:"quando andro a copiare i dati nella colonne "L", "M" ed "N""

    andari a copiare le colonne M,N & O, altrimenti non esiste nessuna struttura nel foglio

    In pratica copia l'ultima tripletta inserita di seguito all'ultima coppia presente sul secondo foglio (ho provato anche prima).

    L'importante è che si siano le intestazioni sulla prima riga nelle colonne E, I, M, ecc.
    Parte dalla colonna E perchè i primi valori sono su due colonne e non su tre.

    Riallego il file



  • di Verbo (utente non iscritto) data: 16/07/2013 16:03:53

    Ok, forse ora ho capito devo prima scrivere nelle celle della prima riga.

    Mentre per il discorso delle formule, mi dicevi di sostituire
    nella macro la voce ActiveSheet .....
    con selection.paste .....
    IO do per scontato che la sostituzione debba farla nella macro Copia_col
    Se è cosi non va rimanono sempre le formule e non i valori, infatti mi da valore 0



  • di paolomath data: 16/07/2013 16:16:23

    HAi scaricato il file Riepilogativi_02.xls?



  • di verbo (utente non iscritto) data: 16/07/2013 16:45:27

    Scusami Paolo è proprio vero che l'ignoranza è una brutta bestia, non avevo capito che tu avevi già fatto la modifica, ma pensavo di doverla fare io sul mio file.
    Quindi devo solo ricordarmi di fare in modo che nelle celle della prima riga ci sia scritto quyalcosa altrimenti la macro non va.

    A questo punto ne approfitto per chiederti ancora una cortesia.
    Premesso che io colleziono francobolli con la fissa delel statistiche, quindi il file riepilogativi deve avere lo scopo di riepilogare ogni settimana quanti francobolli ho catalogato in generale e poi dovrebbe fare la differenza tra quanti catalogati nella settimana rispetto alal settimana precedente.
    Ed è il valore che appare nelle colonne "G" "K" e successivi saltando 3 colonne.
    ora mentre cercavo di far funzionare la tua macro, mi sono accorto che nelle collonne "G", "K" etc ho inserito la differenza tra due somma se, solo che anche qui devo inserirli manualmente ogni volta, non si potrebbe automatizzare tale operazione in modo tale che io quando attivo la macro Incrementi_settimanli oltre a fare ciò mi fa la differenza tra i ttolai dei francobolli di ogni nazione della settimana - i totlai dei francobolli della settimana precedente.
    Se ritieni che ciò è chiederti troppo, nessun problema già quello che mi hai fatto è tanto.
    Grazie
    Luigi



  • di paolomath data: 17/07/2013 00:11:59

    Prova ad inserire, alla fine di incrementi settimanali il seguente codice.

    Bye
     
    Dim formula As String
    
    For i = 2 To 179
    formula = "=SUMIF(R2C" & Selection.Column & ":R179C" & Selection.Column & ",R[0]C[-2],R2C" & Selection.Column + 1 & ":R180C" & Selection.Column + 1 & ")"
    formula = formula & "-" & "SUMIF(R2C" & Selection.Column - 4 & ":R179C" & Selection.Column - 4 & ",R[0]C[-2],R2C" & Selection.Column - 3 & ":R180C" & Selection.Column - 3 & ")"
    Cells(i, Selection.Column + 2).FormulaR1C1 = formula
    Next



  • di verbo (utente non iscritto) data: 17/07/2013 22:46:05

    Grazie tante paolo funziona benissimo, se passi da Alessandria sono in debito di almeno un caffè.
    Adesso ti chiedo la ciliegina sulla torta.
    Nel foglio Riep incrementi sett mi scrive gli incrementi della settimana, se volessi metterli in ordine decrescente ovvero dalla nazione in cui nella settimana ho ricevuto più francobolli nella macro copia_col dove devo mettere le istruzioni alla fine od all'inizio?



  • di paolomath data: 17/07/2013 23:19:24

    Inserisci alla fine lil codice seguente.

    Caffè amaro con panna

    Bye, buona collezione.
     
    Range(Cells(2, 3 * Massimo + 1), Cells(179, 3 * Massimo + 2)).Select
    Selection.Sort Key1:=Cells(2, 3 * Massimo + 2), Order1:=xlDescending, Header:=xlGuess, OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, DataOption1:=xlSortNormal
    



  • di verbo (utente non iscritto) data: 18/07/2013 21:50:43

    GRazie infinite Paolo funziona alla grandissima
    Se hai tempo e voglia puoi commentarmi mi la macro passo passo in modo da capire come funziona.

    ciao sono in debito nei tuoi confronti



  • di paolomath data: 18/07/2013 23:17:05

    A disposizione

    Bye bye.

    Sub Copia_Col()

    Dim Massimo As Integer
    Massimo = 0

    '*** cerca l'ultima colonna con dati, controlla le colonne 5, 9, 13, 17, ecc.
    While Sheets("Incrementi settimanali").Cells(1, 4 * Massimo + 5).Value <> ""
    Massimo = Massimo + 1
    Wend

    Sheets("Incrementi settimanali").Select
    'Range("C1").Activate '*** questa non serve
    '*** seleziona la terza colonna del "gruppo"
    Columns(4 * Massimo + 3).Select
    Selection.Copy
    Sheets("Riep incrementi sett").Select
    '*** incolla speciale (valori) la seconda colonna del nuovo "gruppo"
    Columns(3 * Massimo + 2).Select
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
    Sheets("Incrementi settimanali").Select
    '*** seleziona la prima colonna del "gruppo"
    Columns(4 * Massimo + 1).Select
    Selection.Copy
    Sheets("Riep incrementi sett").Select
    '*** incolla speciale (valori) la prima colonna del nuovo "gruppo"
    Columns(3 * Massimo + 1).Select
    ActiveSheet.Paste
    '*** seleziona il nuovo "gruppo"
    Range(Cells(2, 3 * Massimo + 1), Cells(179, 3 * Massimo + 2)).Select
    '*** ordina in modo discendente il nuovo "gruppo" riferendosi alla seconda colonna
    Selection.Sort Key1:=Cells(2, 3 * Massimo + 2), Order1:=xlDescending, Header:=xlGuess, OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, DataOption1:=xlSortNormal

    End Sub



  • di verbo (utente non iscritto) data: 19/07/2013 09:01:11

    Grazie Paolo sei stato gentilissimo.
    Luigi