Excel Forum Per condividere esperienze su Microsoft Excel

Conta valori univoci in base a valore ripetuto in altra colonna

  • Messaggi
  • OFFLINE
    BioEnergy
    Post: 12
    Registrato il: 12/08/2015
    Utente Junior
    2013
    00 22/09/2017 21:55
    Ciao a tutti,

    Avrei da contare i valori univoci (numeri e testo) nella colonna E con anche celle vuote. Questo SE nelle celle della colonna A è presente o meno un dato testo.

    Per i valori univoci ero arrivato a questa formula, ma non saprei come inserire la condizione.

    =MATR.SOMMA.PRODOTTO((E2:E7000<>"")/CONTA.SE(E2:E7000;E2E7000&""))


    Grazie
    [Modificato da BioEnergy 22/09/2017 22:00]
  • OFFLINE
    DANILOFIORINI
    Post: 136
    Registrato il: 15/01/2016
    Città: ROMA
    Età: 51
    Utente Junior
    2016
    00 22/09/2017 22:30
    Buonasera
    allega un file con u po di dati e il risultato da ottenere scritto a mano
  • OFFLINE
    BioEnergy
    Post: 12
    Registrato il: 12/08/2015
    Utente Junior
    2013
    00 22/09/2017 23:32
    Grazie dell'interessamento. Allego un estratto che dovrebbe essere esplicativo della formula che necessito.

  • OFFLINE
    xam99
    Post: 785
    Registrato il: 18/02/2010
    Città: MILANO
    Età: 28
    Utente Senior
    excel 2003 / 2007
    00 23/09/2017 15:24
    Ciao.
    in C2 foglio categorie:
    formula matriciale:

    =SOMMA(SE(A2=Dati!$A$2:$A$5000;1/CONTA.PIÙ.SE(Dati!$A$2:$A$5000;A2;Dati!$B$2:$B$5000;Dati!$B$2:$B$5000)))

    xam
    [Modificato da xam99 23/09/2017 15:25]
    -------------------------------
    excel 2003 ufficio / 2007 casa
  • OFFLINE
    BioEnergy
    Post: 13
    Registrato il: 12/08/2015
    Utente Junior
    2013
    00 23/09/2017 16:10
    Grazie Xam99,
    ho provato a inserire la formula in C2, ma restituisce il valore 1 invece di 3
  • OFFLINE
    xam99
    Post: 786
    Registrato il: 18/02/2010
    Città: MILANO
    Età: 28
    Utente Senior
    excel 2003 / 2007
    00 23/09/2017 16:51
    Ciao,
    è una formula matriciale da inserire con la combinazione di tasti:
    CTRL+SHIFT+ENTER (INVIO)
    xam
    -------------------------------
    excel 2003 ufficio / 2007 casa
  • OFFLINE
    Ulisse1990
    Post: 94
    Registrato il: 11/07/2015
    Età: 33
    Utente Junior
    office 2013-2016
    00 23/09/2017 17:33

    Buona sera

    una alternativa

    c2=SOMMA(SE(FREQUENZA(SE(Dati!$A$2:$A$7000<>"";CONFRONTA(Dati!$A$2:$A$7000;Dati!$A$2:$A$7000;0));RIF.RIGA(Dati!$A$2:$A$7000)-RIF.RIGA(Dati!$A$2)+1);1))

    control+shift+enter


    [Modificato da Ulisse1990 23/09/2017 17:36]
  • OFFLINE
    BioEnergy
    Post: 14
    Registrato il: 12/08/2015
    Utente Junior
    2013
    00 23/09/2017 18:34
    Ok, adesso funziona... Grazie [SM=x423024]
    Ho provato ad adattarla al documento originale, 2 note:
    - in 2 colonne (su 5) talvolta mi restituisce errore #DIV/0; però ho visto che mi dà l'errore anche se per data categoria le celle non sono tutte vuote
    - tra poco mi si fonde il PC ed excel è impallato a calcolare; in effetti le categorie sono più di 80 ed i record per colonna oltre 40.000
    Mi sa che conviene usare una macro avviandola ogni tot per aggiornare i valori, ma inizia a diventare complicato; in base all'excel che ho sarebbe:

    se nella colonna A in 'Categorie!' da A2 in giù (fino a cella con valore, ovvero la categoria), nelle celle D2, E2, G2, H2, I2 aggiornare il calcolo di cui sopra in riferimento alla colonna A in 'Dati!' da A2 in giù (fino a cella con valore, ovvero dove ci sono le categorie ripetute) e colonne D,E,G,H,I sempre in 'Dati!' (dove ci sono le celle non vuote da contare univoche).
    Nel caso allego l'excel con i riferimenti completi e casi con celle tutte vuote, numeri o testo.

    Mi sparo... [SM=x423030]




    [Modificato da BioEnergy 23/09/2017 20:08]
  • OFFLINE
    xam99
    Post: 787
    Registrato il: 18/02/2010
    Città: MILANO
    Età: 28
    Utente Senior
    excel 2003 / 2007
    00 24/09/2017 08:29
    Ciao
    per un macro che faccia come la formula matriciale deve intervenire
    un mago delle macro.
    Un saluto.
    xam
    -------------------------------
    excel 2003 ufficio / 2007 casa
  • OFFLINE
    patel45
    Post: 3.955
    Registrato il: 13/03/2012
    Città: LIVORNO
    Età: 78
    Utente Master
    2010
    00 24/09/2017 11:57
    ci potrei provare, ma non ho capito bene qual'è il risultato desiderato, lo puoi allegare ?

    ----------
    Win 10 - Excel 2010
    allega un file di esempio, guadagnerai tempo tu e lo farai risparmiare a chi ti aiuta
  • OFFLINE
    BioEnergy
    Post: 15
    Registrato il: 12/08/2015
    Utente Junior
    2013
    00 24/09/2017 13:48
    Ciao Patel45,
    nel mio post sopra ho allegato l'excel originale con i riferimenti delle celle in base a quanto ho scritto per la macro; per ogni colonna di interesse (D2,E2,G2,H2,I29) nel foglio Dati! ho messo varie combinazioni di valori e nelle rispettive nel foglio Categorie! ci sono i risultati in rosso attesi.

    Grazie xam99,
    non avevo calcolato tutto questo calcolo necessario. In fondo Excel la scrematura dei duplicati la fa in un attimo anche con tanti record; qui in fondo si tratta di contare i risultati univoci che si presentano se nella cella in A c'è un dato valore. Non so se sbaglio io per il #DIV/0, ma compare anche in alcune prove con il nuovo excel.
    Per la macro adesso provo a ricercare, di certo non sarò in grado di modificarla per adattarla a tutte le celle e colonne.

    Grazie Ulisse1990,
    il risultato veniva giusto in C2, però non riesco a capire come spostarla (con xam99 vedo chiaramente il riferimenti alla cella A2 e colonna B)
  • OFFLINE
    patel45
    Post: 3.956
    Registrato il: 13/03/2012
    Città: LIVORNO
    Età: 78
    Utente Master
    2010
    00 24/09/2017 14:09
    nel foglio dati non capisco i risultati della colonna D

    ----------
    Win 10 - Excel 2010
    allega un file di esempio, guadagnerai tempo tu e lo farai risparmiare a chi ti aiuta
  • OFFLINE
    BioEnergy
    Post: 16
    Registrato il: 12/08/2015
    Utente Junior
    2013
    00 24/09/2017 15:05
    Re:
    patel45, 9/24/2017 2:09 PM:

    nel foglio dati non capisco i risultati della colonna D



    Se ho capito, nel foglio Dati!:
    - per la catetoria1 i valori univoci nella colonna D sono A (che si ripete) e B, quindi 2
    - per la catetoria2 nella colonna D c'è solo A che si ripete, quindi 1
    - per la catetoria3 nella colonna D ci sono A, B e C, quindi 3

    In pratica è un elenco di contatti, in queste 4 colonne da cui vorrei contare gli univoci c'è di tutto: numeri, testo, solo celle vuote, ecc; talvolta i valori si ripetono nella colonna.
    La formula dovrebbe considerare le celle non vuote e restituire la conta degli univochi sulla base della categoria; quella di xam99 è il punto di partenza, non so se è omnicomprensiva di tutte le situazioni o c'è una soluzione con meno dispendio di calcolo.

    La macro finchè trova un valore nella colonna A nel foglio Categorie! (da A2), dovrebbe restituire i risultati dalle celle D2,E2,G2,H2, in giù andando a ricercare nelle rispettive colonne del foglio Dati! sempre fino all'ultima riga con valore.
    In tal modo se per caso aggiungessi una categoria non dovrei preoccuparmi di inserire formule; stessa cosa per gli intervalli nel caso di nuovi recordi.




  • OFFLINE
    BioEnergy
    Post: 17
    Registrato il: 12/08/2015
    Utente Junior
    2013
    00 24/09/2017 17:23
    Macro permettendo, ho trovato ed adattato al foglio la seguente matriciale che mi riporta i valori corretti e sembra non intasarmi la CPU; in D2 e si trascina sotto e a destra:

    =SOMMA(SE(FREQUENZA(SE((Dati!$A$2:$A$50000=$A2);CONFRONTA(Dati!D$2:D$50000;Dati!D$2:D$50000;0);"");SE((Dati!$A$2:$A$50000=$A2);CONFRONTA(Dati!D$2:D$50000;Dati!D$2:D$50000;0);""))>0;1))

    L'unico (spero) problema è che non contempla le celle vuote, dove presenti mi restituisce errore di valore non disponibile #N/D.
  • OFFLINE
    xam99
    Post: 788
    Registrato il: 18/02/2010
    Città: MILANO
    Età: 28
    Utente Senior
    excel 2003 / 2007
    00 24/09/2017 17:28
    Ciao
    per visualizzare errore #N/D si può provare questa formula:

    =se(val.errore( TUA FORMULA );0; TUA FORMULA )

    sostituisci la parte TUA FORMULA con la tua formula.
    xam
    [Modificato da xam99 24/09/2017 17:29]
    -------------------------------
    excel 2003 ufficio / 2007 casa
  • OFFLINE
    BioEnergy
    Post: 18
    Registrato il: 12/08/2015
    Utente Junior
    2013
    00 24/09/2017 18:01
    Ciao,
    fatto. Non cambia nulla nei risultati che già venivano calcolati; dove invece compariva l'errore ora compare sempre 0. C'è da gestire l'errore a monte con le celle vuote credo. Tipo &"" o <>"" da qualche parte per l'intervallo nella colonna D.
    [Modificato da BioEnergy 24/09/2017 18:06]
  • OFFLINE
    xam99
    Post: 789
    Registrato il: 18/02/2010
    Città: MILANO
    Età: 28
    Utente Senior
    excel 2003 / 2007
    00 24/09/2017 18:56
    Ops
    è questa:

    =se(val.errore( TUA FORMULA );""; TUA FORMULA )

    xam
    -------------------------------
    excel 2003 ufficio / 2007 casa
  • OFFLINE
    BioEnergy
    Post: 19
    Registrato il: 12/08/2015
    Utente Junior
    2013
    00 24/09/2017 19:14
    Provato. Adesso le celle incriminate sono 'vuote'.
  • OFFLINE
    xam99
    Post: 790
    Registrato il: 18/02/2010
    Città: MILANO
    Età: 28
    Utente Senior
    excel 2003 / 2007
    00 24/09/2017 19:22
    Naturalmente dentro alle virgolette:

    =se(val.errore( TUA FORMULA );" ciao ciao "; TUA FORMULA )

    puoi mettere quello che vuoi.
    xam
    -------------------------------
    excel 2003 ufficio / 2007 casa
  • OFFLINE
    BioEnergy
    Post: 20
    Registrato il: 12/08/2015
    Utente Junior
    2013
    00 24/09/2017 19:36
    Sì, ma io devo calcolare gli univoci. L'errore mi viene perchè ci sono celle vuote nell'intervallo (ma ci sono anche valori) e la formula non le contempla.

    Stavo appunto leggendo online in casi simili come hanno gestito le celle vuote, tipo un'ulteriore condizione con <>"":

    =SOMMA(--(FREQUENZA(SE(B3:B10<>"";SE(C3:C10=G3;CONFRONTA(B3:B10;B3:B10;0)));RIF.RIGA(B3:B10)-RIF.RIGA(B3)+1)>0))
  • OFFLINE
    xam99
    Post: 791
    Registrato il: 18/02/2010
    Città: MILANO
    Età: 28
    Utente Senior
    excel 2003 / 2007
    00 24/09/2017 20:24
    In caso di errori per celle vuote nel file allegato ci sono queste 2 formule:

    =SE(( TUA FORMULA )<>0; TUA FORMULA ;"")

    =SE(VAL.ERRORE( TUA FORMULA );""; TUA FORMULA )

    e con celle vuote funziona tutto.
    xam
    -------------------------------
    excel 2003 ufficio / 2007 casa
  • OFFLINE
    BioEnergy
    Post: 22
    Registrato il: 12/08/2015
    Utente Junior
    2013
    00 24/09/2017 20:44
    Grazie xam99,
    dovrei avere trovato in contemporanea quella finale sull'esempio appena sopra senza passaggi; in D2 (ctrl+shift+invio) e si trascina sotto e a destra:

    =SOMMA(--(FREQUENZA(SE(Dati!D$2:D$50000<>"";SE(Dati!$A$2:$A$50000=$A2;CONFRONTA(Dati!D$2:D$50000;Dati!D$2:D$50000;0)));RIF.RIGA(Dati!D$2:D$50000)-RIF.RIGA(D$2)+1)>0))

    La macro è oltre le mie possibilità, ma è già un passo avanti. [SM=g27828]
  • OFFLINE
    xam99
    Post: 792
    Registrato il: 18/02/2010
    Città: MILANO
    Età: 28
    Utente Senior
    excel 2003 / 2007
    00 24/09/2017 21:50
    Ciao per la macro qui ci soo dei maghi.
    xam
    -------------------------------
    excel 2003 ufficio / 2007 casa
  • OFFLINE
    patel45
    Post: 3.957
    Registrato il: 13/03/2012
    Città: LIVORNO
    Età: 78
    Utente Master
    2010
    00 25/09/2017 18:07
    prova questa
    Sub B()
    With Sheets("Dati")
      LR = .Cells(.Rows.Count, "A").End(xlUp).Row + 1
      For col = 2 To 11
        conta = 0
        dr = 2
        buffer = ""
        cat = .Cells(1, 1)
        valore = .Cells(1, col)
          For RIGA = 2 To LR
            If .Cells(RIGA, 1) = cat Then
              If .Cells(RIGA, col) <> valore And .Cells(RIGA, col) <> "" Then
                If InStr(buffer, .Cells(RIGA, col)) = 0 Then
                  buffer = buffer & .Cells(RIGA, col)
                  conta = conta + 1
                  valore = .Cells(RIGA, col)
                End If
              End If
            Else
              Sheets("Categorie").Cells(dr, 1) = .Cells(RIGA, 1)
              If dr > 2 Then Sheets("Categorie").Cells(dr - 1, col) = conta
              dr = dr + 1
              cat = .Cells(RIGA, 1)
              valore = .Cells(RIGA, col)
                    If valore <> "" Then conta = 1 Else conta = 0
            End If
          Next
    '      Stop
      Next
    End With
    End Sub
    

    [Modificato da patel45 25/09/2017 20:14]

    ----------
    Win 10 - Excel 2010
    allega un file di esempio, guadagnerai tempo tu e lo farai risparmiare a chi ti aiuta
  • OFFLINE
    BioEnergy
    Post: 23
    Registrato il: 12/08/2015
    Utente Junior
    2013
    00 25/09/2017 20:37
    Grazie patel45,
    se ho ben capito posso dirti fin da subito che non è possibile avere valori uguali e consecutivi per tutte le colonne: un contatto potrebbe comparire in più province ad esempio, ma anche ordinare per stesse categorie in A porta ad avere alcune info di indirizzo che si ripetono ogni categoria.
    Intanto la copio per i riferimenti delle celle
  • OFFLINE
    BioEnergy
    Post: 24
    Registrato il: 12/08/2015
    Utente Junior
    2013
    00 25/09/2017 21:56
    Inserita nel foglio dopo aver visto che hai tolto il riferimento ai valori uguali consecutivi e... Funziona!!! [SM=g27811] Sopratutto ci mette un attimo anche se opera su tutte le colonne (meglio così).
    Ma c'è una così alta differenza in prestazioni tra macro e formule o è l'approccio usato per il calcolo?
    Comunque grazie! [SM=x423017]
  • OFFLINE
    patel45
    Post: 3.958
    Registrato il: 13/03/2012
    Città: LIVORNO
    Età: 78
    Utente Master
    2010
    00 26/09/2017 08:23
    con le macro si può fare tutto, basta trovare la giusta strategia ed in questo caso ho dovuto faticare, lo si vede dalla struttura piuttosto contorta. Con le formule si possono fare cose semplici e questo caso non lo è.

    ----------
    Win 10 - Excel 2010
    allega un file di esempio, guadagnerai tempo tu e lo farai risparmiare a chi ti aiuta