Come gestire i valori duplicati usando la funzione LARGE ()?


3

Voglio calcolare i primi 3 risultati con valori duplicati ma nomi diversi.

Dati di esempio:

Name           score
A              40
B              55
C              37
D              55            

Risultato atteso:

order        score     name
1            55        B
1            55        D
3            40        A

Si prega di formattare la domanda in modo che sia comprensibile. Utilizzare il blocco CODICE per inserire una tabella. E mostra i risultati attesi e cosa hai già provato.
Kevin Anthony Oppegaard Rose,


Cordiali saluti Ho appena aggiornato la mia risposta per mostrare come randomizzare l'ordine dei nomi per punteggi identici.
robinCTS,

Risposte:


3

È possibile ottenere ciò con una tabella pivot e con la RANK()funzione.

Passaggio 1: preparazione della tabella pivot

  1. Aggiungi una colonna (ad es. In C) ai tuoi dati, con la seguente formula: =RANK(B2,$B$2:$B$5)-> questo mostrerà come si B2posiziona tra tutti i valori in$B$2:$B$5

inserisci qui la descrizione dell'immagine

  1. Seleziona i tuoi dati (inclusa la colonna di rango) e fai clic su Inserisci> Tabella pivot
  2. Inserisci i campi "Punteggio" e "Nome" come righe e il campo "Punteggio" come valori come mostrato

inserisci qui la descrizione dell'immagine

  1. Formattare la tabella pivot facendo clic sulle seguenti voci di menu:

inserisci qui la descrizione dell'immagine

Ora dovresti avere qualcosa di simile a questo:

inserisci qui la descrizione dell'immagine


Passaggio 2: visualizzazione dei primi 3 valori (metodo A)

  1. Fai clic sulla freccia vicino al primo campo della tabella pivot (Rango)
  2. Seleziona "Filtri valore"
  3. Seleziona "Top 10"

inserisci qui la descrizione dell'immagine

  1. Immettere 3invece di 10avere i primi 3 valori

inserisci qui la descrizione dell'immagine

Ora dovresti avere qualcosa del genere:

inserisci qui la descrizione dell'immagine

Nota: con questo metodo, se più valori hanno lo stesso valore (come nei dati di esempio), verranno visualizzati più volte. Questo è il comportamento predefinito della tabella pivot e delle funzionalità "Top X".

Se non vuoi 4 righe, ma solo 3, vedi il metodo B


Passaggio 2: visualizzazione dei primi 3 valori (metodo B)

  1. Fai clic sulla freccia vicino al primo campo della tabella pivot (Rango)
  2. Seleziona "Etichetta filtri"
  3. Seleziona "Meno di o uguale a" e inserisci 3quando richiesto

inserisci qui la descrizione dell'immagine

Nota: fai attenzione con questo metodo: se ci sono 5 valori con grado 1, ci saranno 5 righe. Il secondo valore più alto avrà quindi il grado 6 e non verrà visualizzato (è maggiore di 3). Quindi non è più tra i primi 3, ma penso che valga la pena menzionare questo metodo, poiché in alcuni casi potrebbe funzionare.


Quando i dati cambiano, non dimenticare di aggiornare la tabella pivot!


Spero che funzioni esattamente come mi serve! molte grazie! Che Allah benedica te e la tua conoscenza!
Dimah,

1

inserisci qui la descrizione dell'immagine

Per ottenere il punteggio, nella cella F3 scrivi questa formula e compila 3 righe verso il basso:

=LARGE(B$3:B$6,ROWS(F$3:F3)).

Per ottenere il nome, nella cella G3 scrivere questa formula di matrice e compilare:

NB: Termina questa formula di matrice con Ctrl + Maiusc + Invio.

{=IFERROR(INDEX(A$3:A$6,SMALL(IF(B$3:B$6=F3,ROW(B$3:B$6)-ROW(F$3)+1),COUNTIF(F$3:F3,F3))),"")}

Per ottenere l'ordine, nella cella E3 scrivi questa formula e compila:

=IFERROR(RANK(LARGE(B$3:B$6,ROWS(E$3:E3)),$F$3:$F$6),"")

Come funziona la formula:

  • La formula in F3 trova i primi 3 punteggi.
  • La formula in G3 trova i nomi per i primi 3 punteggi, confronta il punteggio dalla colonna F con la colonna B e estrae il nome dalla colonna A
  • La formula in E3 trova il ranking per i primi 3 punteggi.

La formula nella cella E3 dovrebbe essere ROWS(E$3:E3), invece di ROWS(E$3:E6). Inoltre, non capisco perché non scrivi semplicemente =RANK(F3;$F$3:$F$6)in E3?
piko,

@piko, in effetti ho calcolato tutto nel contesto dei punteggi TOP 3 che il motivo principale per cui ho calcolato diversamente. Modificato in righe ($ E3: E3) ,, era solo un errore di battitura. Grazie.
Rajesh S,

Bene, sto solo dicendo che la RANKfunzione fa lo stesso, senza la necessità di aggiungere LARGEo ROWS. Questa è complessità inutile.
piko,

@piko, Sì, sì, puoi scrivere anche solo il grado, ma dal momento che ho chiuso con Large, ho usato solo così. Per mantenere la somiglianza in tutte e 3 le formule.
Rajesh S,

