Εισαγάγετε τις καθημερινές Δευ - Παρ σε φύλλο εργασίας χρησιμοποιώντας VBA στο Microsoft Excel

Anonim

Σε αυτό το άρθρο, θα δημιουργήσουμε μια μακροεντολή για την εξαγωγή των καθημερινών μεταξύ δύο ημερομηνιών.

Σε αυτό το παράδειγμα, πρέπει να καθορίσουμε την ημερομηνία έναρξης και την ημερομηνία λήξης πριν από την εκτέλεση της μακροεντολής. Η μακροεντολή επιλέγει την τιμή ημερομηνίας έναρξης από το κελί J8 και την ημερομηνία λήξης από το κελί J9. Αφού καθορίσετε την ημερομηνία έναρξης και λήξης, η μακροεντολή μπορεί να εκτελεστεί πατώντας το κουμπί "Υποβολή" ή πατώντας τα πλήκτρα συντόμευσης Alt + F8.

Κατά την εκτέλεση της μακροεντολής, θα επιστρέψει τις καθημερινές μεταξύ δύο ημερομηνιών σε ένα νέο φύλλο. Το φύλλο εργασίας που προστέθηκε πρόσφατα περιέχει καθημερινές ημέρες στη στήλη Α, ακολουθούμενη από την αντίστοιχη ημερομηνία στη στήλη Β. Η ημερομηνία εξόδου στη στήλη Β θα είναι σε μορφή dd.mm.yy.

Κάθε εβδομάδα θα ακολουθείται από μια κενή σειρά για διαφοροποίηση μεταξύ δύο συνεχόμενων εβδομάδων.

Λογική εξήγηση

Στη μακροεντολή, χρησιμοποιήσαμε τη συνάρτηση Εβδομάδα για να διακρίνουμε τις καθημερινές από τα Σαββατοκύριακα. Η λειτουργία μορφοποίησης χρησιμοποιείται για την εμφάνιση της ημερομηνίας στην απαιτούμενη μορφή.

Λειτουργία καθημερινής

Η συνάρτηση Weekday επιστρέφει μια ακέραιη τιμή που αντιπροσωπεύει την ημέρα της εβδομάδας.

Σύνταξη

Ημέρα της εβδομάδας (Date_Value, [First_Day_Of_Week])

Ημερομηνία_Αξία καθορίζει την τιμή ημερομηνίας για την οποία θέλετε να βρείτε την ημέρα της εβδομάδας.

First_Day_Of_Week καθορίζει ποια ημέρα της εβδομάδας θα θεωρηθεί ως η πρώτη ημέρα της εβδομάδας. Παίρνει μια ακέραιη τιμή ή την τιμή που επιλέγεται από την απαρίθμηση FirstDayOfWeek ως είσοδο. Εάν δεν καθορίζεται καμία τιμή, τότε το FirstDayOfWeek.Sunday χρησιμοποιείται ως προεπιλεγμένη τιμή.

Τιμή απαρίθμησης

Ακέραιος αριθμός

Παρατηρήσεις

FirstDayOfWeek.System

0

Η πρώτη ημέρα της εβδομάδας καθορίζεται στις ρυθμίσεις συστήματος

FirstDayOfWeek.Sunday

1

Κυριακή (προεπιλογή)

FirstDayOfWeek. Δευτέρα

2

Δευτέρα

FirstDayOfWeek. Τρίτη

3

Τρίτη

FirstDayOfWeek. Τετάρτη

4

Τετάρτη

FirstDayOfWeek. Πέμπτη

5

Πέμπτη

FirstDayOfWeek.Friday

6

Παρασκευή

FirstDayOfWeek. Σάββατο

7

Σάββατο

Όπως φαίνεται από τον κώδικα της μακροεντολής, χρησιμοποιήσαμε την Εβδομάδα (i, 2) για να καθορίσουμε τη Δευτέρα ως την πρώτη ημέρα της εβδομάδας.

Λειτουργία μορφοποίησης

Η συνάρτηση Μορφοποίηση λαμβάνει ως είσοδο μια έκφραση ημερομηνίας και την επιστρέφει ως διαμορφωμένη συμβολοσειρά.

Σύνταξη της λειτουργίας Format

Μορφή (Date_Value, format)

Ημερομηνία_Αξία καθορίζει την τιμή του τύπου δεδομένων ημερομηνίας.

