როგორ დავაფიქსიროთ თარიღები თქვენს Excel სამუშაო ფურცელში VBA-ით

გააზიარე ახლა:

რამდენად ხშირად ვიღებთ თარიღებს ცხრილებში, რომლებიც მოწოდებულია ჩვენთვის, როგორც 12.26.2016, ან 26/12/2016 (დიდი ბრიტანეთის ფორმატი), მხოლოდ იმისთვის, რომ გვითხრეს, რომ თარიღი არასწორია ან არ არის 26 თვე? ეს სტატია იკვლევს თარიღების დაფიქსირებას VBA-ით TRIM, LEFT, RIGHT და MID ფუნქციების გამოყენებით.

სტატიაში ვარაუდობენ, რომ მკითხველს აქვს დეველოპერის ლენტი ნაჩვენები და იცნობს VBA რედაქტორს. თუ არა, გთხოვთ Google „Excel Developer Tab“ ან „Excel Code Window“.

ამ სავარჯიშოში xlsm შეგიძლიათ ჩამოტვირთოთ აქ დაწკაპუნებით.

არ არის ჩვენი პრობლემა!

თარიღამდე 7 დღის დამატებაპრობლემის გადასაჭრელად საუკეთესო ადგილი წყაროა. თუმცა, ვერცერთი დარწმუნება ვერ დაარწმუნებს სახელფასო განყოფილებას ამ შემთხვევაში, რომ 12.26.1994 წლის XNUMX/XNUMX არ არის სწორი თარიღი (თუ ეს კონფიგურირებულია კომპიუტერის მართვის პანელში აღმოსავლეთ ევროპის ზოგიერთი ქვეყნისთვის).

სინამდვილეში ჩვენ შეგვიძლია დავამტკიცოთ, რომ ის არ არის მანქანით წაკითხვადი. მაგალითად, თარიღს 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.

Caveat

სანამ თქვენს მოდულში ძალიან ბევრ რთულ კოდს დაამატებთ, გაითვალისწინეთ, რომ Excel ყოველთვის არ არის სტაბილური ძირითადი აპლიკაციის შემუშავებისას და ხშირად ვერ ახერხებს თავად დაზიანებული კოდის აღდგენას. შედეგი შეიძლება იყოს თქვენი ერთადერთი ასლის გაფუჭება, რადგან კორუფცია ხდება „შენახვაში“.

ხშირად გააკეთეთ სარეზერვო ასლები და გამოიყენეთ ხელსაწყოები გამოსასწორებლად Excel ფაილი დაზიანებულია.

ავტორი შესავალი:

ფელიქს ჰუკერი არის მონაცემთა აღდგენის ექსპერტი DataNumen, Inc., რომელიც მსოფლიო ლიდერია მონაცემთა აღდგენის ტექნოლოგიებში, მათ შორის სარემონტო rar შეიტანოს კორუფცია და sql აღდგენის პროგრამული პროდუქტები. დამატებითი ინფორმაციისთვის ეწვიეთ www.datanumen. ერთად

გააზიარე ახლა:

კომენტარები დახურულია.