Somma celle suddivise per mesi

Anonimo
2024-11-15T11:11:34+00:00

Buongiorno,

avrei bisogno di creare una tabella e poi un grafico, in cui mi vengano sommati i gol di ogni calciatore, ma suddivisi per mese, basandosi sulla data indicata nella cella in alto, di circa 60 fogli.

In allegato lo screenshot del foglio.

Grazie

Angelo

Microsoft 365 e Office | Excel | Per la casa | Windows

Domanda bloccata. Questa domanda è stata eseguita dalla community del supporto tecnico Microsoft. È possibile votare se è utile, ma non è possibile aggiungere commenti o risposte o seguire la domanda.

0 commenti Nessun commento
Risposta accettata dall'autore della domanda
Anonimo
2024-11-19T17:28:18+00:00

Ciao Angelo,

ti metto il link al file modificato: File modificato

Potrai notare che ora è presente una seconda tabella con il riepilogo mensile dei gol (per confronto con la precedente) e tre tabelle con le "medie minuti".

Per arrivare a queste nuove tabelle (che non sono altro che una duplicazione l'una dell'altra ma riportando le colonne specifiche) ho creato una query nominata "DATI_MULTIPLI", che sfrutta la funzione personalizzata "FunzioneFogliColonneMultiple" tramite la quale, a differenza della precedente, si mantengono le colonne che hanno anche gli altri dati "totali" e non solo la colonna dei gol.

Questa query andrebbe implementata per avere le altre medie. Io mi sono fermato alle medie "minuti".

I passaggi che dovresti aggiungere partono da qui:

aggiungendo delle colonne personalizzate la cui formula fondamentalmente è questa per ciascun tipo di media:

Io avevo creato la prima e poi ho aggiunto dei passaggi successivi copiando e incollando e modificando in base all'esigenza.

Poi le query successive hanno come origine questa query di dati "multipli" e mantengo le colonne che mi interessano in base al riepilogo.

Lascio a te il compito di implementare a tuo piacimento :)

In teoria non dovrebbe essere impossibile, prendendo ad esempio quanto già c'è, aggiungere le altre medie e replicare i relativi riepiloghi.

ciao

La risposta è stata utile?

1 persona ha trovato utile questa risposta.
0 commenti Nessun commento

38 risposte aggiuntive

