/ / Trier les anniversaires dans Excel VBA

Trier les anniversaires dans Excel VBA

Ci-dessous, nous examinerons un programme en Excel VBA cette trie les anniversaires aux mois en premier et aux jours en second lieu (nous ignorons doncannées). Nous voulons que l'anniversaire avec le numéro du mois le plus bas soit en première position. S'il existe des anniversaires avec des numéros de mois égaux, nous voulons d'abord l'anniversaire avec le numéro de jour le plus bas. Es-tu prêt?

Situation:

Trier les anniversaires Exemple

Remarque: les dates sont au format américain. Mois en premier, Jours en second Ce type de format dépend de vos paramètres régionaux Windows.

1. Tout d'abord, nous déclarons huit variables. Une variable de date que nous appelons tempDate, une variable de chaîne que nous appelons tempName. Les six autres variables sont des variables entières portant les noms monthToCheck, dayToCheck, monthNext, dayNext, i et j.

Dim tempDate As Date, tempName As String
Dim monthToCheck As Integer, dayToCheck As Integer, monthNext As Integer, dayNext As Integer, i As Integer, j As Integer

2. Nous commençons deux boucles For Next.

For i = 2 To 13
    For j = i + 1 To 13

Exemple: pour i = 2, j = 3, 4, ..., 12 et 13 sont vérifiés.

3. Nous initialisons quatre variables Integer. Nous utilisons la fonction Month pour obtenir le mois d'une date et la fonction Day pour obtenir le jour d'une date.

monthToCheck = month(Cells(i, 2).Value)
dayToCheck = day(Cells(i, 2).Value)

monthNext = month(Cells(j, 2).Value)
dayNext = day(Cells(j, 2).Value)

Par exemple: au début, pour i = 2; la date de Bregje et j = i + 1 = 2 + 1 = 3; la date de Niels sera choisie.

4 Pour trier les dates correctement, nous comparons la première date (monthToCheck et dayToCheck) à la prochaine date (monthNext et dayNext). Si la date suivante est "inférieure", nous échangeons les dates et les noms. Ajoutez l'instruction suivante If If.

If (monthNext < monthToCheck) Or (monthNext = monthToCheck And dayNext < dayToCheck) Then

End If

Si la déclaration ci-dessus est vraie, nous échangeons les dates et les noms.

Par exemple: pour i = 2 et j = 3, les dates de Bregje et Niels sont vérifiées. MonthNext = 6, monthToCheck = 2. L'instruction ci-dessus n'est pas vraie, car monthNext est supérieur à monthToCheck. Excel VBA incrémente j de 1 et répète les lignes de code pour i = 2 et j = 4. Vous pouvez facilement constater que Joost (j = 4) a un numéro de mois supérieur à celui de Bregje, nous passons donc au suivant. Nous obtenons le même résultat pour j = 5 et j = 6. Lorsque nous arrivons à j = 7, nous avons les variables suivantes: monthNext = 2 et dayNext = 9. MonthToCheck = 2 et dayToCheck = 12. La déclaration ci-dessus est vraie. depuis monthNext = monthToCheck et dayNext (9) est inférieur à dayToCheck (12).

5. Nous échangeons les dates. Nous stockons temporairement une date dans tempDate afin qu'Excel VBA puisse échanger correctement les dates. Ajoutez les lignes de code suivantes dans l'instruction If.

"swap dates
tempDate = Cells(i, 2).Value
Cells(i, 2).Value = Cells(j, 2).Value
Cells(j, 2).Value = tempDate

6. Nous faisons la même chose avec les noms. Ajoutez les lignes de code suivantes dans l'instruction If.

"swap names
tempName = Cells(i, 1).Value
Cells(i, 1).Value = Cells(j, 1).Value
Cells(j, 1).Value = tempName

7. Nous fermons la deuxième boucle For Next (en dehors de l'instruction If).

Next j

Pour i = 2 et j = 7, Excel VBA a échangé les dates.et noms. Cela signifie que nous obtenons Richard à la première position et Bregje à la position 7. Cela signifie également que nous obtenons un nouveau monthToCheck et dayToCheck au début de notre prochaine itération (pour i = 2 et j = 8). Nous allons maintenant comparer Richard avec Dineke (j = 8). Vous pouvez facilement voir qu'il n'est pas nécessaire de remplacer ces dates et noms car Richard a une date "inférieure". En fait, il n’est pas nécessaire de remplacer Richard (i = 2) par Jan (j = 9), Wendy (j = 10), Jeroen (j = 11), John (j = 12) et Debby (j = 13). C'est parce que Richard a la date "la plus basse". De cette façon, Excel VBA obtiendra (pour i = 2) la date "la plus basse" à la première position. Pour obtenir la deuxième date "la plus basse" à la deuxième position, Excel VBA répète exactement les mêmes étapes pour i = 3. Pour obtenir la troisième date "la plus basse" à la troisième position, Excel VBA répète exactement les mêmes étapes pour i = 4, etc.

8. Fermez la première boucle For Next (en dehors de l'instruction If).

Next i

9. Testez votre programme.

Résultat:

Trier les anniversaires dans Excel VBA

Lisez aussi: