Ինչպե՞ս Ամրագրել Ամսաթվերը ձեր Excel աշխատաթերթում VBA- ի հետ

Կիսվել հիմա ՝

Որքա՞ն հաճախ ենք մեզ տրամադրում աղյուսակներում ամսաթվերը 12.26.2016 թ., Կամ 26/12/2016 թ. (Մեծ Բրիտանիայի ձևաչափ), որպեսզի միայն տեղեկացնեն, որ ամսաթիվն անվավեր է կամ 26 ամիս չկա: Այս հոդվածը ուսումնասիրում է VBA- ի հետ ամսաթվերը ֆիքսելը, օգտագործելով TRIM, LEFT, RIGHT և MID գործառույթները:

Հոդվածը ենթադրում է, որ ընթերցողը ցուցադրում է erրագրավորողի ժապավենը և ծանոթ է VBA խմբագրին: Եթե ​​ոչ, խնդրում ենք Google- ի «Excel Developer Tab» կամ «Excel Code Window»:

Այս վարժության xlsm- ը կարելի է ներբեռնել այստեղ.

Մեր խնդիրը չէ:

7 օր ավելացնելով ամսաթվինԽնդիրը լուծելու լավագույն տեղը աղբյուրն է: Այնուամենայնիվ, ոչ մի համոզում չի կարող այս դեպքում աշխատավարձերի բաժին համոզել, որ 12.26.1994 թ. XNUMX թվականը վավեր ամսաթիվ չէ (եթե դա արևելաեվրոպական որոշ երկրների համար համակարգչի կառավարման վահանակում չի կազմված):

Իրականում մենք կարող ենք ապացուցել, որ դա մեքենայական ընթերցանություն չունի: Օրինակ ՝ ամսաթվին 7 օր ավելացնելով ՝

"=01.01.2017 + 7" = #VALUE. 

"=2017.01.01 + 7" = #VALUE.

մինչդեռ

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

Ենթադրենք, որ նրանք ենթադրում են, որ դա իրենց խնդիրը չէ:

Ամսաթվերի ձևաչափեր

Առաջին բանը, որ պետք է ճշտենք `ամսաթիվը ԱՄՆ-ի՞ց է, թե՞ միջազգային ձևաչափով:Ամսաթիվ ԱՄՆ ձևաչափով

Մեր օրինակը պարզ է դարձնում, որ մենք ուսումնասիրում ենք ԱՄՆ օգտագործումը, այսինքն `MDY- ն, այլ ոչ թե միջազգային ձևաչափը DMY:

Աղբյուրը հաստատելուց հետո մենք պետք է փոխենք տվյալների ձևաչափերը, որպեսզի Excel- ը կարողանա իմաստավորել դրանք ՝ անկախ նրանից, թե միջազգային, թե ԱՄՆ:

Դա անելու լավագույն միջոցը ամսաթիվը yyyymmdd փոխելն է ՝ ձևաչափ, որը որակավորման կարիք չունի:

Գործընթացը

Մենք շրջելու ենք փաստաթղթի յուրաքանչյուր շարքում `կանչելով գործառույթ` ամսաթիվը «շտկելու» համար `ըստ աղբյուրի երկրի: Ամսաթիվը շտկելուց հետո մենք հաշվարկելու ենք աշխատողի տարիքը:

Կոդ

Պատճենեք հետևյալ կոդը նոր մոդուլի մեջ.

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

Ձևաթղթի վրա մի կոճակ ավելացրեք և հանձնարարեք Sub Main- ին:

Նախազգուշացում

Նախքան ձեր մոդուլին չափազանց շատ բարդ կոդ ավելացնելը, խորհուրդ տվեք, որ Excel- ը միշտ չէ, որ կայուն է հիմնական դիմումների մշակման գործում և հաճախ ի վիճակի չէ վերականգնել վնասված ծածկագիրը: Արդյունքը կարող է լինել ձեր միակ օրինակի փչացումը, քանի որ կոռուպցիան տեղի է ունենում «Փրկել» -ում:

Հաճախակի կրկնօրինակեք և ուղղեք գործիքի օգտագործումը Excel ֆայլի կոռուպցիա.

Հեղինակի ներածություն.

Ֆելիքս Հուքերը տվյալների վերականգման փորձագետ է DataNumen, Inc., որը տվյալների վերականգման տեխնոլոգիաների համաշխարհային առաջատարն է, այդ թվում նորոգում rar ներկայացնել կոռուպցիա և sql վերականգնման ծրագրային արտադրանքները: Լրացուցիչ տեղեկությունների համար այցելեք www.datanumen.com

Կիսվել հիմա ՝

Comments փակվում են: