Trier les anniversaires dans Excel VBA
Ci-dessous, nous examinerons un programme dans Excel VBA qui trie les anniversaires des mois et des premiers jours secondes (nous négligeons ans). Nous voulons que l’anniversaire avec le numéro du mois le plus bas à la première position. S’il y a des anniversaires avec des numéros de mois égaux, nous voulons que l’anniversaire avec le numéro du jour le moins cher. Es-tu prêt? Situation:
Note: Les dates sont au format US. Mois premier, deuxième jours. Ce type de format dépend de vos fenêtres de paramètres régionaux.
-
Tout d’abord, nous déclarons huit variables. Une variable Date nous appelons tempDate, une variable de chaîne que nous appelons tempname. Les six autres sont des variables entières avec des 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
-
Nous commençons deux boucles Pour suivantes.
For i = 2 To 13 For j = i + 1 To 13
Exemple: pour i = 2, j = 3, 4, …, 12 et 13 sont contrôlés.
-
Nous initialisons quatre variables entières. Nous utilisons la fonction mois pour obtenir le mois d’une date et la fonction jour 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 choisi.
-
Pour trier les dates correctement, on compare la première date (monthToCheck et dayToCheck) à la date suivante (monthNext et dayNext). Si la date suivante est « inférieure », nous échangeons les dates et les noms. Ajouter ce qui suit Si THEN.
If (monthNext < monthToCheck) Or (monthNext = monthToCheck And dayNext < dayToCheck) Then End If
Si l’énoncé ci-dessus est vrai, nous échangeons les dates et les noms.
Par exemple: pour i = 2 et j = 3, la date de Bregje et Niels sont vérifiés. MonthNext = 6, monthToCheck = 2. La déclaration ci-dessus n’est pas vrai puisque monthNext est supérieure à monthToCheck. Excel VBA j par 1 et répète les lignes de code pour i = 2 et j = 4. Vous pouvez facilement voir que Joost (j = 4) a un certain nombre de mois supérieur à Bregje, donc nous allons à la suivante. Nous obtenons le même résultat pour j = 5 et j = 6. Quand nous arrivons à j = 7, nous avons les variables suivantes: monthNext = 2 et dayNext = 9. MonthToCheck = 2 et dayToCheck = 12. Maintenant, la déclaration ci-dessus est vrai depuis monthNext = monthToCheck et dayNext (9) est inférieure à dayToCheck (12).
-
Nous
lien: / vba-exemples-échange des valeurs [swaps]
les dates. Nous enregistrons temporairement une date à tempDate, de sorte que Excel VBA peut échanger les dates correctement. Ajoutez les lignes de code suivant dans l’instruction If.
'swap dates tempDate = Cells(i, 2).Value Cells(i, 2).Value = Cells(j, 2).Value Cells(j, 2).Value = tempDate
-
Nous faisons la même chose avec les noms. Ajoutez les lignes de code suivant dans l’instruction If.
'swap names tempName = Cells(i, 1).Value Cells(i, 1).Value = Cells(j, 1).Value Cells(j, 1).Value = tempName
-
Nous terminons la deuxième boucle For Next (En dehors de l’instruction if).
Next j
Pour i = 2 et j = 7, Excel VBA a troqué les dates et les noms. Cela signifie que nous obtenons Richard à la première position et Bregje à la position 7. Cela signifie aussi que nous obtenons une nouvelle monthToCheck et dayToCheck au début de la 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’y a pas besoin de remplacer les dates et les noms parce que Richard a une date « inférieure ». En fait, il n’y a pas besoin de remplacer Richard (i = 2) avec Jan (j = 9), Wendy (j = 10), Jeroen (j = 11), John (j = 12) et Debby (j = 13). C’est parce que Richard a la date « plus bas ». De cette façon, Excel VBA obtenir (pour i = 2) la date « plus bas » à la première position. Pour la deuxième date du « plus » à la deuxième position, Excel VBA répète exactement les mêmes étapes pour i = 3. Pour obtenir la troisième date « plus » à la troisième position, Excel VBA répète exactement les mêmes étapes pour i = 4, etc.
-
Fermez la première boucle For Next (En dehors de l’instruction if).
Next i
-
Testez votre programme.
Résultat: