Valutazione 4.87/ 5 (100.00%) 5838 voti

Condividi:        

Media su più fogli

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

Media su più fogli

Postdi Fabiolan » 27/03/17 20:01

Ciao ragazzi, nel file che vi allego ho un primo foglio con elencate le attività realizzate.
Sui fogli successivi ho alcune di queste attività con un valore di Materiale Consumato
Come posso fare per avere la Media sul primo foglio contando che il numero di fogli aumenterà e non voglio aggiornare di volta in volta la formula MEDIA()?
Grazie :)

https://www.dropbox.com/s/p0soj8ytjkulx ... .xlsx?dl=0
Fabiolan
Utente Junior
 
Post: 65
Iscritto il: 12/02/17 19:19

Sponsor
 

Re: Media su più fogli

Postdi Anthony47 » 28/03/17 00:03

Come l'hai pensata io non conosco formule che ti possano dare il risultato direttamente.
Invece di mettere l'elenco a caso dei materiali su N fogli metti tutto in un unico foglio e poi potrai calcolare tutte le informazioni che vuoi relativamente ai materiali o ai singoli progetti tramite una tabella pivot o semplici formule.
Ti bastera' usare un layout dati del tipo
Codice: Seleziona tutto
Materiale /Quantita' /Progetto di riferimento


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

Re: Media su più fogli

Postdi Fabiolan » 28/03/17 09:13

Ciao, anche io avevo pensato alla Tabella Pivot, però come faccio a inserire in essa automaticamente anche i nuovi fogli che si creeranno?
Fabiolan
Utente Junior
 
Post: 65
Iscritto il: 12/02/17 19:19

Re: Media su più fogli

Postdi ricky53 » 28/03/17 10:52

Ciao,
Anthony ti aveva già detto di utilizzare un solo foglio nel quale riportare i dati e ... poi vai di pivot.


Io propongo:
utilizza un NUOVO FOGLIO che sia di riepilogo di tutti quelli presenti nel tuo file excel (ossia deve contenere tutti i dati degli altri fogli) e ... poi vai di PIVOT su questo nuovo foglio!
Dice il vecchio saggio provare e riprovare è l'unica strada per imparare

Più chiara è la vostra spiegazione
Più immediata sarà la nostra soluzione


. . . . . . . . . .
S.O. W7; Office 2003-10-13-16
Avatar utente
ricky53
Utente Senior
 
Post: 4526
Iscritto il: 11/04/09 19:29
Località: Italia

Re: Media su più fogli

Postdi Fabiolan » 28/03/17 11:26

Ciao, il problema che la pivot la devo fare su un foglio riassuntivo come tu dici, però i fogli da includere nella pivot non sono fissi, vengono sempre aggiunti fogli nuovi che bisogna includere, però vorrei che questo venisse fatto in automatico. Tipo estendi la Pivot sino all'ultimo foglio o un qualcosa di simile
Fabiolan
Utente Junior
 
Post: 65
Iscritto il: 12/02/17 19:19

Re: Media su più fogli

Postdi ricky53 » 28/03/17 11:35

Ciao,
NON ci siamo capiti.

Devi avere un foglio riepilogativo con TUTTI i dati dei vari fogli e poi su un altro foglio fai la pivot.
Il riepilogativo lo puoi costruire con una macro ... se invi un esempio possiamo provare a buttare giù qualcosa.


DOMANDA: ma perchè devi aggiunge altri fogli al tuo file? Non si può organizzare il file facendo in modo che i nuovi dati siano inseriti sui fogli esistenti?


Il file diventa indispensabile per trovare una soluzione alternativa ... magari agendo sulla struttura/organizzazione dati ... attendiamo il tuo file.
Dice il vecchio saggio provare e riprovare è l'unica strada per imparare

Più chiara è la vostra spiegazione
Più immediata sarà la nostra soluzione


. . . . . . . . . .
S.O. W7; Office 2003-10-13-16
Avatar utente
ricky53
Utente Senior
 
Post: 4526
Iscritto il: 11/04/09 19:29
Località: Italia

Re: Media su più fogli

Postdi Fabiolan » 28/03/17 19:27

Ciao, per come deve essere strutturato il tutto, non posso fare tutto in un unico foglio.
Ti scrivo ciò che vorrei e ti allego il file.
Io l'ho pensata così però accetto eventuali proposte
Nel file che allego, trovi un foglio RASSIUNTO. In cima ci sono diverse attività che ho rinominato Esempio 1 etc.
In ogni foglio ci sono i materiali utilizzati durante quell'attività (ho predisposto un elenco a tendina).
Siccome io vorrei nel foglio RIASSUNTO solo i materiali usati in tutti i fogli, in modo univoco con i diversi consumi di questi a seconda dell'attività.
Io ho pensato che per copiare i materiali in modo univoco nel foglio rassiunto, si potrebbe controllare il "Numero Univoco". Ovvero copiare questo in modo univoco da tutti i fogli dalla colonna O(dove c'è scritto materiale utizzato)
Quindi cosi sul file riassunto ci sono esattamente i materiali presenti in ogni foglio e poi applicare la media dei consumi realizzati nei diversi fogli a seconda dell'attività.
Nel foglio RIASSUNTO sotto la colonna Esempio1 etc ci devono appunto essere i consumi
Il foglio NON COMPILARE è quello che userò per creare tutti i successivi fogli.
Spero di essere stato chiaro. Ti ringrazio per l'aiuto


https://www.dropbox.com/s/w31oe0cnvnem2 ... .xlsm?dl=0
Fabiolan
Utente Junior
 
Post: 65
Iscritto il: 12/02/17 19:19

Re: Media su più fogli

Postdi Fabiolan » 28/03/17 19:37

O forse qualcosa di più semplice potrebbe essere usare la Pivot sui fogli esistenti e usare una macro per aggiungere fogli in automatico ad essa quando essi sono aggiunti al file Excel, che dite?
Fabiolan
Utente Junior
 
Post: 65
Iscritto il: 12/02/17 19:19

Re: Media su più fogli

Postdi Anthony47 » 29/03/17 13:31

O forse qualcosa di più semplice potrebbe essere usare la Pivot sui fogli esistenti e usare una macro per aggiungere fogli in automatico ad essa quando essi sono aggiunti al file Excel, che dite?
Dico che non ho interesse a lavorare per raddrizzare un obrobrio senza nemmeno sapere perche' e' obbligatorio che rimanga un obrobrio.

Comunque io lavorerei con una macro che crea il foglio riepilogo e dal foglio riepilogo ti crei tutte le informazioni che servono, o tramite pivot o tramite formule normali.

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

Re: Media su più fogli

Postdi ricky53 » 29/03/17 14:04

Ciao Fabio,

come vedi anche il Mitico Anthony ti ha proposto di modificare l'organizzazione che hai dato (o avete dato) al file.

Ribadisco che quanto ti avevo consigliato, nel mio precedente intervento (che è stato confermato da Anthony), può essere la soluzione più semplice da applicare al tuo lavoro senza modificare quanto hai fatto ma solo INTEGRARLO per farti ottenere quanti chiedi.


Comunque anche per me NON è valido quanto hai fatto ma poi sei tu che decidi.
Dice il vecchio saggio provare e riprovare è l'unica strada per imparare

Più chiara è la vostra spiegazione
Più immediata sarà la nostra soluzione


. . . . . . . . . .
S.O. W7; Office 2003-10-13-16
Avatar utente
ricky53
Utente Senior
 
Post: 4526
Iscritto il: 11/04/09 19:29
Località: Italia

Re: Media su più fogli

Postdi Fabiolan » 29/03/17 15:51

Ciao, scusate le pretese. Non era mia intenzione alludere a ciò.
Ho necessità di usare tanti fogli e che questi vengano aggiunti di volta in volta perchè ogni foglio corrisponde ad un intervento di manutenzione.
Eh appunto, io voglio in un foglio riussuntivo, tenere traccia del consumo medio per quell'intervento (chiamato nel file "Attività") cosi da sapere in media quanto materiale mi serve quando si ripresenta quell'intervento.

accetto volentieri la proposto di Antony che però non mi è del tutto chiaro come procedere.
Spero in un vostro aiuto.
Di nuovo Grazie
Fabiolan
Utente Junior
 
Post: 65
Iscritto il: 12/02/17 19:19

Re: Media su più fogli

Postdi ricky53 » 29/03/17 16:00

Caio,
prova a buttare giù la struttura di questo file riassuntivo con le colonne che ti occorrono (scrivi bene le intestazioni) e riporta anche i dati ... in modo che si capisca cosa vuoi ottenere e poi vedremo di scrivere il codice che dopo l'inserimento di un nuovo foglio viene eseguito e accoda i dati del nuovo foglio sul foglio di riepilogo ...


Manda questo file di esempio e ... ci si prova, se è chiaro cosa fare ... ovviamente.
Dice il vecchio saggio provare e riprovare è l'unica strada per imparare

Più chiara è la vostra spiegazione
Più immediata sarà la nostra soluzione


. . . . . . . . . .
S.O. W7; Office 2003-10-13-16
Avatar utente
ricky53
Utente Senior
 
Post: 4526
Iscritto il: 11/04/09 19:29
Località: Italia

Re: Media su più fogli

Postdi Fabiolan » 29/03/17 20:03

Ciao, grazie per l'aiuto.
Ho riportato il risultato desiderato nel foglio RIASSUNTO nell'ipotesi che ci siano solo 3 fogli. (ma questi aumenteranno e saranno identiti al fogli NON COMPILARE che uso appunto come foglio base).
Ho inserito due commenti sulle cifre cosi da riuscire voi a capire.
Graziee :)

