Media migliore

Salve,

nella tabella che vedete allegata, quale formula devo inserire nelle caselle MIGLIORE ID per fargli indicare quale è (colonna verde) in base al risultato (colonna gialla)?Designers.ods

Ciao se leggo il titolo mi chiedo qual’è la media migliore? Stabilito questo, credo basti un INDICE e CONFRONTA.

Suppongo che la media migliore sia la più alta. Si individua con la funzione GRANDE (se invece fosse il valore più basso, si userebbe con la stessa sintassi la funzione PICCOLO: per entrambe si indica l’area di ricerca e il numero d’ordine, per grandezza o piccolezza, del valore che si vuol trovare: nel nostro caso il più grande o il più piccolo))

=GRANDE(I$2:I$36;1)

Per individuare l’identificativo nella colonna verde si usa CONFRONTA, così:

=CONFRONTA(GRANDE(I$2:I$36;1);I$2:I$36;0)

Se, come immagino, la tabella che hai riprodotto è solo una selezione dell’originale, e quindi gli identificativi vanno da 1 a 90, CONFRONTA, scritta come sopra, basta da sola a individuare il soggetto migliore. Se invece la numerazione è discontinua come nella tabella, puoi immettere CONFRONTA come indice in una funzione CERCA.ORIZZ, così:

CERCA.ORIZZ(A2;A$2:A$36;CONFRONTA(GRANDE(I$2:I$36;1);I$2:I$36;0);0)

ULTERIORI INFORMAZIONI

CERCA.ORIZZ funziona in questo modo (studiala con la creazione guidata, che ti dà il nome dei quattro elementi della funzione):

prende un criterio di ricerca (nel nostro caso il valore della cella A2), e scorre la prima riga della matrice che gli viene indicata (nel nostro caso l’area A2:A36); se e quando in questa prima riga trova il criterio di ricerca, si sposta in giù di quante righe gli prescrive l’indice (nel nostro caso la funzione CONFRONTA) e riporta il valore che trova nella cella di arrivo. Lo zero scritto come Ordinato gli prescrive di cercare il valore esatto del criterio di ricerca; se invece ci fosse 1, in mancanza di una corrispondenza precisa si accontenterebbe del valore più prossimo, ma inferiore, al criterio di ricerca (e nella prima riga della matrice i valori dovrebbero essere disposti in ordine crescente).

Come probabilmente hai già capito, qui abbiamo applicato CERCA.ORIZZ in modo un po’ eterodosso, perché ordinariamente la matrice dovrebbe avere più di una colonna, mentre qui si limita alla A. Questa funzione, e la sua gemella CERCA.VERT che funziona allo stesso modo ma girata di 90°(scorre la prima colonna della matrice e si sposta sulle colonne a destra) sono utilissime ogni qual volta si debbano trascrivere alcuni o molti dati, in qualsiasi ordine, da una tabella ad un’altra.

Riguardo al tuo problema del 3°, 4° e 5° posto, quando più ID hanno lo stesso valore, GRANDE assegna a tutti lo stesso posto, e di conseguenza anche CERCA.ORIZZ si ferma al primo che trova. Se i tuoi dati lo consentono, potresti aggirare l’ostacolo in questo modo:

aggiungi dopo la media una colonna in cui scrivi una serie di valori crescenti o decrescenti piccolissimi (molto inferiori al numero di decimali con cui esprimi la media, in modo che anche il valore più grande non influisca sul valore arrotondato della media), ad es. 0,0000000000001, 0,0000000000002,…; poi in una seconda colonna aggiungi o sottrai alla media di ogni ID il valore infinitesimo che hai scritto nella colonna precedente. Quindi imposti le funzioni GRANDE e CONFRONTA su quest’ultima colonna. Siccome gli infinitesimi sono tutti diversi, esse non troveranno più due valori uguali, e quindi ti renderanno visibili tutti gli ID; continueranno invece ad apparire uguali le tue medie, perché l’infinitesimo aggiunto o sottratto viene mascherato dall’arrotondamento.

Se la mia risposta ti ha aiutato, votala con :heavy_check_mark: (qui a sinistra)

perfetto, funziona! Grazie.

Grazie mille R.C. funziona. La tabella è proprio discontinua quindi ho utilizzato la seconda istruzione, adesso vedo di analizzarla per vedere se capisco come lavora, perché alla prima occhiata proprio non l’ho capito! :slight_smile:

Solo una cosa, vedendo la formula ho capito che è il valore più alto di I2-I36 si indica con il parametro K della formula GRANDE, se si imposta 2, rileva la 2° posizione. Così mi ho modificato la tabella risposta MIGLIODE ID con i 5 migliori in ordine dal più alto in giù, però ci sono il 3°, 4° e 5° che hanno lo stesso valore, però la formula che restituisce l’ID corrispondente mi da sempre il valore del primo che trova. Come si può evitare questo errore?

Guarda la risposta modificata.

Ciao. Senza nulla togliere alla soluzione di R.C., se hai libreoffice 7 si può semplificare così: in D40 da trascinare in basso metti

=GRANDE($I$2:$I$36;RIF.RIGA(A1))

e in E40, sempre da tirare in basso

=AGGREGA(15;6;(RIF.RIGA($I$2:$I$36)-1)/($I$2:$I$36=D40);CONTA.SE($D$40:D40;D40))-1

Oppure se hai una versione precedente alla 7, al posto della formula con AGGREGA puoi usare la seguente formula matriciale

=PICCOLO(SE($I$2:$I$36=D40;RIF.RIGA($I$2:$I$36)-1);CONTA.SE($D$40:D40;D40))-1

Questa formula va inserita in E40 e confermata con la combinazione di tasti ctrl+maiuscolo+invio (e non colo solo invio) e copita e incollata sotto.

media migliore.ods