/ / / Ταξινόμηση γενέθλια στο Excel VBA

Ταξινόμηση γενέθλια στο Excel VBA

Παρακάτω θα δούμε ένα πρόγραμμα στο Excel VBA ότι είδος γενέθλια σε πρώτους μήνες και σε δευτερόλεπτα δευτερόλεπτα (επομένως αγνοούμεέτη). Θέλουμε τα γενέθλια με τον χαμηλότερο αριθμό μηνυμάτων στην πρώτη θέση. Εάν υπάρχουν γενέθλια με ίσους αριθμούς μηνών, θέλουμε πρώτα τα γενέθλια με τον χαμηλότερο αριθμό ημερών. Είσαι έτοιμος?

Κατάσταση:

Ταξινόμηση των γενεθλίων Παράδειγμα

Σημείωση: Οι ημερομηνίες είναι σε μορφή US. Πρώτα μήνες, ημέρες δευτερόλεπτα. Αυτός ο τύπος μορφής εξαρτάται από τις περιφερειακές ρυθμίσεις των παραθύρων σας.

1. Αρχικά, δηλώνουμε οκτώ μεταβλητές. Μία μεταβλητή Date που ονομάζουμε tempDate, μία μεταβλητή String που καλούμε tempName. Οι άλλες έξι μεταβλητές είναι ακέραιες μεταβλητές με ονόματα monthToCheck, dayToCheck, monthNext, dayNext, i και 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. Ξεκινάμε δύο βρόχους For Next.

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

Παράδειγμα: για i = 2, j = 3, 4, ..., 12 και 13 ελέγχονται.

3. Αρχικοποιούμε τέσσερις μεταβλητές ακεραίωσης. Χρησιμοποιούμε τη λειτουργία Μήνας για να λάβουμε τον μήνα της ημερομηνίας και της λειτουργίας Ημέρα για να πάρουμε την ημέρα μιας ημερομηνίας.

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

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

Για παράδειγμα: στην αρχή, για i = 2; η ημερομηνία του Bregje και j = i + 1 = 2 + 1 = 3. η ημερομηνία του Niels θα επιλεγεί.

4. Για να ταξινομήσετε τις ημερομηνίες σωστά, συγκρίνουμε την πρώτη ημερομηνία (monthToCheck και dayToCheck) με την επόμενη ημερομηνία (monthNext και dayNext). Αν η επόμενη ημερομηνία είναι "χαμηλότερη", αλλάζουμε τις ημερομηνίες και τα ονόματα. Προσθέστε την ακόλουθη πρόταση If Then.

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

End If

Αν η παραπάνω δήλωση είναι αληθής, αλλάζουμε τις ημερομηνίες και τα ονόματα.

Για παράδειγμα: για i = 2 και j = 3, ελέγχεται η ημερομηνία των Bregje και Niels. MonthNext = 6, monthToCheck = 2. Η παραπάνω δήλωση δεν είναι αληθής, καθώς το monthNext είναι υψηλότερο από το monthToCheck. Το Excel VBA αυξάνει το j κατά 1 και επαναλαμβάνει τις γραμμές κώδικα για i = 2 και j = 4. Μπορείτε εύκολα να δείτε ότι το Joost (j = 4) έχει υψηλότερο αριθμό μηνών από το Bregje, οπότε πηγαίνουμε στο επόμενο. Παρέχουμε το ίδιο αποτέλεσμα για j = 5 και j = 6. Όταν φθάνουμε στο j = 7, έχουμε τις ακόλουθες μεταβλητές: monthNext = 2 και dayNext = 9. MonthToCheck = 2 και dayToCheck = 12. Τώρα η παραπάνω δήλωση είναι αληθής από monthNext = monthToCheck και dayNext (9) είναι μικρότερη από dayToCheck (12).

5. Ανταλλάσσουμε τις ημερομηνίες. Αποθηκεύουμε προσωρινά μία ημερομηνία στο tempDate, έτσι ώστε το Excel VBA να μπορεί να ανταλλάξει τις ημερομηνίες σωστά. Προσθέστε τις ακόλουθες γραμμές κώδικα στην εντολή If.

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

6. Κάνουμε το ίδιο με τα ονόματα. Προσθέστε τις ακόλουθες γραμμές κώδικα στην εντολή If.

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

7. Κλείνουμε το δεύτερο βρόχο For Next (εκτός από τη δήλωση If).

Next j

Για i = 2 και j = 7, το Excel VBA άλλαξε τις ημερομηνίεςκαι ονόματα. Αυτό σημαίνει ότι παίρνουμε τον Richard στην πρώτη θέση και τον Bregje στη θέση 7. Αυτό σημαίνει επίσης ότι έχουμε ένα νέο μήναToCheck και dayToCheck στην αρχή της επόμενης επανάληψης (για i = 2 και j = 8). Τώρα θα συγκρίνουμε τον Richard με τον Dineke (j = 8). Μπορείτε εύκολα να δείτε ότι δεν χρειάζεται να αντικαταστήσετε αυτές τις ημερομηνίες και ονόματα επειδή ο Richard έχει μια "χαμηλότερη" ημερομηνία. Στην πραγματικότητα, δεν χρειάζεται να αντικατασταθεί ο Richard (i = 2) με τον Jan (j = 9), τον Wendy (j = 10), τον Jeroen (j = = 13). Αυτό συμβαίνει επειδή ο Richard έχει την "χαμηλότερη" ημερομηνία. Με αυτόν τον τρόπο το Excel VBA θα πάρει (για i = 2) την "χαμηλότερη" ημερομηνία στην πρώτη θέση. Για να πάρει τη δεύτερη "χαμηλότερη" ημερομηνία στη δεύτερη θέση, το Excel VBA επαναλαμβάνει τα ίδια ακριβώς βήματα για το i = 3. Για να πάρει την τρίτη "χαμηλότερη" ημερομηνία στην τρίτη θέση, το Excel VBA επαναλαμβάνει τα ίδια ακριβώς βήματα για i = 4, και τα λοιπα.

8. Κλείστε το πρώτο βρόχο Next For (εκτός από τη εντολή If).

Next i

9. Δοκιμάστε το πρόγραμμά σας.

Αποτέλεσμα:

Ταξινόμηση γενέθλια στο Excel VBA

Επίσης διαβάστε: