VBA ilə Excel iş vərəqinizdəki tarixləri necə düzəltmək olar

İndi paylaş:

Bizə 12.26.2016 və ya 26/12/2016 (Böyük Britaniya formatı) kimi təqdim olunan cədvəllərdə tarixləri nə qədər tez-tez əldə edirik, yalnız tarixin etibarsız olduğunu və ya 26-cı ayın olmadığını bildirmək üçün? Bu məqalə TRIM, LEFT, RIGHT və MID funksiyalarından istifadə edərək VBA ilə tarixlərin təyin edilməsini araşdırır.

Məqalə oxucunun Tərtibatçı lentinin göstərildiyini və VBA Redaktoru ilə tanış olduğunu güman edir. Əgər belə deyilsə, lütfən Google “Excel Developer Tab” və ya “Excel Code Window”.

Bu məşqdəki xlsm endirilə bilər burada.

Problemimiz Deyil!

Tarixə 7 Gün Əlavə EdilirProblemi həll etmək üçün ən yaxşı yer mənbədir. Bununla belə, heç bir inandırıcı qüvvə əmək haqqı departamentini bu halda 12.26.1994-cü il tarixinin etibarlı tarix olmadığına inandıra bilməz (bəzi Şərqi Avropa ölkələri üçün kompüterin İdarəetmə Panelində belə konfiqurasiya edilmədiyi halda).

Əslində bunun maşınla oxuna bilmədiyini sübut edə bilərik. Məsələn, tarixə 7 gün əlavə etməklə:

"=01.01.2017 + 7" = #VALUE. 

"=2017.01.01 + 7" = #VALUE.

Halbuki…

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

Fərz edək ki, onlar bu onların problemi olmadığını deyirlər.

Tarix Formatları

Təsdiq etməli olduğumuz ilk şey, tarixin ABŞ və ya Beynəlxalq formatda olmasıdır.ABŞ Formatında Tarix

Nümunəmiz aydın olur ki, biz ABŞ-dan istifadəyə, yəni beynəlxalq DMY formatına deyil, MDY-yə baxırıq.

Mənbəni təyin etdikdən sonra, Excel-in beynəlxalq və ya ABŞ-da onlara məna verə bilməsi üçün məlumat formatlarını dəyişdirməliyik.

Bunun ən yaxşı yolu tarixi yyyymmdd formatına dəyişdirməkdir, bu format heç bir ixtisas tələb etmir.

Proses

Mənbə ölkəsinə görə tarixi “düzəltmək” funksiyasını çağıraraq, sənəddəki hər bir sətirdən keçəcəyik. Tarix düzəldildikdən sonra biz İşçinin yaşını hesablayacağıq.

Kod

Aşağıdakı kodu yeni modula kopyalayın:

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

Formunuza düymə əlavə edin və onu Alt Əsasa təyin edin.

Caveat

Modulunuza həddən artıq mürəkkəb kod əlavə etməzdən əvvəl nəzərə alın ki, Excel əsas proqram inkişafında həmişə sabit deyil və çox vaxt zədələnmiş kodu özü bərpa edə bilmir. Nəticə sizin yeganə nüsxənizin pozulması ola bilər, çünki korrupsiya “Saxla”da baş verir.

Tez-tez ehtiyat nüsxəsini çıxarın və düzəltmək üçün alətdən istifadə edin Excel faylının pozulması.

Müəllif Giriş:

Feliks Hooker məlumatların bərpası üzrə mütəxəssisdir DataNumendaxil olmaqla məlumatların bərpası texnologiyaları üzrə dünya lideri olan , Inc təmir rar fayl pozulması və sql bərpa proqram məhsulları. Ətraflı məlumat üçün ziyarət edin www.datanumen.com

İndi paylaş:

Şərhlər bağlıdır.