Excel: come mostrare i primi 3 "vincitori" per età e sesso?


1

Vorrei usare Excel per gestire i dati per una maratona. La maratona raggruppa i vincitori di agee genderin a categorye assegna premi dal primo al terzo posto in ciascuno category.

Excel può essere utilizzato per determinare i vincitori in modo dinamico, inserendo i dati in un singolo foglio di lavoro e facendo in modo che i risultati vengano automaticamente calcolati e mostrati in un altro foglio di lavoro?

Ho un singolo foglio di lavoro che contiene i seguenti dati per ogni riga:

name, age, gender, age category, overall rank

Sono aperto agli approcci basati su funzioni VBA ed Excel. Grazie!

Risposte:


2

Se si desidera aggiornare il foglio di lavoro2 quando i dati nel foglio di lavoro1 vengono modificati, è possibile utilizzare VBA per creare una pagina risultante che viene aggiornata dinamicamente.

  • Nella scheda sviluppatore fai clic su Visual Basic.
  • Espandere la cartella Oggetti di Microsoft Excel e visualizzare il codice per Sheet1
  • Crea una nuova funzione chiamata:

    Private Sub Worksheet_ChangeByVal Target As Range)
    EndSub
    

Questa funzione viene chiamata ogni volta che i dati nel foglio di lavoro1 vengono modificati.

Per aggiornare i dati in base alla colonna delle classifiche e fare queste assunzioni:
I dati sono all'interno di queste colonne Nome: colonna A, Età: colonna B, Genere: colonna C, Categoria: colonna D, Classifica generale: colonna E

All'interno del sotto-confronto Worksheet_Change il valore nella colonna E, la colonna di classifica e trasferire il contenuto della riga se il concorrente si è piazzato nelle prime quattro posizioni.

'If data is changed within column 5 (ranking column), repopulate worksheet2
If Target.Column = 5 Then
    'Remove all of the old rows except the header
    Sheets(2).Rows("2:" & CStr(Sheets(2).UsedRange.Rows.Count)).EntireRow.Delete

    'For each row on worksheet1 check if the value in column "E", if the ranking column is less than 4, if it is copy the row onto worksheet2
    Dim rowCounter As Integer: rowCounter = 1
    For i = 1 To Sheets(1).UsedRange.Rows.Count Step 1
        If (Sheets(1).Range("E" & CStr(i)).Value < 4 And Sheets(1).Range("E" & CStr(i)).Value <> "") Then
            Sheets(2).Range("A" & CStr(rowCounter + 1)).Value = Sheets(1).Range("A" & CStr(i)).Value
            Sheets(2).Range("B" & CStr(rowCounter + 1)).Value = Sheets(1).Range("B" & CStr(i)).Value
            Sheets(2).Range("C" & CStr(rowCounter + 1)).Value = Sheets(1).Range("C" & CStr(i)).Value
            Sheets(2).Range("D" & CStr(rowCounter + 1)).Value = Sheets(1).Range("D" & CStr(i)).Value
            Sheets(2).Range("E" & CStr(rowCounter + 1)).Value = Sheets(1).Range("E" & CStr(i)).Value
            rowCounter = rowCounter + 1
        End If
    Next i
End If

Inserire qui un algoritmo di ordinamento, se necessario, dopo la migrazione dei dati.

Se hai bisogno di maggiori dettagli o aiuto con l'ordinamento, per favore fatemelo sapere.


Questo è l'approccio che funziona meglio per il modo in cui mi piace che le cose funzionino ... Al termine, pubblicherò di nuovo e aggiornerò la tua risposta. Grazie per l'aiuto!
Brad Parks,

Ecco un foglio di calcolo che fa quanto sopra. Grazie per il suggerimento! Ho unito la "categoria" e l '"età" in una singola categoria "Categoria di età" che è stata utilizzata per fare questo. La modifica della colonna "Posizionamento" rigenera il foglio "Vincitori" utilizzando l'elenco delle categorie definito nel foglio "Configurazione" dropbox.com/s/i8aikva8m8mgzby/…
Brad Parks,

1
Ben fatto, sarebbe stato anche il mio approccio per l'ordinamento dei dati.
CdeoEm,

2

Sì. Quello che descrivi è una tabella pivot. Fai clic su una cella nella scheda dei dati di origine, inserisci una tabella pivot e fai clic su OK. Per impostazione predefinita, verrà creato in un nuovo foglio. Trascina il gruppo di età, il sesso e il nome nell'area delle righe e classifica nell'area dei valori.

Fai clic con il tasto destro del mouse su uno qualsiasi dei nomi nel perno e usa Filtro> Primi 10. Supponendo che il primo grado sia 1, cambia "In alto" in "In basso", da 10 a 3 e finirai con qualcosa di simile a questo :

inserisci qui la descrizione dell'immagine

Se si basa la tabella pivot su una tabella Excel (creata con Inserisci> Tabella), è possibile aggiungere dati alla tabella di origine, aggiornare la tabella pivot (sulla barra degli strumenti Pivot) e verranno visualizzati i risultati correnti.

Una copia del file è qui .


Dolce .. questo suona molto come quello che speravo di poter fare. Lo proverò stasera e ti farò sapere ... molto apprezzato!
Brad Parks,

Ho provato questo, ma non sono riuscito a ordinare correttamente la tabella pivot in classifica. Sono sicuro che mi manchi qualcosa di semplice! Potresti pubblicare il tuo foglio di calcolo di esempio da qualche parte? Forse potrei risolverlo da lì. Grazie!
Brad Parks,

Ho aggiunto un collegamento a un file di esempio.
teylyn,

1

per la categoria di età puoi provare a raggrupparli insieme usando

=IF(*ConditionForCatI*,CatI,IF(*ConditionForCatII*,CatII,...)))

fino a quando tutta la categoria è piena. Dopodiché scegli il filtro sotto dati Ciò ti consentirà di ordinarli in base alla fascia di età o al sesso. (ad es. se vuoi ordinare per genere):

  1. fai clic sulla freccia giù accanto all'intestazione di genere
  2. seleziona solo maschio o solo femmina
  3. fai clic sulla freccia rivolta verso il basso oltre all'intestazione del tempo (suppongo che avrai un'intestazione del tempo per decidere il vincitore)
  4. Ordina dalla A alla Z poiché mostrerà il più piccolo al più grande e il vincitore del premio sarà il tempo più piccolo

Fai lo stesso per un'altra categoria e puoi trovare i tuoi vincitori.

Saluti

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.