Excel: Comment afficher les 3 meilleurs gagnants par âge et par sexe?

1

J'aimerais utiliser Excel pour gérer les données d'un marathon. Le marathon regroupe les gagnants par ageet genderdans un category, et attribue des prix de la première à la troisième place dans chacun category.

Peut-on utiliser Excel pour déterminer les gagnants de manière dynamique, en entrant les données sur une seule feuille de calcul et en faisant en sorte que les résultats soient automatiquement calculés et affichés sur une autre feuille de calcul?

J'ai une seule feuille de calcul qui contient les données suivantes pour chaque ligne:

name, age, gender, age category, overall rank

Je suis ouvert aux approches basées sur les fonctions VBA et Excel. Merci!

Brad Parks
la source

Réponses:

2

Si vous souhaitez mettre à jour la feuille de calcul2 lorsque les données de la feuille de calcul1 sont modifiées, vous pouvez utiliser VBA pour créer une page résultante mise à jour de manière dynamique.

  • Dans l'onglet développeur, cliquez sur Visual Basic.
  • Développez le dossier Objets Microsoft Excel et affichez le code pour Sheet1
  • Créez une nouvelle fonction appelée:

    Private Sub Worksheet_ChangeByVal Target As Range)
    EndSub
    

Cette fonction est appelée chaque fois que les données de la feuille de calcul 1 sont modifiées.

Pour mettre à jour les données en fonction de la colonne de classement et en formulant les hypothèses suivantes:
Les données se trouvent dans ces colonnes Nom: colonne A, Âge: colonne B, Sexe: colonne C, Catégorie: colonne D, Classement général: colonne E

Au sein de la sous-comparaison Worksheet_Change la valeur dans la colonne E, la colonne de classement et transférez le contenu de la ligne si le concurrent s'est classé parmi les quatre premières positions.

'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

Insérez ici un algorithme de tri, si nécessaire, après la migration des données.

Si vous avez besoin de plus de détails ou d'aide pour le tri, merci de me le faire savoir.

CdeoEm
la source
C’est l’approche qui convient le mieux à la façon dont j’aime que les choses fonctionnent. Merci de votre aide!
Brad Parks
Voici un tableur qui fait ce qui précède. Merci pour la suggestion! J'ai fusionné la "catégorie" et "l'âge" dans une seule catégorie "Catégorie d'âge" utilisée pour cela. Le changement de la colonne "Emplacement" régénère la feuille "Gagnants" à l'aide de la liste de catégories définie dans la feuille "Configuration". Dropbox.com/s/i8aikva8m8mgzby/…
Brad Parks
1
Joliment fait, cela aurait aussi été mon approche pour trier les données.
CdeoEm
2

Oui. Ce que vous décrivez est un tableau croisé dynamique. Cliquez sur une cellule dans votre onglet de données source, insérez un tableau croisé dynamique, puis cliquez sur OK. Par défaut, il sera créé dans une nouvelle feuille. Faites glisser le groupe d'âge, le sexe et le nom dans la zone de rangée et placez-le dans la zone de valeur.

Cliquez avec le bouton droit de la souris sur l'un des noms du pivot et utilisez Filtre> Top 10. En supposant que le premier rang soit 1, remplacez le "Top" par "Bottom", 10 par un 3 et vous obtiendrez un résultat similaire. :

entrez la description de l'image ici

Si vous basez le tableau croisé dynamique sur un tableau Excel (créé avec Insertion> Tableau), vous pouvez alors ajouter des données au tableau source, actualiser le tableau croisé dynamique (sur le ruban des outils de pivot) et afficher les résultats actuels.

Une copie du fichier est ici .

Teylyn
la source
Doux .. cela ressemble beaucoup à ce que j'espérais pouvoir faire. Je vais essayer ça ce soir et je vous le ferai savoir… très apprécié!
Brad Parks
J'ai essayé cela, mais le tableau croisé dynamique n'a pas pu être correctement trié dans le classement. Je suis sûr que quelque chose de simple me manque! Pourriez-vous poster votre exemple de feuille de calcul quelque part? Peut-être que je pourrais y arriver à partir de là. Merci!
Brad Parks
J'ai ajouté un lien vers un exemple de fichier.
Teylyn
1

pour la catégorie d'âge, vous pouvez essayer de les regrouper en utilisant

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

jusqu'à ce que toute la catégorie soit remplie. Après cela, choisissez le filtre sous les données. Cela vous permettra de les trier par groupe d'âge ou par sexe. (par exemple si vous voulez trier par genre):

  1. cliquez sur la flèche vers le bas à côté de la rubrique genre
  2. sélectionnez seulement un homme ou seulement une femme
  3. cliquez sur la flèche vers le bas à côté de l'en-tête du timing (je suppose que vous aurez l'en-tête du timing pour décider du gagnant)
  4. Triez de A à Z car il montrera le plus petit au plus grand et le lauréat sera le plus petit moment

Faites la même chose pour les autres catégories et vous pourrez trouver vos gagnants.

À votre santé

newb
la source