Ordina per: Meno recente
  1. Anonimo
    2024-11-17T08:32:40+00:00

    Sono d'accordo su PowerQuery, aggiungo che in questo specifico caso, con le formule (non considerando la soddisfazione della sfida) non serve trasformare gli intervalli in tabelle (il che preserva le celle unite) e non ha bisogno dell'aggiornamento manuale😉

    Ciao a tutti.

    Ciao Eleuterio,

    non ho trasformato gli intervalli in tabelle.

    Ho solo assegnato un nome, a livello di foglio di lavoro, all'intervallo di interesse (nello specifico A3:S57) in tutti i fogli.

    Ho preservato la struttura così come è (solo in un foglio finale per test ho mantenuto solo "2" righe dedicate ai nomi e gol dove l'intervallo è diventato A3:S21 ma sempre nominato "AreaDati").

    Solo che tramite query ho creato una funzione personalizzata che tratta gli intervalli nominati tutti allo stesso modo (un po' come viene fatto quando si elaborano dati da un percorso) e ho applicato la funzione personalizzata ai contenuti delle righe che contengano il nome assegnato all'intervallo.

    Vero che con le formule non devi fare "aggiorna dati".

    Ma quando aggiungi un foglio, da nominare assolutamente con lo stesso schema e in modo consecutivo, poi devi andare a modificare i riferimenti nella formula.

    Comunque ho pensato a come modificarla nel caso le righe in qualche foglio non fosse uguale, eliminando la voce "RISULTATO", ho pensato ad ordinare l'elenco dei nomi e aggiungere la "riga" vuota dopo le intestazioni dei mesi (tanto per vedere quello che si può fare con le formule, che indubbiamente sono affascinanti):

    =LET(IntNomi;Foglio1:Foglio8!A17:A56;

     IntGol; Foglio1:Foglio8!S17:S56; 
    
     IntDate;Foglio1:Foglio8!B6; 
    
     ElencoDate;STACK.VERT(IntDate); 
    
     ElencoNomi;UNICI(A.COL(STACK.VERT(IntNomi);3)); 
    
     ElencoNomiFiltratiOrdinati;DATI.ORDINA(FILTRO(ElencoNomi;ElencoNomi<>"RISULTATO")); 
    
     ElencoMesi;MAIUSC(TESTO(DATA.MESE("1/1/2024";SEQUENZA(;12;0));"mmmm")); 
    
     IntestazioneMesi;STACK.ORIZ({"MESI"};ElencoMesi); 
    
     NumeroGol;MAP(ElencoNomiFiltratiOrdinati&"§"&ElencoMesi;LAMBDA(c;SOMMA((STACK.VERT(IntNomi)=TESTO.PRECEDENTE(c;"§"))\*(TESTO(INDICE(ElencoDate;QUOZIENTE(SEQUENZA(40\*RIGHE(ElencoDate);;0);40)+1);"mmmm")=TESTO.SUCCESSIVO(c;"§"))\*STACK.VERT(IntGol)))); 
    
     STACK.VERT(IntestazioneMesi;MAKEARRAY(1;13;LAMBDA(x;y;""));STACK.ORIZ(ElencoNomiFiltratiOrdinati;NumeroGol)) 
    

    )

    Il risultato ottenuto (con sotto la tabella della query):

    Immagine

    La risposta è stata utile?

    0 commenti Nessun commento
  2. Anonimo
    2024-11-17T08:41:46+00:00

    Giusto per completezza metto i codici M delle query utilizzate per arrivare al risultato finale:

    Funzione personalizzata che tratta gli intervalli nominati "AreaDati":

    let 
    
        DatiSingoloFoglio = (Content)=> let 
    
        AreaDati = Content, 
    
        MeseFoglio = Date.Month(AreaDati[Column2]{3}), 
    
        AreaDati2 = AreaDati, 
    
        RimossePrimeRighe = Table.Skip(AreaDati2,13), 
    
        RimosseColonne = Table.RemoveColumns(RimossePrimeRighe,{"Column2", "Column3", "Column4", "Column5", "Column6", "Column7", "Column8", "Column9", "Column10", "Column11", "Column12", "Column13", "Column14", "Column15", "Column16", "Column17", "Column18"}), 
    
        Intestazioni = Table.PromoteHeaders(RimosseColonne, [PromoteAllScalars=true]), 
    
        EliminatoRisultato = Table.SelectRows(Intestazioni, each ([CALCIATORE] <> "RISULTATO")), 
    
        EliminatiVuoti = Table.SelectRows(EliminatoRisultato, each [CALCIATORE] <> null and [CALCIATORE] <> ""), 
    
        ColonnaMese = Table.AddColumn(EliminatiVuoti, "MESE", each MeseFoglio) 
    
        in ColonnaMese 
    
    in 
    
        DatiSingoloFoglio
    

    Query, scritta manualmente, con l'elenco dei mesi in forma "letterale" e "numerica" utilizzata per avere una tabella completa dei 12 mesi anche se non vi sono dati per un certo mese:

    let 
    
        Origine = Table.FromRows(Json.Document(Binary.Decompress(Binary.FromText("TY5LDsIwDETv4nUXFOiHZUJdK1Iao9RlQdT7X6NOExDL92Y8ckrQQgOEIRjHsDcJrsozWhu/4qZiMfFT6K5kXtF5PLE7Q6La7fOY2ygUHBT9Rr6mY74lXqXgQ3FFEVxsLGvtRRWL8E/k7wK//yr5v8k9q9kP", BinaryEncoding.Base64), Compression.Deflate)), let _t = ((type nullable text) meta [Serialized.Text = true]) in type table [#"MESE N" = _t, #"MESE LETTERA" = _t]), 
    
        Formati = Table.TransformColumnTypes(Origine,{{"MESE N", Int64.Type}, {"MESE LETTERA", type text}}) 
    
    in 
    
        Formati
    

    Query finale della tabella caricata nel foglio con i dati di riepilgo:

    let 
    
        Origine = Excel.CurrentWorkbook(), 
    
        SelezionaAreaDati = Table.SelectRows(Origine, each Text.Contains([Name], "AreaDati")), 
    
        RichiamaFunzioneFogli = Table.AddColumn(SelezionaAreaDati, "DatiFoglio", each FunzioneFogli([Content])), 
    
        RimosseColonne = Table.SelectColumns(RichiamaFunzioneFogli,{"DatiFoglio"}), 
    
        EspanseTabelleDatiFogli = Table.ExpandTableColumn(RimosseColonne, "DatiFoglio", {"CALCIATORE", "GOL", "MESE"}, {"CALCIATORE", "GOL", "MESE"}), 
    
        Formati = Table.TransformColumnTypes(EspanseTabelleDatiFogli,{{"GOL", Int64.Type}, {"MESE", Int64.Type}, {"CALCIATORE", type text}}), 
    
        RaggruppaCalciatoreMese = Table.Group(Formati, {"CALCIATORE", "MESE"}, {{"GOL", each List.Sum([GOL]), type nullable number}}), 
    
        MergeTabellaMesi = Table.NestedJoin(RaggruppaCalciatoreMese, {"MESE"}, MESI, {"MESE N"}, "MESI", JoinKind.FullOuter), 
    
        EspansaTabellaMesi = Table.ExpandTableColumn(MergeTabellaMesi, "MESI", {"MESE N", "MESE LETTERA"}, {"MESE N", "MESE LETTERA"}), 
    
        OrdinatiMesiNumero = Table.Sort(EspansaTabellaMesi,{{"MESE N", Order.Ascending}}), 
    
        RimosseColonneNonUtili = Table.RemoveColumns(OrdinatiMesiNumero,{"MESE", "MESE N"}), 
    
        PivotColonnaMeseLettera = Table.Pivot(RimosseColonneNonUtili, List.Distinct(RimosseColonneNonUtili[#"MESE LETTERA"]), "MESE LETTERA", "GOL", List.Sum), 
    
        RimosssiVuotiCalciatore = Table.SelectRows(PivotColonnaMeseLettera, each [CALCIATORE] <> null and [CALCIATORE] <> "") 
    
    in 
    
    RimosssiVuotiCalciatore
    

    ciao

    La risposta è stata utile?

    0 commenti Nessun commento
  3. Anonimo
    2024-11-17T09:10:49+00:00

    Ciao a tutti,

    grazie mille a tutti per aver trovato delle soluzioni.

    Non sono però così esperto come voi e mi sono un po' perso....

    Potete inviarmi il file definitivo così provo a capire cosa avete fatto e lo riporto sul mio file?

    Grazie davvero a tutti!

    Angelo

    La risposta è stata utile?

    0 commenti Nessun commento
  4. Gianfranco55 25,270 Punti di reputazione Moderatore volontario
    2024-11-17T09:32:16+00:00

    ciao

    scusa le chiacchere

    qualche volta ci confrontiamo e creiamo una leggera confusione

    https://www.dropbox.com/scl/fi/lp96x8qbcn0pexp5thrm5/somma-piu-fogli-con-condizioni.xlsx?rlkey=7r3fz4fy04ygxn8dpb32bhpeq&dl=0 che utilizza le formule di Eleuterio

    un consiglio

    non usare celle unite excel mal le digerisce

    La risposta è stata utile?

    0 commenti Nessun commento