24. september 2009 - 11:39Der er
4 kommentarer og 1 løsning
Beregne andtal år, måneder og dage mellem flere datoer
Hej
jeg har et spørgsmål vedr. beregning af datointervaller.
Jeg har flere forskellige datointervaller og har brug for at finde ud af hvor mange år, måneder og dage der er imellem.
fx.
1. Periode 24-05-1972 31-08-1975 2. Periode 09-08-1976 16-09-1976 3. Periode 11-05-1977 31-03-1979 4. Periode 06-10-1997 31-12-1998 5. Periode 08-02-1999 07-05-1999
Jeg har brug for en total af alle perioder, der viser hvor mange hele år, måneder og dage. Der skal også tages højde for skudår og der må ikke regnes med et gennemsnit af dage i en måned.
er der nogen der kan hjælpe mig med at beregne dette?
Jeg er ikke helt med. I den første er der er umiddelbart 3 hele år, 3 hele måneder og 7 hele dage.
I den anden er der 1 hel måned og 7 hele dage.
I periode 3 er der 1 helt år, 10 hele måneder og 20 hele dage.
I periode 4 fire er der 1 helt år, 2 hele måneder og 25 hele dage.
I periode 5 er der: 2 hele måneder og 29 dage.
Hvis vi så skal til at lægge sammen så er der 5 hele år, 18 hele måneder og 88 hele dage. Hvordan mener du at de 88 dage skal omregnes til måneder og hvordan skal månederne omregnes til hele år?
Altaså kort sagt, hvilket resultat, forventer du at en formel skal give?
Hej jesper_munk Det er godt nok over 10 år siden du skrev spørgsmålet og du har nok fundet en løsning. Alligevel vil jeg angive hvordan jeg løste problemet (andre kan måske bruge det) i en VBA funktion. Funktionen udnytter Windows regler for skudår og finder FORSKELLEN i År, Måneder og Dage mellem 2 datoer. Da det er FORSKELLEN er rækkefølgen af Stat-Slut datoerne uden betydning i Funktionen. Her er Funktionen:
Function JIS_DiffDate(Date1, Date2 As Range, Optional Opt = 0, Optional Txt = True) As Variant ' ' Find differencen mellem 2 datoer - År, Mdr, Dage ' Opt =0: Returnerer År, Mdr, Dage ' Opt =1: Returnerer År ' Opt =2: Returnerer Mdr ' Opt =3: Returnerer Dage ' Txt: Hvis Opt=0: Vis tekst År, Mdr, Dg SAND/FALSK ' Application.Volatile True
Dim D, Da1, Da2 As Date
AY = 0: AM = 0: AD = 0 If Date1 <> "" And Date2 <> "" Then Da1 = Date1: Da2 = Date2 If Date1 > Date2 Then Da1 = Date2: Da2 = Date1 End If AY = Year(Da2) - Year(Da1): AYx = AY If Month(Da2) < Month(Da1) Then AY = AY - 1 ElseIf Month(Da2) = Month(Da1) Then If Day(Da2) < Day(Da1) Then AY = AY - 1 End If If AY <> AYx Then If Day(Da2) < Day(Da1) Then D = DateSerial(Year(Da2) + 1, Month(Da1), Day(Da1)) AM = 12 - Month(D) + Month(Da2) - 1 D = DateSerial(Year(Da2), Month(Da2) - 1, Day(Da1)) Else D = DateSerial(Year(Da2) + 1, Month(Da1) - 1, Day(Da1)) AM = 12 - Month(D) + Month(Da2) - 1 D = DateSerial(Year(Da2), Month(Da2), Day(Da1)) End If Else If Day(Da2) >= Day(Da1) Then D = DateSerial(Year(Da2), Month(Da1), Day(Da1)) AM = Month(Da2) - Month(D) D = DateSerial(Year(Da2), Month(Da2), Day(Da1)) Else D = DateSerial(Year(Da2), Month(Da1) + 1, Day(Da1)) AM = Month(Da2) - Month(D) D = DateSerial(Year(Da2), Month(Da2) - 1, Day(Da1)) End If End If AD = DateDiff("d", D, Da2, vbMonday) Else JIS_DiffDate = "" Beep Exit Function End If
If Opt = 0 Then JIS_DiffDate = Format(AY, "##0 ") + "År, " + Format(AM, "#0 ") + "Mdr, " + Format(AD, "#0 ") + "Dg" If Txt = False Then JIS_DiffDate = Format(AY, "##0 ") + ", " + Format(AM, "#0 ") + ", " + Format(AD, "#0 ") ElseIf Opt = 1 Then JIS_DiffDate = AY ElseIf Opt = 2 Then JIS_DiffDate = AM ElseIf Opt = 3 Then JIS_DiffDate = AD Else JIS_DiffDate = "#Værdi" End If
End Function
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.