Condividi:        

[Excel] Creare Macro per riordinare tabella

Vuoi potenziare i tuoi documenti Word? Non sai come si fa una macro in Excel? Devi creare una presentazione in PowerPoint?
Oppure sei passato a OpenOffice e non sei sicuro di come lavorare al meglio?

Moderatori: Anthony47, Flash30005

[Excel] Creare Macro per riordinare tabella

Postdi mmitola » 01/02/12 22:00

alve Ragazzi,
innanzitutto mi scuso preventivamente se qualche mia domanda potrà sembrarvi scontata, ma ho un urgentissimo bisogno di una mano e spero che possiate aiutarmi.

Cerco di spiegarvi di cosa ho bisogno.

Ho un foglio excel in cui sono inserite "N" tabelle come quella in basso:

DATA H M N.Doc Lordo Netto Iva
16-01-12 8 0 10 197590 179870 17720
16-01-12 8 30 15 253940 230300 23640
16-01-12 9 0 44 427000 389080 37920
16-01-12 9 30 40 872740 796510 76230
16-01-12 10 0 42 1031230 925050 106180
16-01-12 10 30 55 1376930 1255540 121390
16-01-12 11 0 70 1692750 1525460 167290
16-01-12 11 30 76 1647150 1477510 169640
16-01-12 12 0 53 1211590 1103930 107660
16-01-12 12 30 51 1101320 1002530 98790
16-01-12 13 0 35 423330 381960 41370
16-01-12 13 30 30 685430 623150 62280
16-01-12 14 0 19 264380 242770 21610
16-01-12 14 30 16 526480 471790 54690
16-01-12 15 0 31 482440 431560 50880
16-01-12 15 30 31 277180 255790 21390
16-01-12 16 0 33 359710 324650 35060
16-01-12 16 30 32 340080 312400 27680
16-01-12 17 0 47 848050 775440 72610
16-01-12 17 30 64 790070 717910 72160
16-01-12 18 0 51 1047060 946600 100460
16-01-12 18 30 58 1313850 1183830 130020
16-01-12 19 0 45 999360 908720 90640
16-01-12 19 30 43 1121600 1007960 113640
16-01-12 20 0 47 992100 897000 95100
16-01-12 20 30 14 508410 462690 45720


DATA H M N.Doc Lordo Netto Iva
17-01-12 7 30 5 41700 34460 7240
17-01-12 8 0 29 132850 120160 12690
17-01-12 8 30 34 349460 313990 35470
17-01-12 9 0 60 423820 381370 42450
17-01-12 9 30 56 867490 792880 74610
17-01-12 10 0 53 891450 807610 83840
17-01-12 10 30 54 1663730 1494360 169370
17-01-12 11 0 68 1655920 1504910 151010
17-01-12 11 30 78 1707700 1556400 151300
17-01-12 12 0 64 1748880 1573230 175650
17-01-12 12 30 57 1254130 1144130 110000
17-01-12 13 0 48 688950 631360 57590
17-01-12 13 30 46 998300 902180 96120
17-01-12 14 0 55 443460 407960 35500
17-01-12 14 30 26 305530 279270 26260
17-01-12 15 0 38 142430 131060 11370
17-01-12 15 30 40 361070 323310 37760
17-01-12 16 0 25 256160 231840 24320
17-01-12 16 30 24 462570 419100 43470
17-01-12 17 0 27 576820 523440 53380
17-01-12 17 30 38 917700 825600 92100
17-01-12 18 0 35 926980 840060 86920
17-01-12 18 30 35 844370 769290 75080
17-01-12 19 0 33 898070 810860 87210
17-01-12 19 30 45 1090270 987320 102950
17-01-12 20 0 33 774340 697510 76830
17-01-12 20 30 13 257420 230300 27120