https://www.dropbox.com/s/rl9jehbcsvnfs ... .xlsm?dl=0
Fabiolan
Utente Junior
 
Post: 65
Iscritto il: 12/02/17 19:19

Re: Media su più fogli

Postdi Anthony47 » 30/03/17 23:01

Allora....
Aggiungi al tuo file un foglio chiamato Z_RIEPILOGO e un altro chiamato PIVOT.
Inserisci in un Modulo standard del vba questa macro:
Codice: Seleziona tutto
Sub ZRiep()
Dim tSh As Worksheet, I As Long, iGnora, myNext As Long, cLast As Long
Dim hShI As Long, myMatch
'
Set tSh = Sheets("Z_RIEPILOGO")         '<<<1 Il foglio in cui si crea ex-novo il riepilogo
iGnora = Array("RIASSUNTO", "Z_RIEPILOGO", "NON COMPILARE", "PIVOT")    '<<<2 I Fogli da ignorare
tSh.Cells.ClearContents
For I = 1 To Worksheets.Count
    myNext = tSh.Cells(Rows.Count, "P").End(xlUp).Row + 1
    With Sheets(I)
        myMatch = Application.Match(.Name, iGnora, 0)
        If IsError(myMatch) Then
            If hShI = 0 Then hShI = I
            cLast = Evaluate("max(row(" & .Name & "!7:2000)*(len(" & .Name & "!O7:O2000)>2))")
            If cLast < 8 Then cLast = 8
            tSh.Cells(myNext, 2).Resize(cLast - 7, 15).Value = .Range(.Range("A8"), .Cells(cLast, "O")).Value
            tSh.Cells(myNext, 1).Resize(cLast - 7, 1).Value = .Range("D1").Value
        End If
    End With
Next I
tSh.Cells(1, 1) = "Esempio"
For I = 1 To 15
    If Sheets(hShI).Cells(7, I).Value <> "" Then
        tSh.Cells(1, I + 1) = Sheets(hShI).Cells(7, I).Value
    Else
        tSh.Cells(1, I + 1) = Chr(65 + I) & Chr(65 + I)
    End If
Next I
'Sheets("PIVOT").Range("A4").PivotTable.PivotCache.Refresh
End Sub

Personalizza le righe marcate <<< come da commenti; in particolare nella riga <<<2 inserirai, in quel formato, tutti i fogli il cui contenuto non deve essere riepilogato.

Poi manda in esecuzione la Sub ZRiep.
Essa CANCELLA SENZA PREAVVISO tutto il contenuto del foglio Z_RIEPILOGO, poi scorre i fogli e riporta in Z_RIEPILOGO il contenuto di quelli che sembrano da riepilogare.
A questo punto avrai un elenco in cui in colonna A c'e' il none dell'esempio, prelevato da D1 dei fogli copiati, e in colonna B:P c'e' il contenuto delle colonne A:O dei fogli copiati.

Ho usato colonna O per identificare la fine dell'elenco, ma mi lascia perplesso che in alcune celle ci sia un valore in altre, fino a riga 1290, ci sono delle formule.

Una volta avuto in foglio Z_Riepilogo il riepilogo del contenuto di tutti i fogli potrai con una tabella pivot ottenere la tabella che ti interessa:
-seleziona le colonne A:P del foglio Z_RIEPILOGO
-Alt-D-B per avviare il wizard della tabella pivot
-premere Avanti, Avanti; spuntare "Foglio di lavoro esistente" come destinazione della tabella pivot
-selezionare foglio PIVOT e selezionare cella A2; premere Fine
-verra' mostrata la struttura di una tabella pivot generica, e sulla destra l'elenco dei campi disponibili
-trascinare la voce Esempio nell'area Etichette di colonne
-trascinare la voce Materiale utilizzato nell'area Etichette di riga
-trascinare la voce Consumi nell'area Valori; fare in modo che compaia Media di consumo (seleziona la visualizzazione corrente, usa la voce Impostazione campo valori)