Μορφή χρησιμοποιεί τιμή συμβολοσειράς για να καθορίσει τον τύπο μορφής ημερομηνίας που απαιτείται.

Ο παρακάτω πίνακας ορίζει μερικούς δημοφιλείς χαρακτήρες που μπορεί να χρησιμοποιήσει κάποιος για να δημιουργήσει τις απαιτούμενες μορφές ημερομηνίας/ώρας:

Χαρακτήρας

Περιγραφή

ρε

εμφανίζει την ημέρα ως αριθμό χωρίς μηδέν (1 - 31)

δ.δ

εμφανίζει την ημέρα ως αριθμό με μηδενικό (01 - 31)

ddd

εμφανίζει την ημέρα ως συντομογραφία (Κυρ - Σάββατο)

dddd

εμφανίζει την ημέρα ως πλήρες όνομα (Κυριακή - Σάββατο)

w

εμφανίζει την ημέρα της εβδομάδας ως αριθμό (1 για Κυριακή έως 7 για Σάββατο)

ww

εμφανίζει την εβδομάδα του έτους ως αριθμό (1 - 54)

Μ

εμφανίζει τον μήνα ως αριθμό χωρίς μηδενικό μηδέν (1 - 12)

mm

εμφανίζει τον μήνα ως αριθμό με μηδενικό (01 - 12)

mmm

εμφανίζει τον μήνα ως συντομογραφία (Ιαν - Δεκ)

mmmm

εμφανίζει το μήνα ως όνομα ολόκληρου μήνα (Ιανουάριος - Δεκέμβριος)

q

εμφανίζει το τρίμηνο του έτους ως αριθμό (1 - 4)

y

εμφανίζει την ημέρα του έτους ως αριθμό (1 - 366)

εεε

εμφανίζει το έτος ως διψήφιο αριθμό (00 - 99)

εεεε

εμφανίζει το έτος ως τετραψήφιο αριθμό (100 - 9999)

η

εμφανίζει την ώρα ως αριθμό χωρίς μηδενικά (0 - 23)

ωχ

εμφανίζει την ώρα ως αριθμό με κορυφαία μηδενικά (00 - 23)

ν

εμφανίζει το λεπτό ως αριθμό χωρίς μηδενικά (0 - 59)

nn

εμφανίζει το λεπτό ως αριθμό με μηδενικά (00 - 59)

μικρό

εμφανίζει το δεύτερο ως αριθμό χωρίς μηδενικά (0 - 59)

σσ

εμφανίζει το δεύτερο ως αριθμό με μηδενικά (00 - 59)

Για να αφήσουμε μια κενή σειρά στο τέλος κάθε εβδομάδας, έχουμε ελέγξει για τις Κυριακές χρησιμοποιώντας τη συνάρτηση της εβδομάδας και αυξάνουμε την τιμή της μεταβλητής "StartingRow" κατά 1, έτσι ώστε η επόμενη σειρά να παραμένει κενή.

Όπως φαίνεται στον κώδικα της μακροεντολής, έχουμε χρησιμοποιήσει τη λειτουργία μορφοποίησης δύο φορές με διαφορετικούς τρόπους. Πρώτον, χρησιμοποιήσαμε τη μορφή (i, "ddd") για να λάβουμε την ημέρα της εβδομάδας και δεύτερον, χρησιμοποιήσαμε τη μορφή (i, "dd.mm.yy") για να λάβουμε την ημερομηνία σε μορφή dd.mm.yyyyy.

Επεξήγηση κώδικα

Dim NewWorksheet As Worksheet

Ορισμός NewWorksheet = Worksheets.Addd

Ο παραπάνω κώδικας χρησιμοποιείται για να δηλώσει το όνομα του αντικειμένου φύλλου εργασίας ως "NewWorksheet". Φύλλα εργασίας. Η μέθοδος Προσθήκη χρησιμοποιείται για την προσθήκη του νέου φύλλου εργασίας στη συλλογή Φύλλα εργασίας. Η εντολή Set χρησιμοποιείται για την προετοιμασία του δηλωμένου αντικειμένου με το πρόσφατα εισαγόμενο φύλλο.

Για i = StartDate To EndDate

Ο βρόχος FOR χρησιμοποιείται για βρόχο από την ημερομηνία έναρξης έως την ημερομηνία λήξης.

