Valutazione 4.87/ 5 (100.00%) 5838 voti

Condividi:        

[Excel-Vba]: 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-Vba]: Macro per riordinare tabella

Postdi mmitola » 15/09/13 15:26

Buongiorno ragazzi,
rieccomi con le mie solite fasce orarie. Tuttavia questa volta il problema sembra essere un tantino più facilmente risolvibile e spero che anche questa volta vogliate e possiate aiutarmi.
Ho un foglio excel con “N” tabelle come la seguente

Immagine

Il mio obiettivo è semplicemente di riordinare queste tabelle. Mi spiego meglio.
Ogni tabella fa riferimento ad una data, quindi il primo obiettivo sarà quello di inserire i dati facenti riferimento allo stesso giorno della settimana tutti insieme. Ho preparato preventivamente 7 fogli ognuno per ogni giorno della settimana, chiamati (Lun, Mar, Mer,….).
Il primo obiettivo è quello che i dati riferiti ai lunedì fossero inseriti tutti nella stessa tabella, così come per i restanti giorni della settimana.
Le tabelle che dovranno comparire nei fogli Lun, Mar, Mer,…. Sono molto simili a quella di partenza.
Come si può notare dalla figura che sto inserendo, la tabella è uguale a quella iniziale (come struttura), ma viene “estratta” solo la riga “valore”.
Pertanto, ad esempio, nel foglio Lun avrò tutti i lunedì della tabella originaria con le sole righe “valore”.

Immagine

Spero possiate aiutarmi perchè è davvero urgente.

Grazie anticipatamente per il vostro supporto e spero di sentirvi presto.

Ciao ciaoooo
mmitola
Utente Junior
 
Post: 24
Iscritto il: 01/02/12 21:45

Sponsor
 

Re: [Excel-Vba]: Macro per riordinare tabella

Postdi Anthony47 » 15/09/13 16:31

Il layout dei dati allegati e' illegibile, inoltre ricreare quella struttura richiede tempo; il mio suggerimento e' che alleghi un file di test.

Ciao, ti aspettiamo...
Anthony
Win7 + Office 2010 Ita; Win 7 + Office 2013 Ita
Xp + Office 2003 Ita
E voi cosa usate? (per istruzioni vedere viewtopic.php?f=26&t=97449)
Avatar utente
Anthony47
Moderatore
 
Post: 13885
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: [Excel-Vba]: Macro per riordinare tabella

Postdi mmitola » 16/09/13 11:11

Buongiorno,
mi scuso per la superficialità e l'approssimazione con la quale ho esposto la mia esigenza.
Seguo il tuo consiglio e posto subito un file test.

Nel primo foglio "Foglio iniziale" ci sono le tabelle iniziali estratte direttamente dal mio sistema, nei restanti fogli ho riprodotto quello che dovrebbe essere l'output della macro di cui vi chiedo aiuto.

Spero possiate davvero aiutarmi e spero possiate farlo quanto prima.... la consegna è stasera.... :cry: :cry: :cry:

Vi ringrazio anticipatamente per il supporto.

Grazie.

http://www.filedropper.com/0062_3
mmitola
Utente Junior
 
Post: 24
Iscritto il: 01/02/12 21:45

Re: [Excel-Vba]: Macro per riordinare tabella

Postdi Anthony47 » 17/09/13 01:34

Un altro "lavoro inutile", presumo; sono sicuro infatti che quel report in formato di fantasia e' stato prodotto con dati analitici da cui, immagino con una pivot table, sarebbe possibile estrarre le tabelle che cerchi di ricostruire.