Il mio obiettivo è quello di ottenere due tabelle separate (una per la colonna chiamata “N.Doc” e l’altra per la colonna “Lordo”
Ogni tabella dev’essere ordinata nel seguente modo:
H 8 8 9 9
M 0 30 0 30
DATA
16/01/2012 "N.Doc" "N.Doc" "N.Doc" "N.Doc" …..
17/01/2012 "N.Doc" "N.Doc" "N.Doc" "N.Doc" ……

Spero di essermi spiegato a dovere….Vi prego aiutate
    mi….le tabelle incriminate sono + di 100 e pensare di fare un “copia/incolla-trasponi” per tutte è da pazzi….
    Confido in voi….Grazie in anticipo….
    Michele.
    mmitola
    Utente Junior
     
    Post: 25
    Iscritto il: 01/02/12 21:45

    Sponsor
     

    Re: [Excel] Creare Macro per riordinare tabella

    Postdi Anthony47 » 01/02/12 22:46

    Ciao mmitola, benvenuto nel forum.
    Un commento maligno: con quelle cifre un programmatore potreste pure pagarlo, no? :D

    Venendo al problema: se hai un centinaio di tabelle dovresti spiegare come facciamo a capire dove queste sono localizzate.
    Per quanto riguarda l' output veramente non hai detto molto; ne' su come vanno aggregati i dati di partenza (chiarito come sapere dove andare a prenderli) ne' sul formato delle tabelle di uscita (che non ho nemmeno capito se saranno 2 per ogni tabella di partenza o 2 in tutto). Quindi prova a descrivere il tutto con maggiore generosita'.

    Ti aspettiamo, ciao
    Avatar utente
    Anthony47
    Moderatore
     
    Post: 19215
    Iscritto il: 21/03/06 16:03
    Località: Ivrea

    Re: [Excel] Creare Macro per riordinare tabella

    Postdi mmitola » 02/02/12 09:45

    Ciao Anthony47,
    innanzitutto ti ringrazio per avermi risposto.
    In effetti riconosco che la mia spiegazione non sia stata proprio di un professore universitario.
    Riorganizzo le idee e ti spiego quanto prima quale sarebbe la mia necessità.
    A tal proposito ti chiedo come posso fare ad inserire delle immagini nella risposta in modo che ti possa postare le tabelle con le formattazioni giuste....sarebbe sicuramente più semplice spiegarmi e comprendere.
    mmitola
    Utente Junior
     
    Post: 25
    Iscritto il: 01/02/12 21:45

    Re: [Excel] Creare Macro per riordinare tabella

    Postdi mmitola » 02/02/12 09:53

    Per le immagini ho capito come fare...non avevo letto le istruzioni...scusami...
    Ti scrivo presto la mia richiesta.
    mmitola
    Utente Junior
     
    Post: 25
    Iscritto il: 01/02/12 21:45

    Re: [Excel] Creare Macro per riordinare tabella

    Postdi Flash30005 » 02/02/12 09:59

    Benvenuto anche da parte mia

    Meglio delle immagini sarebbe il file stesso modificando opportunatamente eventuali dati sensibili

    ciao
    Flash
    Win10 + Office 2010 Ita
    "Fotografica" al servizio dell'immagine
    Avatar utente
    Flash30005
    Moderatore
     
    Post: 8517
    Iscritto il: 27/09/07 11:44
    Località: Roma +o-

    Re: [Excel] Creare Macro per riordinare tabella

    Postdi mmitola » 02/02/12 10:06

    Buongiorno ragazzi,
    allora innanzitutto vi riscrivo il messaggio con le tabelle formattare nel modo corretto che sarà sicuramente più semplice spiegare.

    Salve Ragazzi,
    innanzitutto mi scuso preventivamente se qualche mia domanda potrà sembrarvi scontata, ma ho un urgentissimo bisogno di una mano e spero che possiate aiutarmi.

    Cerco di spiegarvi di cosa ho bisogno.

    Ho un foglio excel in cui sono inserite "N" tabelle come quella in basso:
    Immagine

    Immagine

    Il mio obiettivo è quello di ottenere due tabelle separate (una per la colonna chiamata “N.Doc” e l’altra per la colonna “Lordo”
    Ogni tabella dev’essere ordinata nel seguente modo:
    Immagine

    Venendo alle domande di Anthony:

    1)Le 100 tabelle sono già tutte nello stesso foglio
    2)Le tabelle in uscita sono in tutto DUE (una per il dato "N.Doc";l'altra per il dato "Lordo")

    Come vi dicevo le primo messaggio è una sorta di copia e incolla trasposto. Io ho bisogno dei dati ordinati per FASCE ORARIE (colonne), mentre sulle tabelle originarie questi sono sulle righe.
    mmitola
    Utente Junior
     
    Post: 25
    Iscritto il: 01/02/12 21:45

    Re: [Excel] Creare Macro per riordinare tabella

    Postdi mmitola » 02/02/12 10:45

    Ciao Flash,
    purtroppo dal pc da cui mi collego mi è inibita la possibilità di collegarmi ai siti che mi consentono di caricare il file/esempio che ho preparato....

    Se tu fossi così gentile da darmi un indirizzo e mail e potessi postarlo tu, te ne sarei grato...
    mmitola
    Utente Junior
     
    Post: 25
    Iscritto il: 01/02/12 21:45

    Re: [Excel] Creare Macro per riordinare tabella

    Postdi Flash30005 » 02/02/12 11:49

    Non so quali siti sono accessibili per te
    fai una ricerca su google per Free "File host" o altre chiavi di ricerca
    ad esempio questo
    Comunque ho approntato una macro considerando che tutte le tabelle siano con la data nella colonna A del Foglio1 e il resto come da tua immagine (riversamento dati in Foglio2 e Foglio3)
    Codice: Seleziona tutto
    Sub CompilaF()
    Dim Ws1, Ws2, Ws3 As Worksheet
    Set Ws1 = Worksheets("Foglio1")
    Set Ws2 = Worksheets("Foglio2")
    Set Ws3 = Worksheets("Foglio3")
    Ws2.Cells.ClearContents
    Ws3.Cells.ClearContents
    Dim Data1 As Date
    For F = 2 To 3
    If Sheets(F).Name <> Ws1.Name Then
        Sheets(F).Select
        Range("B1").FormulaR1C1 = "H"
        Range("B2").FormulaR1C1 = "M"
        Range("A2").FormulaR1C1 = "Data"
        Range("C1").FormulaR1C1 = "7"
        Range("C2").FormulaR1C1 = "30"
        Range("D1").FormulaR1C1 = "8"
        Range("D2").FormulaR1C1 = "0"
        Range("E1").FormulaR1C1 = "8"
        Range("E2").FormulaR1C1 = "30"
        Range("F1").FormulaR1C1 = "9"
        Range("G1").FormulaR1C1 = "9"
        Range("H1").FormulaR1C1 = "10"
        Range("I1").FormulaR1C1 = "10"
        Range("J1").FormulaR1C1 = "11"
        Range("K1").FormulaR1C1 = "11"
        Range("L1").FormulaR1C1 = "12"
        Range("M1").FormulaR1C1 = "12"
        Range("N1").FormulaR1C1 = "13"
        Range("O1").FormulaR1C1 = "13"
        Range("P1").FormulaR1C1 = "14"
        Range("Q1").FormulaR1C1 = "14"
        Range("R1").FormulaR1C1 = "15"
        Range("S1").FormulaR1C1 = "15"
        Range("T1").FormulaR1C1 = "16"
        Range("U1").FormulaR1C1 = "16"
        Range("V1").FormulaR1C1 = "17"
        Range("W1").FormulaR1C1 = "17"
        Range("X1").FormulaR1C1 = "18"
        Range("Y1").FormulaR1C1 = "18"
        Range("Z1").FormulaR1C1 = "19"
        Range("AA1").FormulaR1C1 = "19"
        Range("AB1").FormulaR1C1 = "20"
        Range("AC1").FormulaR1C1 = "20"
        Range("F2").FormulaR1C1 = "0"
        Range("C2:F2").Copy Destination:=Range("G2,K2,O2,S2,W2,AA2")
        Range("AD2").ClearContents
        Application.CutCopyMode = False
    End If
    Next F
    Ws1.Select
    UR1 = Ws1.Range("A" & Rows.Count).End(xlUp).Row

    For RR1 = 1 To UR1
    If IsDate(Range("A" & RR1).Value) = False Then GoTo SaltaR
    Data1 = Range("A" & RR1).Value
    If Mdata <> Data1 Then
    Mdata = Data1
    UR2 = Ws2.Range("A" & Rows.Count).End(xlUp).Row + 1
    UR3 = Ws3.Range("A" & Rows.Count).End(xlUp).Row + 1
    Ws2.Range("A" & UR2).Value = Data1
    Ws3.Range("A" & UR3).Value = Data1
    Hr = Range("B" & RR1).Value
    Mr = Range("C" & RR1).Value
        For CC2 = 3 To 29
            If Ws2.Cells(1, CC2).Value = Hr And Ws2.Cells(2, CC2).Value = Mr Then
            Ws2.Cells(UR2, CC2).Value = Ws1.Cells(RR1, 4).Value
            Ws3.Cells(UR3, CC2).Value = Ws1.Cells(RR1, 5).Value
           
            GoTo SaltaR
            End If
            If CC2 = 29 Then
            GoTo SaltaR
            End If
        Next CC2
    Else
    For RRH = RR1 To UR1
    Hr = Range("B" & RRH).Value
    Mr = Range("C" & RRH).Value
        For CC2 = 3 To 29
            If Ws2.Cells(1, CC2).Value = Hr And Ws2.Cells(2, CC2).Value = Mr Then
            Ws2.Cells(UR2, CC2).Value = Ws1.Cells(RRH, 4).Value
            Ws3.Cells(UR3, CC2).Value = Ws1.Cells(RRH, 5).Value
            RR1 = RRH
            GoTo SaltaR
            End If
            If CC2 = 29 Then
            RR1 = RRH
            GoTo SaltaR
            End If
        Next CC2
    Next RRH
    End If
    SaltaR:
    Next RR1

    End Sub


    Allego il file con questo server o questo server

    Se hai problemi posta ancora

    Ciao
    Flash
    Win10 + Office 2010 Ita
    "Fotografica" al servizio dell'immagine
    Avatar utente
    Flash30005
    Moderatore
     
    Post: 8517
    Iscritto il: 27/09/07 11:44
    Località: Roma +o-

    Re: [Excel] Creare Macro per riordinare tabella

    Postdi mmitola » 02/02/12 13:00

    Ciao Flash,
    purtroppo dalla connessione in cui sono non riesco a connettermi a nessuno dei siti da te indicati per postare il file.

    Ho provato la macro e va bene.

    Ma ad un certo punto mi dà errore che corrisponde alla seguente stringa di codice

    Data1 = Range("A" & RR1).Value

    e il testo dell'errore è "ERRORE DI RUNTIME '13' Tipo non corrispondente)

    Infine mi considera solo la prima tabella, devo replicare qualche stralcio di codice per N-volte?

    Scusami davvero tanto per tutto il disturbo...davvero perdonami.
    mmitola
    Utente Junior
     
    Post: 25
    Iscritto il: 01/02/12 21:45

    Re: [Excel] Creare Macro per riordinare tabella

    Postdi Flash30005 » 02/02/12 13:30

    Quell'errore è dovuto al fatto che una determinata cella in A1 non è una data
    avevo inserito appositamente la riga di salto nel caso si verificasse e non so perché a te vada in errore
    Puoi dirmi in quale riga ti trovi e farmi sapere cosa c'è in quella cella della colonna A?
    per vedere la riga è sufficiente, una volta in debug per errore, che punti il mouse sulla variabile RR1
    e poi verificare sul foglio il dato corrispondente nella colonna A

    Ti considera la prima tabella perché si è bloccato per l'errore oppure perché le tabelle non sono in colonna?
    (intendo che sono e occupano tutte nel primo foglio dalla colonna A alla colonna E)

    fai sapere
    ciao
    Flash
    Win10 + Office 2010 Ita
    "Fotografica" al servizio dell'immagine
    Avatar utente
    Flash30005
    Moderatore
     
    Post: 8517
    Iscritto il: 27/09/07 11:44
    Località: Roma +o-

    Re: [Excel] Creare Macro per riordinare tabella

    Postdi mmitola » 02/02/12 15:02

    Ciao Flash,
    grazie per l'ulteriore spiegazione....ora la macro gira benissimo.
    Non so come ringraziarti!davvero.

    Spero di non crearti ulteriori problemi in futuro.

    Ancora grazie!
    mmitola
    Utente Junior
     
    Post: 25
    Iscritto il: 01/02/12 21:45

    Re: [Excel] Creare Macro per riordinare tabella

    Postdi Flash30005 » 02/02/12 15:23

    Non mi togli la curiosità (utile per futuri progetti) di cosa hai trovato in quella cella? :roll:
    Flash
    Win10 + Office 2010 Ita
    "Fotografica" al servizio dell'immagine
    Avatar utente
    Flash30005
    Moderatore
     
    Post: 8517
    Iscritto il: 27/09/07 11:44
    Località: Roma +o-

    Re: [Excel] Creare Macro per riordinare tabella

    Postdi Anthony47 » 02/02/12 15:32

    Per quanto riguarda l' output hai rinnovato la stessa descrizione, quindi vado a sentimento.

    Penso che puoi ottenere quello che cerchi con due tabelle pivot applicate al tuo foglio con i dati di partenza:
    -do' per scontato che tutte le tabelle siano ordinatamente incolonnate (non lo hai detto), e il loro layout sia costante (come hai detto), che la data sia in col A, H sia in col B, M sia in colonna C.
    -ti crei una colonna aggiuntiva che chiamo "Orario", in cui metti la formula
    Codice: Seleziona tutto
    =SE(VAL.NUMERO(A2);ORARIO(B2;C2;0);"")
    copiando poi verso il basso anche oltre i dati presenti
    -ti assicuri che in riga 1 ci sia una intestazione di colonna su tutte le colonne dalla A alla colonna Orario
    -selezioni dalla colonna A alla colonna Orario (dovrebbe essere la H).
    -crei una tabella pivot, seguendo queste linee guida per il layout della tabella:
    --nel campo RIGA trascini l' intestazione della colonna Data
    --nel campo COLONNA trascini l' intestazione Orario
    --nel campo DATI trascini il campo N.DOC, e ti assicuri che compaia come "Somma di N.DOC"; se compare altro (es Conta di ...) allora doppioclick sulla voce e scegli Somma dalle opzioni che ti propone.
    --completa la creazione tabella (con qualche Ok o Fine al posto giusto) e avrai cosi' ottenuto un elenco che per data (in verticale) e fascia oraria (in orizzontale) ti fara' la somma dei valori presenti nella colonna N.Doc.
    Se non vuoi ottenere la somma di quasti valori ma cerchi invece il "Valore di risp di N. Doc" allora scegli il campo giusto nei dati di origine e l' ozione giusta in creazione pivot (conta, somma, media, max, prodotto, varianza, ....).
    Per informazione piu' precise dovresti dare il layout preciso dei dati di partenza e la versione di excel in uso.
    La seconda tabella pivot la creerai usando (credo di aver capito) il campo Lordo ancora con l' opzione "Somma di ...".

    Ciao, fai sapere.
    Avatar utente
    Anthony47
    Moderatore
     
    Post: 19215
    Iscritto il: 21/03/06 16:03
    Località: Ivrea

    Re: [Excel] Creare Macro per riordinare tabella

    Postdi mmitola » 03/02/12 11:19

    Ciao Ragazzi,
    innanzitutto voglio ringraziarvi per esservi prodigati prontamente per me....DAVVERO GRAZIE!!!!

    Per Flash: il problema stava solo nel fatto che in una cella il formato non era una data e quindi bloccava tutto. Appena ho inserito il formato corretto è andato tutto ok.

    Per Anthony: Grazie anche a te per l'aiuto....ho provato (per curiosità) anche con la pivot come indicato da te e va bene, ma onestamente con la macro vado davvero bene.

    Ragazzi non posso che ringraziarvi ancora per l'aiuto che mi avete dato....spero di poter ripagarvi in qualche modo....COMPLIMENTI E' UN FORUM FANTASTICO.

    Ciao ciaoooooo
    mmitola
    Utente Junior
     
    Post: 25
    Iscritto il: 01/02/12 21:45

    Re: [Excel] Creare Macro per riordinare tabella

    Postdi Anthony47 » 03/02/12 14:18

    La differenza e' che quando i dati cambieranno layout la macro te la devi far correggere, la tabella pivot te la riarrangi da solo.
    Scegli tu il livello di autonomia che preferisci

    Ciao
    Avatar utente
    Anthony47
    Moderatore
     
    Post: 19215
    Iscritto il: 21/03/06 16:03
    Località: Ivrea


    Torna a Applicazioni Office Windows


    Topic correlati a "[Excel] Creare Macro per riordinare tabella":


    Chi c’è in linea

    Visitano il forum: Nessuno e 38 ospiti