RajeshS Sono d'accordo con @piko che usare la RANK()formula più semplice è molto meglio. La G3formula è abbastanza difficile da comprendere per gli utenti inesperti senza complicare inutilmente nessuna delle altre formule. Vedo quello che stai dicendo, però. (Nota che mentre la tua G3formula è il modo "standard" di fare i punteggi migliori 3 e può essere più facilmente estesa a più di 3 semplicemente compilando, la mia formula è più facile da capire per i principianti :-)) Parlando di complicare troppo il formule, potrebbe essere meglio se IFERROR()fosse escluso dalle formule e una nota aggiunta spiegasse il suo ...
robinCTS

1

Questo può essere fatto con solo due semplici formule per le colonne ordere score, più una terza, leggermente più complicata, per la namecolonna.

Imposta un foglio di calcolo come il seguente:

Schermata del foglio di calcolo

Quindi array multi-cella: inserisci queste formule negli intervalli specificati (ricordando di escludere l'ambiente circostante {e }):

Formula 1 ( D2:D4):

{=RANK(E2:E4,E2:E4)}

Formula 2 ( E2:E4):

{=LARGE(B2:B5,{1;2;3})}

Formula 3 ( F2:F4):

{=INDEX(A:A,10^5-MOD(LARGE(10^5*B2:B5+10^5-ROW(B2:B5),{1;2;3}),10^5))}

Per passare dai primi 3 risultati ai primi N in cui N è un numero elevato 10, ad esempio, anziché utilizzare un array hardcoded per i ranghi {1;2;3;4;5;6;7;8;9;10}, utilizzare quanto segue:

ROW(INDEX(X:X,1):INDEX(X:X,10))

Mentre funziona così com'è, è preferibile sostituire X:Xcon la colonna in cui è inserita la formula. In questo modo la formula non si interromperà se la colonna Xviene eliminata.

Questa è una soluzione molto migliore di quella onnipresente e più corta ROW(INDIRECT("1:10"))in quanto non volatile.


Spiegazioni formula:

Le prime due formule sono abbastanza semplici.

La versione predefinita della terza formula è la seguente:

=
INDEX(
  (A:A),
  10^5-
  MOD(
    LARGE(
      10^5*B2:B5+10^5-ROW(B2:B5),
      {1;2;3}
    ),
    10^5
  )
)

La formula funziona modificando i punteggi in modo che contengano anche il complemento a dieci dell'indice di riga. Quindi, dopo aver LARGEselezionato il punteggio modificato appropriato, l'indice viene estratto e utilizzato con INDEX()per ottenere il nome corrispondente al punteggio selezionato.

Passare attraverso la formula F3dovrebbe rendere più chiaro quanto sopra:

  • 10^5*B2:B5
    10^5*{40;55;37;55}
    {4000000;5500000;3700000;5500000}, i punteggi in scala
  • 10^5-ROW(B2:B5)
    10^5-{2;3;4;5}
    {99998;99997;99996;99995}, il complemento dei dieci dei numeri di riga dei punteggi
  • {4000000;5500000;3700000;5500000}+{99998;99997;99996;99995}
    {4099998;5599997;3799996;5599995}, i punteggi "modificati"
  • LARGE({4099998;5599997;3799996;5599995},{1;2;3})
    {5599997;5599995;4099998}, i primi tre punteggi modificati
  • 10^5-MOD({5599997;5599995;4099998},10^5)
    10^5-{99997;99995;99998}
    {3;5;2}, i numeri di riga dei primi tre punteggi
  • INDEX(A:A,{3;5;2})
    {B;D;A}
    Ddato che siamo nella seconda cella della formula immessa da più celle

Appunti:

  • La formula predefinita funziona effettivamente se inserita.
  • Le parentesi intorno (A:A)sono necessarie per forzare il A:Arimanere sulla propria linea.
  • Per punteggi identici, la formula restituisce i nomi in ordine di riga crescente. La formula può essere modificata per restituire i nomi in ordine decrescente usando il numero di riga normale anziché il complemento di dieci del numero di riga quando si modificano i punteggi:
{=INDEX(A:A,MOD(LARGE(10^5*B2:B5+ROW(B2:B5),{1;2;3}),10^5))}
  • È anche possibile randomizzare l'ordine di punteggi identici generando un punteggio modificato con un numero casuale tra il punteggio e il numero di riga.

HEY signore ... la formula dell'indice {= INDICE (A: A, MOD (LARGE (10 ^ 5 * B2: B5 + ROW (B2: B5), {1; 2; 3}), 10 ^ 5))} Non funziona! mi dà una cella vuota ma quando faccio clic su di essa la formula viene visualizzata sulla barra della formula. Premo Ctrl + Maiusc + Invio. La tabella pivot funziona. Grazie mille Ma sono interessato alla formula dell'indice .... ho bisogno del tuo aiuto
Dimah,

@Dimah Siamo spiacenti. Il {e il }è proprio lì per ricordare che la formula deve essere immessa nell'array. Non è necessario copiarli o rimuoverli quando si incolla la formula. Quindi, con le celle B2:B5selezionate e B2attive, entra =INDEX(A:A,10^5-MOD(LARGE(10^5*B2:B5+10^5-ROW(B2:B5),{1;2;3}),10^5))in B2e quindi premi Ctrl+ Shift+ Enter. (Per inserire la formula e mantenere attiva la selezione, fai clic sulla barra della formula nella parte superiore dello schermo e incolla la formula lì.)
robinCTS
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.