Αντιγράψτε δεδομένα με ημερομηνία μεταξύ δύο καθορισμένων ημερομηνιών σε νέο φύλλο εργασίας χρησιμοποιώντας VBA

Anonim

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

Τα ακατέργαστα δεδομένα αποτελούνται από τρεις στήλες. Η πρώτη στήλη περιέχει ημερομηνίες, η δεύτερη στήλη περιέχει ονόματα αντιπροσώπων και η τρίτη στήλη περιέχει αριθμούς πωλήσεων που πραγματοποιήθηκαν από έναν αντιπρόσωπο τη συγκεκριμένη ημερομηνία.

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

Αφού καθορίσετε τις ημερομηνίες έναρξης και λήξης, ο χρήστης πρέπει να κάνει κλικ στο κουμπί "Υποβολή" για να εκτελέσει τη μακροεντολή.

Κατά την εκτέλεση της μακροεντολής, θα ταξινομήσει δεδομένα στο φύλλο "RawData", με βάση τη στήλη ημερομηνίας και θα εξαγάγει δεδομένα με βάση το καθορισμένο εύρος ημερομηνιών στο νέο φύλλο εργασίας.

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

Η μακροεντολή λαμβάνει στοιχεία για ημερομηνίες έναρξης και λήξης από τα κελιά J8 και J9, αντίστοιχα. Αυτή η μακροεντολή ταξινομεί πρώτα τα δεδομένα στο φύλλο "RawData", με βάση τη στήλη Α σε αύξουσα σειρά. Έχουμε ταξινομήσει τα δεδομένα σύμφωνα με τις τιμές ημερομηνίας, έτσι ώστε να μπορούμε να αντιγράψουμε τα δεδομένα σε ένα μόνο εύρος, αφού εφαρμόσουμε φίλτρο για το καθορισμένο εύρος.

Αφού ταξινομήσετε τα δεδομένα, εφαρμόστε το φίλτρο πάνω του. Το φίλτρο που εφαρμόζεται βασίζεται σε δύο προϋποθέσεις, η πρώτη προϋπόθεση είναι ότι η τιμή στη στήλη Α πρέπει να είναι μεγαλύτερη ή ίση με την ημερομηνία έναρξης και η δεύτερη προϋπόθεση είναι ότι η τιμή στη στήλη Α πρέπει να είναι μικρότερη ή ίση με την ημερομηνία λήξης.

Μετά την εφαρμογή του φίλτρου, το νέο φύλλο εργασίας εισάγεται και τα φιλτραρισμένα δεδομένα αντιγράφονται και επικολλούνται σε αυτό.

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

Εύρος ("A1"). CurrentRegion.Sort key1: = Range ("A1"), order1: = xlΑύξουσα, Header: = xlΝαι

Ο παραπάνω κώδικας χρησιμοποιείται για την ταξινόμηση δεδομένων στο καθορισμένο εύρος. Το Key1 καθορίζει τη στήλη βάσει της οποίας τα δεδομένα θα ταξινομηθούν. Η σειρά ταξινόμησης παρέχεται με παραγγελία 1. Έχουμε ήδη ορίσει την αύξουσα σειρά. Για να ορίσετε φθίνουσα σειρά, μπορείτε να χρησιμοποιήσετε xlDescending σταθερά. Η κεφαλίδα χρησιμοποιείται για να καθορίσει εάν το εύρος δεδομένων περιέχει την κεφαλίδα.

Εύρος ("A1"). CurrentRegion.AutoFilter Field: = 1, Criteria1: = "> =" & StartDate, Operator: = xlAnd, Criteria2: = "<=" & EndDate

Ο παραπάνω κώδικας χρησιμοποιείται για την εφαρμογή φίλτρου στο εύρος δεδομένων. Το πεδίο 1 καθορίζει τον αριθμό στήλης στο οποίο θα εφαρμοστεί το φίλτρο. Τα κριτήρια1 και τα κριτήρια2 καθορίζουν τις συνθήκες βάσει των οποίων τα δεδομένα θα φιλτράρουν. Ο χειριστής καθορίζει τον τελεστή, ο οποίος θα χρησιμοποιηθεί μεταξύ δύο συνθηκών.

Φύλλα εργασίας. Προσθήκη μετά: = Φύλλα εργασίας (Φύλλα εργασίας. Αριθμός)

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

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

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

 Sub CopyDataBasedOnDate () 'Απενεργοποίηση ενημερώσεων οθόνης Application.ScreenUpdating = Λάθος' Δήλωση δύο μεταβλητών τύπου δεδομένων ημερομηνίας Dim StartDate, EndDate As Date 'Δήλωση μεταβλητής για αντικείμενο φύλλου εργασίας Dim MainWorksheet As Worksheet' Αρχικοποίηση μεταβλητών ημερομηνίας με ημερομηνία έναρξης από το κελί J8 'και ημερομηνία λήξης από το κελί J9 του φύλλου "Macro" StartDate = Sheets ("Macro"). Range ("J8"). Value EndDate = Sheets ("Macro"). Range ("J9"). Value 'Initializing worksheet object with " RawData "φύλλο εργασίας Ορισμός MainWorksheet = Φύλλα εργασίας (" RawData ") 'Ενεργοποίηση του αντικειμένου φύλλου εργασίας MainWorksheet.Activate' Ταξινόμηση των δεδομένων κατά ημερομηνία στη στήλη Α σε εύρος αύξουσας σειράς (" A1 "). CurrentRegion.Sort _ key1: = Range (" A1 "), order1: = xlAscending, _ Header: = xlΝαι" Φιλτράρετε τα δεδομένα με βάση το εύρος ημερομηνιών μεταξύ της ημερομηνίας έναρξης και της ημερομηνίας λήξης ("A1"). CurrentRegion.AutoFilter Field: = 1, Criteria1: = _ "> =" & StartDate, Operator: = xlAnd, Criteria2: = "<=" & EndDate 'Αντιγράψτε τα δεδομένα φίλτρου ActiveSheet.AutoFilter.Range.Copy' Inserting new wor ksheet μετά το τελευταίο φύλλο εργασίας στο φύλλο εργασίας Worksheets.Add after: = Worksheets (Worksheets.Count) 'Επικόλληση των αντιγραμμένων δεδομένων ActiveSheet.Paste' Αυτόματη προσαρμογή του μεγέθους των επιλεγμένων στηλών Selection.Columns.AutoFit Range ("A1"). Select "Select" Ενεργοποίηση του φύλλου MainWorkset "RawData". Ενεργοποιήστε το "Αφαίρεση φίλτρου από το φύλλο εργασίας που εφαρμόσαμε νωρίτερα Φύλλα Selection.AutoFilter (" Μακροεντολή "). Ενεργοποίηση Τέλος Υπο 

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

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