Ταξινόμηση γενεθλίων στο Excel VBA - Εύκολες μακροεντολές Excel

Πίνακας περιεχομένων

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

Κατάσταση:

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

1. Αρχικά, δηλώνουμε οκτώ μεταβλητές. Μια μεταβλητή ημερομηνίας ονομάζουμε tempDate, μία μεταβλητή συμβολοσειράς ονομάζουμε 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.

Για i = 2 έως 13
Για j = i + 1 έως 13

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

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

monthToCheck = μήνας (Cells (i, 2). Value)
dayToCheck = ημέρα (Κελιά (i, 2). Τιμή)
monthNext = μήνας (Cells (j, 2). Value)
dayNext = ημέρα (Κελιά (j, 2). Τιμή)

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

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

Εάν (monthNext <monthToCheck) ((monthNext = monthToCheck And dayNext <dayToCheck) Τότε
Τέλος εαν

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

Για παράδειγμα: για 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.

«ημερομηνίες ανταλλαγής
tempDate = Κελιά (i, 2). Τιμή
Κελιά (i, 2). Αξία = Κελιά (j, 2). Αξία
Κελιά (j, 2) .Value = tempDate

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

«ανταλλαγή ονομάτων
tempName = Κελιά (i, 1). Αξία
Κελιά (i, 1). Αξία = Κελιά (j, 1). Αξία
Κελιά (j, 1). Αξία = tempName

7. Κλείνουμε τον δεύτερο βρόχο For Next (Outside the If).

Επόμενο 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 = 11), John (j = 12) και Debby (j = 13). Αυτό συμβαίνει επειδή ο Ρίτσαρντ έχει την «χαμηλότερη» ημερομηνία. Με αυτόν τον τρόπο το Excel VBA θα πάρει (για i = 2) την «χαμηλότερη» ημερομηνία στην πρώτη θέση. Για να λάβετε τη δεύτερη «χαμηλότερη» ημερομηνία στη δεύτερη θέση, το Excel VBA επαναλαμβάνει τα ίδια ακριβώς βήματα για i = 3. Για να λάβετε την τρίτη «χαμηλότερη» ημερομηνία στην τρίτη θέση, το Excel VBA επαναλαμβάνει τα ίδια ακριβώς βήματα για i = 4, και τα λοιπά.

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

Επόμενο i

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

Αποτέλεσμα:

Θα βοηθήσει στην ανάπτυξη του τόπου, μοιράζονται τη σελίδα με τους φίλους σας

wave wave wave wave wave