Τρόπος διόρθωσης ημερομηνιών στο φύλλο εργασίας του Excel με VBA

Κοινή χρήση τώρα:

Πόσο συχνά λαμβάνουμε ημερομηνίες σε υπολογιστικά φύλλα που μας παρέχονται ως 12.26.2016 ή 26/12/2016 (μορφή ΗΒ), μόνο για να ενημερωθούμε ότι η ημερομηνία είναι άκυρη ή δεν υπάρχει μήνας 26; Αυτό το άρθρο εξετάζει τον καθορισμό ημερομηνιών με το VBA, χρησιμοποιώντας συναρτήσεις TRIM, LEFT, RIGHT και MID.

Το άρθρο προϋποθέτει ότι ο αναγνώστης έχει εμφανιστεί την κορδέλα προγραμματιστή και είναι εξοικειωμένος με τον επεξεργαστή VBA. Εάν όχι, παρακαλώ "Google Tab Developer Excel" ή "Excel Code Window".

Μπορείτε να κατεβάσετε το xlsm σε αυτήν την άσκηση εδώ.

Όχι το πρόβλημά μας!

Προσθήκη 7 ημερών σε ημερομηνίαΤο καλύτερο μέρος για την επίλυση ενός προβλήματος είναι στην πηγή. Ωστόσο, κανένα ποσό πειθούς δεν μπορεί να πείσει το τμήμα μισθοδοσίας σε αυτήν την περίπτωση ότι η 12.26.1994 δεν είναι έγκυρη ημερομηνία (εκτός εάν έχει ρυθμιστεί έτσι στον Πίνακα Ελέγχου του υπολογιστή για ορισμένες χώρες της Ανατολικής Ευρώπης).

Στην πραγματικότητα μπορούμε να αποδείξουμε ότι δεν είναι αναγνώσιμο από μηχανή. Για παράδειγμα, προσθέτοντας 7 ημέρες σε μια ημερομηνία:

"=01.01.2017 + 7" = #VALUE. 

"=2017.01.01 + 7" = #VALUE.

ενώ…

"=2017-01-01 + 7" = 2017/01/08.

Ας υποθέσουμε ότι προτείνουν ότι δεν είναι δικό τους πρόβλημα.

Μορφές ημερομηνίας

Το πρώτο πράγμα που πρέπει να εξακριβώσουμε είναι αν η ημερομηνία είναι σε μορφή ΗΠΑ ή Διεθνής.Ημερομηνία σε μορφή ΗΠΑ

Το παράδειγμά μας καθιστά σαφές ότι εξετάζουμε τη χρήση των ΗΠΑ, δηλαδή το MDY και όχι τη διεθνή μορφή DMY.

Μόλις δημιουργήσουμε την πηγή, πρέπει να αλλάξουμε τις μορφές δεδομένων έτσι ώστε το Excel να τα κατανοήσει, είτε διεθνώς είτε στις ΗΠΑ.

Ο καλύτερος τρόπος για να γίνει αυτό είναι να αλλάξετε την ημερομηνία σε yyyymmdd, μια μορφή που δεν χρειάζεται προσόντα.

Η διαδικασία

Θα περιηγηθούμε σε κάθε σειρά στο έγγραφο, καλώντας μια συνάρτηση να «διορθώσει» την ημερομηνία σύμφωνα με τη χώρα προέλευσης. Μόλις διορθωθεί η ημερομηνία, θα υπολογίσουμε την ηλικία του υπαλλήλου.

Ο Κώδικας

Αντιγράψτε τον ακόλουθο κώδικα σε μια νέα ενότητα:

Option Explicit

Sub Main()
    Dim strNewFormat As String
    Dim strDate As String
    Sheets("Main").Range("B4").Select
    
    'Cycle through the sheet rows, using IDNumber as an anchor
    'to prevent a premature halt caused by a blank date of birth
    Do While ActiveCell > ""
        If ActiveCell.Offset(0, 2) > "" Then
            strDate = ActiveCell.Offset(0, 2)
            
            'Remove leading or trailing spaces
            strDate = Trim(strDate)
            
            'Call the function
            strNewFormat = ReformatDate(strDate, "USA")
            
            'Write the result from the function ReformatDate to a new column
            ActiveCell.Offset(0, 3) = strNewFormat
            
            'Determine age by subtracting the previous column from today's date
            ActiveCell.Offset(0, 4) = "=(NOW()-RC[-1])/365.25"
            
            'Convert to intger, thus lopping off decimal places
            ActiveCell.Offset(0, 4) = Int(ActiveCell.Offset(0, 4))
        End If
        Range("B" & ActiveCell.Row + 1).Select
    Loop
End Sub

Function ReformatDate(sDate As String, sSource As String)
    Dim yyyy, mm, dd As String
    yyyy = Right(sDate, 4)
    If sSource = "USA" Then
        mm = Left(sDate, 2)
        dd = Mid(sDate, 4, 2)
    Else
        mm = Mid(sDate, 4, 2)
        dd = Left(sDate, 2)
    End If
    ReformatDate = yyyy & "-" & mm & "-" & dd
End Function

Προσθέστε ένα κουμπί στη φόρμα σας και εκχωρήστε το στο Sub Main.

Ανακοπή

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

Δημιουργήστε αντίγραφα ασφαλείας συχνά και χρησιμοποιήστε ένα εργαλείο για να το διορθώσετε Διαφθορά αρχείου Excel.

Εισαγωγή συγγραφέα:

Ο Felix Hooker είναι ειδικός στην ανάκτηση δεδομένων DataNumen, Inc., η οποία είναι ο παγκόσμιος ηγέτης στις τεχνολογίες ανάκτησης δεδομένων, συμπεριλαμβανομένων επισκευή rar καταστροφή αρχείων και sql προϊόντα λογισμικού ανάκτησης. Για περισσότερες πληροφορίες επισκεφθείτε www.datanumen.com

Κοινή χρήση τώρα:

Τα σχόλια είναι κλειστά.