Ma tante'...
Con una macro come questa dovresto ottenere le sintesi giornaliere che cerchi:
Codice: Seleziona tutto
Sub repack()
Dim ListaSh As String, HTab0 As String, WeekDd, mySplit, myDay, Sh
Dim LastR As Long, I As Long, NewLine As Long, NumCol As Long, VOff As Long
'
ListSh = "Foglio iniziale"      '<< Il foglio col report da cui si parte
HTab0 = "C16"                   '<< Le coordinate della prima cella con gli orari
'
Sheets(ListSh).Select
WeekDd = Array("lun", "mar", "mer", "gio", "ven", "sab", "dom")
'AZZERA fogli settimanali
For Each Sh In WeekDd
'    Sheets(Sh).Cells.ClearContents  '***VEDI TESTO
Next Sh
'
LastR = Cells(Rows.Count, Range(HTab0).Column).End(xlUp).Row
NumCol = Range(Range(HTab0), Range(HTab0).End(xlToRight)).Columns.Count
'Cerca righe contenente in colonna 1 con un "giorno di settimana"
For I = Range(HTab0).Row To LastR
    myDay = CVErr(xlErrNA)
    If Cells(I, 1) <> 0 Then
        mySplit = Split(Cells(I, 1), ",")
            If UBound(mySplit, 1) = 1 Then myDay = Application.Match(Trim(mySplit(1)), WeekDd, 0)
    End If
'Sposta su foglio giornaliero i "valori"
    If Not IsError(myDay) Then
    VOff = Application.Match("valore", Cells(I, 2).Resize(10, 1), 0) - 1
        With Sheets(Trim(mySplit(1)))
            NewLine = .Cells(Rows.Count, 1).End(xlUp).Row + 1
            If NewLine = 2 Then Range(HTab0).Resize(1, NumCol).Copy Destination:=.Range("C1")
            .Cells(NewLine, 1) = Cells(I, 1)
            .Cells(NewLine, 2).Resize(1, NumCol).Value = Cells(I + VOff, 2).Resize(1, NumCol).Value
        End With
    End If
Next I
'
End Sub

Operativamente:
-da excel, Alt-F11 per aprire l' editor delle macro
-Menu /Inserisci /Modulo
-copia il codice e incollalo nel frame vuoto di dx
-personalizza le due istruzioni marcate <<

Il codice e' predisposto per pulire all' inizio il contenuto dei fogli giornalieri; se vuoi effettivamente che tali fogli siano inizialmente azzerati devi eliminare l' apostrofo in testa alla riga marcata ***VEDI TESTO.

Poi manda in esecuzione la Sub repack:
-da Excel, Alt-F8
-seleziona "repack" dall' elenco che ti viene proposto e remi Esegui

Ciao, fai sapere...
Anthony
Win7 + Office 2010 Ita; Win 7 + Office 2013 Ita
Xp + Office 2003 Ita
E voi cosa usate? (per istruzioni vedere viewtopic.php?f=26&t=97449)
Avatar utente
Anthony47
Moderatore
 
Post: 13885
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: [Excel-Vba]: Macro per riordinare tabella

Postdi mmitola » 17/09/13 10:21

Buongiorno,
ti ringrazio sei stato gentilissimo e devo dire che la macro gira alla grande.
Non so davvero come ringraziarti.

Mi sorge un ultimo dubbio: nel caso in cui volessi prendere altri dati, anzichè quelli della riga "valore" devo semplicemente sostituire alla riga 26 la parola "valore" con l'altra che voglio cercare in tabella giusto?
mmitola
Utente Junior
 
Post: 24
Iscritto il: 01/02/12 21:45

Re: [Excel-Vba]: Macro per riordinare tabella

Postdi Anthony47 » 17/09/13 12:05

Direi di Si.
Se l' azzeramento dei fogli giornalieri e' disabilitato, i nuovi dati verranno accodati ai precedenti.
Al limite se vuoi sia "valore" che un altro dato si puo' inserire il codice attuale in un ulteriore For /Next per estrarre ambedue i dati.

Ciao
Anthony
Win7 + Office 2010 Ita; Win 7 + Office 2013 Ita
Xp + Office 2003 Ita
E voi cosa usate? (per istruzioni vedere viewtopic.php?f=26&t=97449)
Avatar utente
Anthony47
Moderatore
 
Post: 13885
Iscritto il: 21/03/06 16:03
Località: Ivrea


Torna a Applicazioni Office Windows


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


Chi c’è in linea

Visitano il forum: Nessuno e 17 ospiti