რამდენად ხშირად ვიღებთ თარიღებს ცხრილებში, რომლებიც მოწოდებულია ჩვენთვის, როგორც 12.26.2016, ან 26/12/2016 (დიდი ბრიტანეთის ფორმატი), მხოლოდ იმისთვის, რომ გვითხრეს, რომ თარიღი არასწორია ან არ არის 26 თვე? ეს სტატია იკვლევს თარიღების დაფიქსირებას VBA-ით TRIM, LEFT, RIGHT და MID ფუნქციების გამოყენებით.
სტატიაში ვარაუდობენ, რომ მკითხველს აქვს დეველოპერის ლენტი ნაჩვენები და იცნობს VBA რედაქტორს. თუ არა, გთხოვთ Google „Excel Developer Tab“ ან „Excel Code Window“.
ამ სავარჯიშოში xlsm შეგიძლიათ ჩამოტვირთოთ აქ დაწკაპუნებით.
არ არის ჩვენი პრობლემა!
პრობლემის გადასაჭრელად საუკეთესო ადგილი წყაროა. თუმცა, ვერცერთი დარწმუნება ვერ დაარწმუნებს სახელფასო განყოფილებას ამ შემთხვევაში, რომ 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. ერთად