Quando inserisci un nuovo foglio allora devi rilanciare la Sub ZRiep e poi aggiornare la pivot table; dopo aver creato nel tuo file la struttura di fogli come descrita inizialmente e la tabella pivot come appena descritta allora puoi eliminare l'apostrofo all'inizio della riga 'Sheets("PIVOT").Range("A4").PivotTable.PivotCache.Refresh , in modo che la stessa macro che aggiorna il foglio Z_RIEPILOGO aggiorna anche la tabella pivot.

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

Re: Media su più fogli

Postdi Fabiolan » 01/04/17 01:30

Ciao Anthony.
Scusa per il tardivo feedback.
La tua soluzione mi piace molto e ti ringrazio.
C'è però un problema che avrei dovuto specificare meglio.
Nel momento in cui l'articolo è un Cavo, io posso avere la situazione in cui in un foglio ho Consumo +100+20-20 per un cavo con un derminato diametro.
Ho che quindi il consumo REALE è stato 100.
Purtroppo accade quella situazione perchè il lettore barcode legge solo il codice, non è possibile inserire la lunghezza del cavo. Quindi ho dovuto fare codici diversi per diverse metretature per un stesso cavo ( e diametro).
Quindi per come è pensato ora il codice ho che qualora il cavo sia stato utilizzato solo in un foglio la media è (100+20-20)/3 che è diversa dal valore 100
Ripeto è un mio errore, non ho specificato questo inconveniente.
È possibile introdurre una modifica al codice che facesse una sorta di somma prima di far copiare I valori in Z_riepilogo cosi da avere copiato solo 100 e non (100+20-20) perche appunto cambia la media.
Grazie
Fabiolan
Utente Junior
 
Post: 65
Iscritto il: 12/02/17 19:19

Re: Media su più fogli

Postdi Fabiolan » 01/04/17 15:02

Ti allego il file di esempio perchè rileggendo capisco che non si capisce niente.
Grazie dell'aiuto

https://www.dropbox.com/s/icddq4odqav2f ... .xlsx?dl=0
Fabiolan
Utente Junior
 
Post: 65
Iscritto il: 12/02/17 19:19

Re: Media su più fogli

Postdi Fabiolan » 01/04/17 17:50

Anthony, scusa nuovamente il disturbo.
Siccome ho cambiato la disposizione delle colonne all'interno del foglio, potresti commentare il codice così lo posso adattare alla nuova struttura.
Ho provato, ma escono errori a raffica xD

Ti ringrazio
Fabiolan
Utente Junior
 
Post: 65
Iscritto il: 12/02/17 19:19

Re: Media su più fogli

Postdi Anthony47 » 02/04/17 11:52

Ho aggiunto qualche commento spiegando l'obiettivo delle istruzioni:
Codice: Seleziona tutto
Sub ZRiep()
Dim tSh As Worksheet, I As Long, iGnora, myNext As Long, cLast As Long
Dim hShI As Long, myMatch
'
Set tSh = Sheets("Z_RIEPILOGO")         '<<<1 Il foglio in cui si crea ex-novo il riepilogo
iGnora = Array("RIASSUNTO", "Z_RIEPILOGO", "NON COMPILARE", "PIVOT")    '<<<2 I Fogli da ignorare
'azzera foglio target
tSh.Cells.ClearContents
'ciclo per esaminare tutti i worksheets
For I = 1 To Worksheets.Count
'usa colonna P per individuare prima riga libera in z_riepilogo
    myNext = tSh.Cells(Rows.Count, "P").End(xlUp).Row + 1
    With Sheets(I)
'esamina l'elenco degli "ignora"
        myMatch = Application.Match(.Name, iGnora, 0)
        If IsError(myMatch) Then                  'Il foglio non e' in elenco
            If hShI = 0 Then hShI = I               'Indice de primo foglio copiato
'calcola l'ultima riga usata esaminando colonna O:
            cLast = Evaluate("max(row(" & .Name & "!7:2000)*(len(" & .Name & "!O7:O2000)>2))")
            If cLast < 8 Then cLast = 8
'Copia foglio corrente accodandolo a z_riepilogo:
            tSh.Cells(myNext, 2).Resize(cLast - 7, 15).Value = .Range(.Range("A8"), .Cells(cLast, "O")).Value
'Copia nome del progetto in colonna A di z_riepilogo:
            tSh.Cells(myNext, 1).Resize(cLast - 7, 1).Value = .Range("D1").Value
        End If
    End With
Next I
'Compila le intestazioni su riga 1 di z_riepilogo, anche quelle vuote nei fogli di copia:
tSh.Cells(1, 1) = "Esempio"
For I = 1 To 15
    If Sheets(hShI).Cells(7, I).Value <> "" Then
        tSh.Cells(1, I + 1) = Sheets(hShI).Cells(7, I).Value
    Else
        tSh.Cells(1, I + 1) = Chr(65 + I) & Chr(65 + I)
    End If
Next I
'Aggiorna pivot-table:
'Sheets("PIVOT").Range("A4").PivotTable.PivotCache.Refresh
End Sub

Quanto al discorso del metodo usato per indicare la lunghezza dei cavi ho bisogno di tempo per capire cosa hai fatto e come si puo' gestire.
Ciao
Avatar utente
Anthony47
Moderatore
 
Post: 17664
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: Media su più fogli

Postdi Fabiolan » 02/04/17 12:48

Ciao Anthony. Come ti ho detto, ho modificato un po la struttura del foglio: semplicemente ho riportato nella colonna A la colonna O e quindi c'è stato solo un shift di una colonna a destra.
Inoltre nel foglio riepilogo è possibile riportare sino alla colonna Consumo e non anche la colonna Codice letto dal Barcode? (tanto ai fini della media, è una colonna che non mi serve)
Quindi vorrei copiare dalla A (in cui ho il codice materiale utilizzato) alla G in cui ho Consumo.
Ho modificato così la tua macro però non funziona come prima (copia un solo foglio). Dove ho sbagliato?
Codice: Seleziona tutto
Sub ZRiep()
Dim tSh As Worksheet, I As Long, iGnora, myNext As Long, cLast As Long
Dim hShI As Long, myMatch
'
Set tSh = Sheets("Z_RIEPILOGO")         '<<<1 Il foglio in cui si crea ex-novo il riepilogo
iGnora = Array("RIASSUNTO", "Z_RIEPILOGO", "NON COMPILARE", "PIVOT")    '<<<2 I Fogli da ignorare
'azzera foglio target
tSh.Cells.ClearContents
'ciclo per esaminare tutti i worksheets
For I = 1 To Worksheets.Count
'usa colonna P per individuare prima riga libera in z_riepilogo
    myNext = tSh.Cells(Rows.Count, "P").End(xlUp).Row + 1
    With Sheets(I)
'esamina l'elenco degli "ignora"
        myMatch = Application.Match(.Name, iGnora, 0)
        If IsError(myMatch) Then                  'Il foglio non e' in elenco
            If hShI = 0 Then hShI = I               'Indice de primo foglio copiato
'calcola l'ultima riga usata esaminando colonna O:
            cLast = Evaluate("max(row(" & .Name & "!7:2000)*(len(" & .Name & "!A7:A2000)>2))")
            If cLast < 8 Then cLast = 8
'Copia foglio corrente accodandolo a z_riepilogo:
            tSh.Cells(myNext, 2).Resize(cLast - 7, 15).Value = .Range(.Range("A8"), .Cells(cLast, "O")).Value
'Copia nome del progetto in colonna A di z_riepilogo:
            tSh.Cells(myNext, 1).Resize(cLast - 7, 1).Value = .Range("E1").Value
        End If
    End With
Next I
'Compila le intestazioni su riga 1 di z_riepilogo, anche quelle vuote nei fogli di copia:
tSh.Cells(1, 1) = "Esempio"
For I = 1 To 15
    If Sheets(hShI).Cells(7, I).Value <> "" Then
        tSh.Cells(1, I + 1) = Sheets(hShI).Cells(7, I).Value
    Else
        tSh.Cells(1, I + 1) = Chr(65 + I) & Chr(65 + I)
    End If
Next I
'Aggiorna pivot-table:
'Sheets("PIVOT").Range("A4").PivotTable.PivotCache.Refresh
End Sub



Grazie
Fabiolan
Utente Junior
 
Post: 65
Iscritto il: 12/02/17 19:19

Re: Media su più fogli

Postdi Fabiolan » 03/04/17 21:37

Ciao Antony, ti allego il nuovo file in cui potrai notare la vecchia colonna O adesso in A.
Siccome dopo numerosi tentativi, non sono riuscito ad adattare la tua macro alla nuova struttura (numerosi errori), potrei apportare le dovute modifiche al codice della macro perfavore?
Inoltre, se possibile, puoi far si che venga copiato in Z_riepilogo fino alla colonna G (consumo) e non fino a P in quanto sono colonne inutili ai fini del calcolo?
Grazie Grazie

https://www.dropbox.com/s/pngsvqje5l5s8 ... .xlsm?dl=0
Fabiolan
Utente Junior
 
Post: 65
Iscritto il: 12/02/17 19:19

Prossimo

Torna a Applicazioni Office Windows


Topic correlati a "Media su più fogli":


Chi c’è in linea

Visitano il forum: raimea e 30 ospiti

cron