Cum să remediați datele în foaia de lucru Excel cu VBA

Distribuie acum:

Cât de des primim datele în foile de calcul care ni se furnizează ca 12.26.2016 sau 26 (format Regatul Unit), doar pentru a ni se spune că data este invalidă sau că nu există luna 12? Acest articol explorează remedierea datelor cu VBA, folosind funcțiile TRIM, LEFT, RIGHT și MID.

Articolul presupune că cititorul are afișată panglica pentru dezvoltatori și este familiarizat cu Editorul VBA. Dacă nu, vă rugăm să Google „Fila Dezvoltator Excel” sau „Fereastra Cod Excel”.

Xlsm din acest exercițiu poate fi descărcat aici.

Nu problema noastră!

Adăugarea a 7 zile la o datăCel mai bun loc pentru a rezolva o problemă este la sursă. Cu toate acestea, nicio măsură de convingere nu poate convinge departamentul de salarizare în acest caz că 12.26.1994 nu este o dată valabilă (cu excepția cazului în care este configurată astfel în Panoul de control al computerului pentru unele țări din Europa de Est).

De fapt, putem dovedi că nu este citibil de mașină. De exemplu, adăugarea a 7 zile la o dată:

"=01.01.2017 + 7" = #VALUE. 

"=2017.01.01 + 7" = #VALUE.

întrucât…

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

Să presupunem că ei sugerează că nu este problema lor.

Formate de dată

Primul lucru pe care trebuie să ne asigurăm este dacă data este în format SUA sau Internațional.Data în format SUA

Exemplul nostru arată clar că ne uităm la utilizarea în SUA, adică MDY, mai degrabă decât formatul internațional DMY.

Odată ce am stabilit sursa, trebuie să schimbăm formatele de date, astfel încât Excel să le poată înțelege, fie la nivel internațional, fie în SUA.

Cel mai bun mod de a face acest lucru este să schimbați data la aaaammzz, un format care nu necesită nicio calificare.

Cum lucram impreuna

Vom parcurge fiecare rând din document, apelând o funcție pentru a „corecta” data în funcție de țara sursă. Odată corectată data, vom calcula vârsta Angajatului.

Codul

Copiați următorul cod într-un modul nou:

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

Adăugați un buton la formularul dvs. și atribuiți-l la Sub Main.

Avertisment

Înainte de a adăuga prea mult cod complex la modulul dvs., rețineți că Excel nu este întotdeauna stabil în dezvoltarea de aplicații majore și, adesea, nu poate recupera codul deteriorat în sine. Rezultatul ar putea fi coruperea singurei copii, deoarece corupția are loc în „Salvare”.

Faceți backup frecvent și folosiți un instrument pentru a repara Coruperea fișierului Excel.

Introducerea autorului:

Felix Hooker este un expert în recuperarea datelor DataNumen, Inc., care este lider mondial în tehnologiile de recuperare a datelor, inclusiv repara rar corupție de fișiere și produse software de recuperare sql. Pentru mai multe informații vizitați www.datanumen.com

Distribuie acum:

Comentariile sunt închise.