Cara Memperbaiki Tarikh di Lembaran Kerja Excel Anda dengan VBA

Kongsi Sekarang:

Berapa kerap kita mendapat tarikh dalam spreadsheet yang dibekalkan kepada kita pada 12.26.2016, atau 26/12/2016 (format UK), hanya diberitahu tarikhnya tidak sah atau tidak ada bulan 26? Artikel ini menerangkan tarikh penetapan dengan VBA, menggunakan fungsi TRIM, LEFT, RIGHT dan MID.

Artikel tersebut menganggap pembaca memaparkan pita Pengembang dan biasa dengan Editor VBA. Sekiranya tidak, sila "Tab Pembangun Excel" Google atau "Tetingkap Kod Excel".

Xlsm dalam latihan ini boleh dimuat turun di sini.

Bukan Masalah Kita!

Menambah 7 Hari Sehingga TarikhTempat terbaik untuk menyelesaikan masalah adalah sumbernya. Walau bagaimanapun, tidak ada pujukan yang dapat meyakinkan jabatan gaji dalam hal ini bahawa 12.26.1994 bukanlah tarikh yang sah (kecuali jika dikonfigurasikan dalam Panel Kawalan komputer untuk beberapa negara Eropah Timur).

Sebenarnya kita dapat membuktikan bahawa ia tidak dapat dibaca oleh mesin. Contohnya, menambah 7 hari ke tarikh:

"=01.01.2017 + 7" = #VALUE. 

"=2017.01.01 + 7" = #VALUE.

sedangkan ...

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

Mari kita anggap mereka menunjukkan bahawa itu bukan masalah mereka.

Format Tarikh

Perkara pertama yang harus kita pastikan adalah sama ada tarikhnya dalam format AS atau Antarabangsa.Tarikh Dalam Format AS

Contoh kami menjelaskan bahawa kami melihat penggunaan USA, iaitu MDY dan bukan DMY format antarabangsa.

Sebaik sahaja kami mengetahui sumbernya, kami perlu mengubah format data agar Excel dapat mengetahuinya, sama ada di peringkat antarabangsa atau AS

Cara terbaik untuk melakukannya adalah dengan menukar tarikh menjadi yyyymmdd, format yang tidak memerlukan kelayakan.

Proses

Kami akan menelusuri setiap baris dalam dokumen, memanggil fungsi untuk "membetulkan" tarikh sesuai dengan negara sumber. Setelah tarikhnya diperbetulkan, kami akan mengira umur Pekerja.

Kod ini

Salin kod berikut ke modul baru:

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

Tambahkan butang ke borang anda, dan tetapkan ke Sub Main.

Kaveat

Sebelum menambahkan kod yang terlalu rumit ke modul anda, harap maklum bahawa Excel tidak selalu stabil dalam pengembangan aplikasi utama, dan sering tidak dapat memulihkan kod yang rosak itu sendiri. Hasilnya adalah kerosakan satu-satunya salinan anda kerana kerosakan berlaku di "Simpan".

Sandarkan dengan kerap dan gunakan alat untuk memperbaikinya Rasuah fail Excel.

Pengenalan Pengarang:

Felix Hooker adalah pakar pemulihan data di DataNumen, Inc., yang merupakan pemimpin dunia dalam teknologi pemulihan data, termasuk pembaikan rar memfailkan rasuah dan produk perisian pemulihan sql. Untuk maklumat lebih lanjut, lawati www.datanumen.com

Kongsi Sekarang:

Ruangan komen telah ditutup.