Αν Καθημερινή (i, 2) <6 Τότε

Η δήλωση IF χρησιμοποιείται για τον έλεγχο της συνθήκης και την εκτέλεση του κώδικα βάσει της συνθήκης. Πάνω από την κατάσταση θα ελέγξει την απόδοση της τιμής από τη συνάρτηση Ημέρα της εβδομάδας. Εάν είναι μικρότερη από 6, η συνθήκη IF επιστρέφει true και ο κώδικας μέσα στην πρόταση IF θα εκτελεστεί. Διαφορετικά, θα παραλειφθεί.

StartingRow = 1

StartingRow = StartingRow + 1

Η μεταβλητή StartingRow χρησιμοποιείται για μετακίνηση γραμμών στο φύλλο εργασίας. Στην αρχή, η μεταβλητή αρχικοποιείται στην πρώτη σειρά. Με κάθε επιτυχή εκτέλεση της δήλωσης IF, η τιμή της μεταβλητής αυξάνεται κατά 1, μετακινώντας στην επόμενη σειρά του φύλλου.

Κελιά (StartingRow, 1)

Η ιδιότητα κελιών χρησιμοποιείται για αναφορά σε ένα συγκεκριμένο κελί στο φύλλο εργασίας. Τα κελιά (αριθμός_σειράς, αριθμός_στύλου) μπορούν να χρησιμοποιηθούν για αναφορά σε οποιοδήποτε κελί στο φύλλο εργασίας εισάγοντας έναν συγκεκριμένο αριθμό γραμμής και αριθμό στήλης ως παραμέτρους. Στον κώδικα Cells (StartingRow, 1), το 1 καθορίζει την πρώτη στήλη και η μεταβλητή "StartingRow" καθορίζει τον αριθμό σειράς.

Κάποιος μπορεί εύκολα να καταλάβει τους κωδικούς καθώς έχω συμπεριλάβει σχόλια μαζί με κωδικούς στη μακροεντολή.

Ακολουθήστε παρακάτω για τον κωδικό

 Option Explicit Sub ExtractWeekdays () 'Δήλωση δύο μεταβλητών τύπου δεδομένων ημερομηνίας Dim StartDate As Date, EndDate As Date' Δήλωση μεταβλητής φύλλου εργασίας Dim NewWorksheet As Worksheet Dim StartingRow, i As Long 'Λήψη ημερομηνιών έναρξης και ημερομηνίας λήξης από το φύλλο εργασίας StartDate = Φύλλα ( "Μακροεντολή"). Εύρος ("J8"). Τιμή EndDate = Φύλλα ("Μακροεντολή"). Εύρος ("J9"). Τιμή "Αρχικοποίηση του αριθμού γραμμής εκκίνησης για έξοδο StartingRow = 1" Εισαγωγή νέου φύλλου εργασίας Ορισμός NewWorksheet = Εργαλεία. Προσθήκη για i = StartDate To EndDate 'Χρησιμοποιώντας τη μέθοδο Weekday για να ελέγξετε αν είναι Εβδομάδα ή εβδομάδα Και αν Εβδομάδα (i, 2) <6 Στη συνέχεια, η μέθοδος "Εισαγωγή τιμής στο φύλλο εργασίας που εισήχθη πρόσφατα" χρησιμοποιείται για τη μορφοποίηση της τιμής ημερομηνίας NewWorksheet.Cells ( StartingRow, 2) = Format (i, "dd.mm.yy") NewWorksheet.Cells (StartingRow, 1) = Format (i, "ddd") 'Update StartingRow value value for move in next row StartingRow = StartingRow + 1 End Αν "Εισαγωγή κενής σειράς για Σαββατοκύριακο If Weekday (i, 2) = 7 Στη συνέχεια StartingRow = StartingRow + 1 End If N ext i Set NewWorksheet = Τίποτα Τέλος υπο 

Αν σας άρεσε αυτό το blog, μοιραστείτε το με τους φίλους σας στο Facebook. Επίσης, μπορείτε να μας ακολουθήσετε στο Twitter και το Facebook.

Θα θέλαμε πολύ να σας ακούσουμε, ενημερώστε μας πώς μπορούμε να βελτιώσουμε το έργο μας και να το κάνουμε καλύτερο για εσάς. Γράψτε μας στον ιστότοπο email