Condividi tramite

Unire due funzioni sviluppate con excel 365

Antonino Messina 45 Punti di reputazione
2025-08-04T08:08:30.3666667+00:00

Buongiorno a tutti,

partendo da una tabella di base che contiene un campo di testo in cui vi sono per ogni riga delle etichette separate da ; ho proceduto allo split delle medesime ottenendo la tabella corretta con funzioni scritte in excel 365.

Su questa tabella ho poi fatto l'aggregazione considerando i divesi campi ottenuti e la variabile quantitativa (valore). Il mio obiettivo adesso è quello di integrare le due funzioni in una sola e, quindi, di mostrare solo la tabella risultato.

Metto il link del file

https://1drv.ms/x/c/dd405b0d5a6097c5/EZxgahuO5cNDm4HirUWdqogBkRxmpnPqltUtmYv-M1VOlQ?e=ABIkyQ

Grazie.

Antonio

Microsoft 365 e Office | Excel | Per l'istruzione | Windows
0 commenti Nessun commento

Risposta accettata dall'autore della domanda

  1. Eleuterio Tedeschi 18,590 Punti di reputazione Moderatore volontario
    2025-08-04T10:05:40.93+00:00

    Un modo:
    =LET(tbl;A2:.F1000;tble;REDUCE(A1:E1;ESCLUDI(REDUCE("";SEQUENZA(RIGHE(tbl));LAMBDA(a;r;LET(i;LAMBDA(c;INDICE(tbl;r;c));s;DIVIDI.TESTO(i(2);;";");l;i(1)&"§"&s&"§"&i(3)&"§"&i(4)&"§"&i(5)/RIGHE(s);STACK.VERT(a;l))));1);LAMBDA(a;r;STACK.VERT(a;DIVIDI.TESTO(r;"§"))));v;INCLUDI(tble;;-1);RAGGRUPPAPER(ESCLUDI(tble;;-1);SE.ERRORE(--v;v);SOMMA;3;0))

    Ciao.

    La risposta è stata utile?

    1 persona ha trovato utile questa risposta.

3 risposte aggiuntive

Ordina per: Più utili
  1. casanmaner 350 Punti di reputazione
    2025-08-05T11:53:18.4233333+00:00

    Ciao,

    sempre tramite Power Query in modo più semplificato (viene estratto il primo nome del cliente prima del delimitatore ";") e richiede meno passaggi:

    let
        Origine = Excel.CurrentWorkbook(){[Name="Tabella1"]}[Content],
        Formati = Table.TransformColumnTypes(Origine,{{"Tipo_Cliente", type text}, {"Cliente", type text}, {"Prodotto", type text}, {"Area", type text}, {"Valore", Int64.Type}, {"Peso", type number}}),
        TestoEstrattoPrimaDelDelimitatore = Table.TransformColumns(Formati, {{"Cliente", each Text.BeforeDelimiter(_, ";"), type text}}),
        RaggruppateRighePerValore = Table.Group(TestoEstrattoPrimaDelDelimitatore, {"Tipo_Cliente", "Cliente", "Prodotto", "Area"}, {{"Valore", each List.Sum([Valore]), type nullable number}}),
        OrdinateRigheTipoClienteAreaValore = Table.Sort(RaggruppateRighePerValore,{{"Tipo_Cliente", Order.Ascending}, {"Area", Order.Ascending}, {"Valore", Order.Ascending}})
    in
        OrdinateRigheTipoClienteAreaValore
    
    
    

    Ciao

    La risposta è stata utile?

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

  2. IlirU 2,251 Punti di reputazione Moderatore volontario
    2025-08-05T07:59:31.1566667+00:00

    Immagine dell'utente

    Buona mattina,

    Io avrei utilizzato questa formula nella cella M1:

    =GROUPBY(HSTACK(A1:A11; TEXTSPLIT(B1:B11; ";"); C1:D11); E1:E11; SUM; 3; 0)

    Si tratta di una formula molto più breve e fornisce gli stessi risultati che hai fornito nel tuo file.

    Spero che la formula ti sia utile.

    Ciao.

    La risposta è stata utile?

    1 persona ha trovato utile questa risposta.

  3. casanmaner 350 Punti di reputazione
    2025-08-05T11:47:49.6433333+00:00

    Ciao,

    se ho inteso il risultato desiderato provo a proporre una alternativa con l'utilizzo di Power Query.

    let
        Origine = Excel.CurrentWorkbook(){[Name="Tabella1"]}[Content],
        Formati = Table.TransformColumnTypes(Origine,{{"Tipo_Cliente", type text}, {"Cliente", type text}, {"Prodotto", type text}, {"Area", type text}, {"Valore", Int64.Type}, {"Peso", type number}}),
        AggiuntaColonnaIndice = Table.AddIndexColumn(Formati, "Indice", 1, 1, Int64.Type),
        SuddivisaColonnaClientePerRiga = Table.ExpandListColumn(Table.TransformColumns(AggiuntaColonnaIndice, {{"Cliente", Splitter.SplitTextByDelimiter(";", QuoteStyle.Csv), let itemType = (type nullable text) meta [Serialized.Text = true] in type {itemType}}}), "Cliente"),
        RimossiDuplicatiIndice = Table.Distinct(SuddivisaColonnaClientePerRiga, {"Indice"}),
        RaggruppateRighePerValore = Table.Group(RimossiDuplicatiIndice, {"Tipo_Cliente", "Cliente", "Prodotto", "Area"}, {{"Valore", each List.Sum([Valore]), type nullable number}}),
        OrdinateRigheTipoClienteAreaValore = Table.Sort(RaggruppateRighePerValore,{{"Tipo_Cliente", Order.Ascending}, {"Area", Order.Ascending}, {"Valore", Order.Ascending}})
    in
        OrdinateRigheTipoClienteAreaValore
    
    

    Naturalmente l'intervallo deve essere trasformato in una tabella (che nel mio caso è stata nominata Tabella1)

    La risposta è stata utile?

    0 commenti Nessun commento

Risposta

Le risposte possono essere contrassegnate come "Accettata" dall'autore della domanda e "Consigliata" dai moderatori, in modo da consentire agli utenti di sapere che la risposta ha risolto il problema dell'autore.