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]