Σε αυτό το άρθρο, θα δημιουργήσουμε μια μακροεντολή για την αντιγραφή δεδομένων από πολλά βιβλία εργασίας σε ένα φάκελο σε ένα νέο βιβλίο εργασίας.
Θα δημιουργήσουμε δύο μακροεντολές. μία μακροεντολή θα αντιγράψει μόνο εγγραφές από την πρώτη στήλη στο νέο βιβλίο εργασίας και η δεύτερη μακροεντολή θα αντιγράψει όλα τα δεδομένα σε αυτήν.
Τα ακατέργαστα δεδομένα για αυτό το παράδειγμα αποτελούνται από αρχεία παρακολούθησης των εργαζομένων. Στο TestFolder, έχουμε πολλά αρχεία Excel. Τα ονόματα αρχείων των αρχείων Excel αντιπροσωπεύουν μια συγκεκριμένη ημερομηνία σε μορφή "ddmmyyyy".
Κάθε αρχείο Excel περιέχει ημερομηνία, αναγνωριστικό υπαλλήλου και όνομα υπαλλήλου εκείνων των εργαζομένων που ήταν παρόντες τη συγκεκριμένη ημέρα.
Δημιουργήσαμε δύο μακροεντολές. "CopyingSingleColumnData" και "CopyingMultipleColumnData". Η μακροεντολή "CopyingSingleColumnData" θα αντιγράψει μόνο εγγραφές από την πρώτη στήλη όλων των αρχείων στο φάκελο στο νέο βιβλίο εργασίας. Η μακροεντολή "CopyingMultipleColumnData" θα αντιγράψει όλα τα δεδομένα από όλα τα αρχεία στο φάκελο στο νέο βιβλίο εργασίας.
Η μακροεντολή "CopyingSingleColumnData" μπορεί να εκτελεστεί κάνοντας κλικ στο κουμπί "Αντιγραφή μονής στήλης". Η μακροεντολή "CopyingMultipleColumnData" μπορεί να εκτελεστεί κάνοντας κλικ στο κουμπί "Αντιγραφή πολλαπλών στηλών".
Πριν από την εκτέλεση της μακροεντολής, πρέπει να καθορίσετε τη διαδρομή του φακέλου στο πλαίσιο κειμένου, όπου τοποθετούνται αρχεία Excel.
Όταν κάνετε κλικ στο κουμπί "Αντιγραφή μιας στήλης", θα δημιουργηθεί ένα νέο βιβλίο εργασίας "ConsolidatedFile" στον καθορισμένο φάκελο. Αυτό το βιβλίο εργασίας θα περιέχει ενοποιημένα δεδομένα από την πρώτη στήλη όλων των αρχείων του φακέλου.
Το νέο βιβλίο εργασίας θα περιέχει μόνο εγγραφές στην πρώτη στήλη. Μόλις έχουμε τα ενοποιημένα δεδομένα, μπορούμε να μάθουμε τον αριθμό των εργαζομένων που είναι παρόντες σε μια συγκεκριμένη ημέρα μετρώντας τον αριθμό της ημερομηνίας. Ο αριθμός μιας συγκεκριμένης ημερομηνίας θα ισούται με τον αριθμό των εργαζομένων που είναι παρόντες τη συγκεκριμένη ημέρα.
Όταν κάνετε κλικ στο κουμπί "Αντιγραφή πολλαπλών στηλών", θα δημιουργηθεί το νέο βιβλίο εργασίας "ConsolidatedAllColumns" στον καθορισμένο φάκελο. Αυτό το βιβλίο εργασίας θα περιέχει συγκεντρωτικά δεδομένα από όλες τις εγγραφές όλων των αρχείων του φακέλου.
Το νέο βιβλίο εργασίας που δημιουργήθηκε θα περιέχει όλες τις εγγραφές από όλα τα αρχεία του φακέλου. Μόλις έχουμε τα συγκεντρωτικά δεδομένα, έχουμε όλα τα στοιχεία συμμετοχής διαθέσιμα σε ένα μόνο αρχείο. Μπορούμε εύκολα να βρούμε τον αριθμό των εργαζομένων που ήταν παρόντες τη συγκεκριμένη ημέρα και επίσης να λάβουμε τα ονόματα των εργαζομένων που ήταν παρόντες τη συγκεκριμένη ημέρα.
Επεξήγηση κώδικα
Sheet1.TextBox1.Value
Ο παραπάνω κώδικας χρησιμοποιείται για να πάρει την τιμή που έχει εισαχθεί στο πλαίσιο κειμένου "TextBox1" από το φύλλο "Sheet1".
Dir (FolderPath & "*.xlsx")
Ο παραπάνω κώδικας χρησιμοποιείται για να λάβετε το όνομα του αρχείου, το οποίο έχει επέκταση αρχείου ".xlsx". Χρησιμοποιήσαμε μπαλαντέρ * για όνομα αρχείου πολλαπλών χαρακτήρων.
Ενώ όνομα αρχείου ""
Count 1 = Count1 + 1
ReDim Preserve FileArray (1 To Count1)
FileArray (Count1) = Όνομα αρχείου
Όνομα αρχείου = Dir ()
Διευθύνω
Ο παραπάνω κώδικας χρησιμοποιείται για να λάβετε τα ονόματα αρχείων όλων των αρχείων στο φάκελο.
Για i = 1 προς UBound (FileArray)
Επόμενο
Ο παραπάνω κώδικας χρησιμοποιείται για την περιήγηση όλων των αρχείων στο φάκελο.
Εύρος ("A1", Cells (LastRow, 1)). Αντιγράψτε DestWB.ActiveSheet.Cells (LastDesRow, 1)
Ο παραπάνω κώδικας χρησιμοποιείται για την αντιγραφή εγγραφής από την πρώτη στήλη στο βιβλίο εργασίας προορισμού.
Εύρος ("A1", ActiveCell.SpecialCells (xlCellTypeLastCell)). Αντιγράψτε DestWB.ActiveSheet.Cells (LastDesRow, 1)
Ο παραπάνω κώδικας χρησιμοποιείται για την αντιγραφή όλης της εγγραφής από το ενεργό βιβλίο εργασίας στο βιβλίο εργασίας προορισμού.
Ακολουθήστε παρακάτω για τον κωδικό
Option Explicit Sub CopyingSingleColumnData () 'Δήλωση μεταβλητών Dim FileName, FolderPath, FileArray (), FileName1 As String Dim LastRow, LastDesRow, Count1, i As Integer Dim SourceWB, DestWB As Workbook Application.ScreenUpdating = False FolderPath = Sheset1 Εισαγωγή blashlash στη διαδρομή του φακέλου αν δεν υπάρχει backslash (\) If Right (FolderPath, 1) "\" Then FolderPath = FolderPath & "\" End If 'Searching for Excel files FileName = Dir (FolderPath & "*.xlsx") Count1 = 0 'Looping all the Excel files in the folder while FileName "Count1 = Count1 + 1 ReDim Preserve FileArray (1 To Count1) FileArray (Count1) = FileName FileName = Dir () Wend' Δημιουργία νέου βιβλίου εργασίας Ορισμός DestWB = Workbooks.Add For i = 1 To UBound (FileArray) 'Εύρεση της τελευταίας σειράς στο βιβλίο εργασίας LastDesRow = DestWB.ActiveSheet.Range ("A1"). SpecialCells (xlCellTypeLastCell). Row' Άνοιγμα του βιβλίου εργασίας του Excel SetWB = Workbooks.Open (FolderPath & FileArray (i)) LastRow = ActiveCell.SpecialCells (xlCellTypeLas tCell). Row 'Επικόλληση των αντιγραμμένων δεδομένων στην τελευταία σειρά στο βιβλίο εργασίας προορισμού If LastDesRow = 1 Στη συνέχεια' Αντιγραφή της πρώτης στήλης στην τελευταία σειρά στο εύρος βιβλίου εργασίας προορισμού ("A1", Cells (LastRow, 1)). Αντιγραφή DestWB. ActiveSheet.Cells (LastDesRow, 1) Else Range ("A1", Cells (LastRow, 1)). Αντιγράψτε το DestWB.ActiveSheet.Cells (LastDesRow + 1, 1) Τέλος αν SourceWB.Close False Next 'Αποθήκευση και κλείσιμο ενός νέου Excel βιβλίο εργασίας DestWB.SaveAs FileName: = FolderPath & "ConsolidatedFile.xlsx" DestWB.Close Set DestWB = Τίποτα δεν είναι πηγήWB = Τίποτα δεν τελειώνει κάτω από το CopyingMultipleColumnData () "Δήλωση μεταβλητών Dim FileName, FolderPath, FileArray (), FileNrow1, LastName1 , Count1, i As Integer Dim SourceWB, DestWB As Workbook Application.ScreenUpdating = False FolderPath = Sheet1.TextBox1.Value «Εισαγωγή backslash στη διαδρομή του φακέλου, εάν λείπει το blashlash (\) If Right (FolderPath, 1)" \ "Στη συνέχεια FolderPath = FolderPath & "\" Τέλος αν 'Αναζήτηση αρχείων Excel FileName = Dir (FolderPath & "*.xlsx") Count1 = 0 'Looping all the Excel files in the folder while FileName "" Count1 = Count1 + 1 ReDim Conserve FileArray (1 To Count1) FileArray (Count1) = FileName FileName = Dir () Wend "Δημιουργία νέου βιβλίου εργασίας Set DestWB = Workbooks.Add Για i = 1 To UBound (FileArray) 'Εύρεση της τελευταίας σειράς στο βιβλίο εργασίας LastDesRow = DestWB.ActiveSheet.Range ("A1"). SpecialCells (xlCellTypeLastCell). Row "Άνοιγμα του βιβλίου εργασίας Excel Πηγή WB = Workbooks.Open (FolderPath & FileArray (i)) 'Επικόλληση των αντιγραμμένων δεδομένων στην τελευταία σειρά στο βιβλίο εργασίας προορισμού If LastDesRow = 1 Στη συνέχεια' Αντιγραφή όλων των δεδομένων στο φύλλο εργασίας στην τελευταία σειρά της σειράς βιβλίων προορισμού ("A1", ActiveCell.SpecialCells (xlCellTypeLastCell)). Αντιγραφή DestWB.ActiveSheet.Cells (LastDesRow, 1) Else Range ("A1", ActiveCell.SpecialCells (xlCellTypeLastCell)). Αντιγραφή DestWB.ActiveSheet.Cells (LastDesRow + 1, 1) Τερματισμός Αν SourceWB.Close False Next 'Αποθήκευση και κλείσιμο ένα νέο βιβλίο εργασίας Excel DestWB.SaveAs FileName: = FolderPath & "ConsolidatedAllColumns.xlsx" DestWB.Close Set D estWB = Τίποτα δεν ορίζεται ΠηγήWB = Τίποτα δεν τελειώνει
Αν σας άρεσε αυτό το blog, μοιραστείτε το με τους φίλους σας στο Facebook. Επίσης, μπορείτε να μας ακολουθήσετε στο Twitter και το Facebook.
Θα θέλαμε πολύ να σας ακούσουμε, ενημερώστε μας πώς μπορούμε να βελτιώσουμε το έργο μας και να το κάνουμε καλύτερο για εσάς. Γράψτε μας στον ιστότοπο email