Sa shpesh marrim data në fletëllogaritëse që na janë dhënë si 12.26.2016, ose 26/12/2016 (format në Mbretërinë e Bashkuar), vetëm për t'u thënë se data është e pavlefshme ose nuk ka muaj 26? Ky artikull eksploron fiksimin e datave me VBA, duke përdorur funksionet TRIM, LEFT, RIGHT dhe MID.
Artikulli supozon se lexuesi ka të shfaqur shiritin e Zhvilluesit dhe është i njohur me Redaktorin VBA. Nëse jo, ju lutemi Google "Excel Developer Tab" ose "Excel Code Window".
Xlsm në këtë ushtrim mund të shkarkohet këtu.
Nuk është problemi ynë!
Vendi më i mirë për të zgjidhur një problem është në burim. Megjithatë, asnjë masë bindjeje nuk mund ta bindë departamentin e listës së pagave në këtë rast se data 12.26.1994 nuk është një datë e vlefshme (përveç nëse është konfiguruar kështu në panelin e kontrollit të kompjuterit për disa vende të Evropës Lindore).
Në fakt mund të vërtetojmë se nuk është i lexueshëm nga makineri. Për shembull, duke shtuar 7 ditë në një datë:
"=01.01.2017 + 7" = #VALUE. "=2017.01.01 + 7" = #VALUE.
ndërsa…
"=2017-01-01 + 7" = 2017/01/08.
Le të supozojmë se ata sugjerojnë se nuk është problemi i tyre.
Formatet e datës
Gjëja e parë që duhet të konstatojmë është nëse data është në formatin amerikan apo ndërkombëtar.
Shembulli ynë e bën të qartë se po shikojmë përdorimin e SHBA-së, dmth. MDY sesa formatin ndërkombëtar DMY.
Pasi të kemi vendosur burimin, duhet të ndryshojmë formatet e të dhënave në mënyrë që Excel të mund t'i kuptojë ato, qoftë ndërkombëtarisht apo në SHBA.
Mënyra më e mirë për ta bërë këtë është të ndryshoni datën në yyyymmdd, një format që nuk ka nevojë për kualifikim.
Procesi
Ne do të kalojmë në çdo rresht në dokument, duke thirrur një funksion për të "korrigjuar" datën sipas vendit të burimit. Pasi të korrigjohet data, ne do të llogarisim moshën e punonjësit.
Kodi
Kopjoni kodin e mëposhtëm në një modul të ri:
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
Shtoni një buton në formularin tuaj dhe caktojeni atë në Sub Main.
caveat
Përpara se të shtoni shumë kod kompleks në modulin tuaj, këshillohuni që Excel nuk është gjithmonë i qëndrueshëm në zhvillimin e aplikacioneve kryesore dhe shpesh nuk është në gjendje të rikuperojë vetë kodin e dëmtuar. Rezultati mund të jetë prishja e kopjes tuaj të vetme pasi korrupsioni ndodh në "Ruaj".
Bëni kopje rezervë shpesh dhe përdorni një mjet për të rregulluar Dëmtimi i skedarit Excel.
Hyrje e autorit:
Felix Hooker është një ekspert i rikuperimit të të dhënave në DataNumen, Inc., e cila është lider botëror në teknologjitë e rikuperimit të të dhënave, duke përfshirë riparim rar paraqesin korrupsionin dhe produkte softuerike për rikuperimin sql. Për më shumë informacion vizitoni www.datanumen.com
