Excel Forum Per condividere esperienze su Microsoft Excel

Formula Aggrega & Ordina con doppioni

  • Messaggi
  • ABCDEF@Excel
    00 28/04/2020 17:13
    Non sono bravo con Aggrega, non conosco quanti dati avrò in H2:H100
    Ex in H2=0, in H3=70, in H4=70, in H5=100, in H6=70 ecc ecc con vari zero

    Dovrei ottenere 70,70,70,100,vuota,vuota ecc ecc
    Se possibile anche all'incontrario, 100,70,70,70
    Grazie in anticipo
  • ONLINE
    DANILOFIORINI
    Post: 719
    Registrato il: 15/01/2016
    Città: ROMA
    Età: 51
    Utente Senior
    2016
    00 28/04/2020 20:18
    Ciao
    uno dei modi

    per l'ordine crescente

    =SE.ERRORE(INT(AGGREGA(15;6;($H$2:$H$100+RIF.RIGA($A$2:$A$100)/10^5)/($H$2:$H$100>0);RIF.RIGA(A1)));"")


    per l'ordine decrecente

    =SE.ERRORE(INT(AGGREGA(14;6;($H$2:$H$100+RIF.RIGA($A$2:$A$100)/10^5)/($H$2:$H$100>0);RIF.RIGA(A1)));"")


    P.S. Considera che questa formula è specifica per questo caso se per caso dovessi estrarre dei dati associati a questi valori bisogna percorrere una strada diversa

    Saluti
    [Modificato da DANILOFIORINI 28/04/2020 22:36]
  • ABCDEF@Excel
    00 29/04/2020 00:01
    Grazie mille (mi serve col VBA)
    Pensavo ad un SE.ERRORE(INDICE($H$2:$H$100;AGGREGA(15;6;...???

    Penso che INT sia dovuto al 10^5, mà non capisco il significato?
    10^5 == 10 diviso 5 oppure al 10 al "quadrato", oppure ???
    Ps. Come crei il segno ^ (nelle formule)?
    [Modificato da ABCDEF@Excel 29/04/2020 15:02]
  • ONLINE
    DANILOFIORINI
    Post: 723
    Registrato il: 15/01/2016
    Città: ROMA
    Età: 51
    Utente Senior
    2016
    00 30/04/2020 13:57
    Ciao
    con VBA non so darti indicazioni...per quanto riguarda la formula non è altro che la funzione PICCOLO che però restituirebbe in caso di celle vuote o zero i dati errati quindi togliamo il SE.ERRORE (e riduco il range a 10 per far vedere le varie restituzioni) resta

    INT(AGGREGA(15;6;($B$2:$B$10+RIF.RIGA($A$2:$A$10)/10^5)/($B$2:$B$10>0);RIF.RIGA(A1)))

    devo costruire una matrice da passare a AGGREGA e nella fattispecie alla funzione PICCOLO (15) quindi prendo la matrice dei dati $B$2:$B$10 e gli sommo un valore infinitesimale che calcolo con

    RIF.RIGA($A$2:$A$10)/10^5) 10^5 corrisponde a 100000 (il segno di potenza si fa con ALT+ì ) ottenendo

    {0,00002.70,00003.70,00004.100,00005.70,00006.0,00007.90,00008.0,00009.80,0001}

    ora se passo questa matrice a PICCOLO (il 15 di AGGREGA)

    ottengo sempre i valori che corrispondono agli zeri a cui ho sommato il valore infinitesimale quindi li dobbiamo escludere dalla matrice dividendo il tutto per ($B$2:$B$10>0) cosi quando

    ($B$2:$B$10+RIF.RIGA($A$2:$A$10)/10^5) viene diviso per ($B$2:$B$10>0) in corrispondenza di celle vuote o zero ottengo un errore (un numero diviso zero restituisce errore ) ottenendo questa matrice

    {#DIV/0!.70,00003.70,00004.100,00005.70,00006.#DIV/0!.90,00008.#DIV/0!.80,0001} ora questa matrice la passiamo ad AGGREGA che col 6 ignora gli errori e li ordina correttamente quindi per il primo valore otterrai {70,00003} e a seguire gli altri dal più piccolo al più grande quindi metto tutto dentro INT in maniera da eliminare la parte decimale che avevamo creato in precedenza restituendo la lista ordinata correttamente

    Questa formula lavora direttamente sui numeri della matrice iniziale se come hai scritto volevi interrogare il Range lavorando con INDICE si deve percorrere una strada diversa e la formula diventa

    =SE.ERRORE(INDICE($B$2:$AB$10;CONFRONTA(INDICE(AGGREGA(15;6;($B$2:$B$10+RIF.RIGA($A$2:$A$10)/10^5)/($B$2:$B$10>0);RIF.RIGA(A1));;);INDICE(($B$2:$B$10+(RIF.RIGA($B$2:$B$10)/10^5));;);0));"")

    Se evidenzi le varie parti e fai f9 non è difficile da capire il procedimento è pressochè quello esposto sopra adattato a un INDICE/CONFRONTA in quanto andando a lavorare su un INDICE per farci restituire i dati dobbiamo calcolare il numero di riga
    Nel file che allego le formule con quache variante che danno tutte lo stesso risultato
    [Modificato da DANILOFIORINI 30/04/2020 14:02]
  • ABCDEF@Excel
    00 30/04/2020 14:11
    Di nuovo Grazie mille
    Cercherò di "capire", quanto hai scritto