Ako často dostaneme dátumy v tabuľkách dodaných k nám 12.26.2016 alebo 26/12/2016 (formát UK), len aby sme povedali, že dátum je neplatný alebo nie je 26. mesiac? Tento článok skúma opravenie dátumov pomocou VBA pomocou funkcií TRIM, LEFT, RIGHT a MID.
V článku sa predpokladá, že čitateľ má zobrazenú pásku pre vývojárov a je oboznámený s editorom VBA. Ak nie, navštívte Google kartu „Vývojár Excel“ alebo „Okno kódu Excel“.
XLSM v tomto cvičení je možné stiahnuť tu.
Nie náš problém!
Najlepšie vyriešite problém pri zdroji. Avšak v tomto prípade nemôže nijaké presvedčenie presvedčiť mzdové oddelenie, že 12.26.1994. XNUMX. XNUMX nie je platným dátumom (pokiaľ to nie je nakonfigurované v ovládacom paneli počítača pre niektoré východoeurópske krajiny).
V skutočnosti môžeme dokázať, že to nie je strojovo čitateľné. Napríklad pridanie 7 dní k dátumu:
"= 01.01.2017 + 7" = # HODNOTA. "= 2017.01.01 + 7" = # HODNOTA.
keďže…
„= 2017 + 01“ = 2017. 01. 08.
Predpokladajme, že naznačujú, že to nie je ich problém.
Formáty dátumu
Prvá vec, ktorú musíme zistiť, je, či je dátum v USA alebo v medzinárodnom formáte.
Náš príklad objasňuje, že sa zameriavame na použitie v USA, teda na MDY, a nie na medzinárodný formát DMY.
Len čo sme vytvorili zdroj, musíme zmeniť dátové formáty, aby ich Excel mohol chápať, či už na medzinárodnej úrovni, alebo v USA.
Najlepším spôsobom, ako to urobiť, je zmeniť dátum na rrrrmmdd, formát, ktorý nevyžaduje žiadnu kvalifikáciu.
Proces
Budeme prechádzať každým riadkom v dokumente a volať funkciu na „opravu“ dátumu podľa krajiny zdroja. Po oprave dátumu vypočítame vek zamestnanca.
Kódex
Skopírujte nasledujúci kód do nového modulu:
Možnosť Explicitné Sub Hlavné () Dim strNewFormat ako reťazec Dim strDate ako reťazcové listy ("Hlavné"). Rozsah ("B4"). Vyberte možnosť „Prechádzať riadkami hárka s použitím IDNumber ako kotvy“, aby ste zabránili predčasnému zastaveniu spôsobenému prázdny dátum narodenia Vykonať Kým ActiveCell> "" Ak ActiveCell.Offset (0, 2)> "" Potom strDate = ActiveCell.Offset (0, 2) 'Odstrániť úvodné alebo koncové medzery strDate = Orezať (strDate)' Zavolajte funkciu strNewFormat = ReformatDate (strDate, "USA") 'Zapíše výsledok z funkcie ReformatDate do nového stĺpca ActiveCell.Offset (0, 3) = strNewFormat' Určí vek odpočítaním predchádzajúceho stĺpca od dnešného dátumu ActiveCell.Offset (0, 4) = "= (NOW () - RC [-1]) / 365.25" 'Konvertovať na celé číslo, a tak odrezať desatinné miesta ActiveCell.Offset (0, 4) = Int (ActiveCell.Offset (0, 4)) Koniec AkRange ("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" Potom mm = vľavo (sDate, 2) dd = stredný (sDate, 4, 2) El. Mm = stredný (sDate, 4, 2) dd = vľavo (sDate, 2) Koniec, ak ReformatDate = rrrr & "-" & mm & „-“ & Koncová funkcia ddd
Pridajte do formulára tlačidlo a priraďte ho k Sub Main.
Varovanie
Pred pridaním príliš zložitého kódu do modulu nezabudnite, že program Excel nie je pri vývoji hlavných aplikácií vždy stabilný a často nedokáže samotný poškodený kód obnoviť. Výsledkom môže byť poškodenie vašej jedinej kópie, pretože k poškodeniu dôjde v priečinku „Uložiť“.
Často zálohujte a opravte pomocou nástroja Poškodenie súboru programu Excel.
Úvod autora:
Felix Hooker je expert na obnovu dát v DataNumen, Inc., ktorá je svetovým lídrom v oblasti technológií obnovy dát, vrátane oprava rar poškodenie súboru a softvérové produkty na obnovenie sql. Pre viac informácií navštívte www.datanumen. S
Nechaj odpoveď