Avatar billede jesper_munk Nybegynder
24. september 2009 - 11:39 Der 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?
Avatar billede jkrons Professor
24. september 2009 - 12:07 #1
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?
Avatar billede jkrons Professor
24. september 2009 - 12:13 #2
Ønsker du det bare beregnet for hver af perioderne, kan du bruge denne metode:

Med dine datoer i B2 til B6 og C2 til C6, kan du indsætte formler til beregning af år, måneder og dage i D2, E,2 og F2.

I D2 skal stå: =DATO.FORSKEL($B2;$C2;"y")
I E2 skal stå: =DATO.FORSKEL($B2;$C2;"ym")
I F2 skal stå: =DATO.FORSKEL($B2;$C2;"md")

Kopier formlerne nedad. Så har du de tal du ønsker for hver periode.
Avatar billede jesper_munk Nybegynder
24. september 2009 - 12:47 #3
der skal være en total i bunden så jeg skal finde en god måde at omregne fx. 88 hele dage om til måneder, så at det bliver så realistisk som muligt.
Avatar billede jesper_munk Nybegynder
17. september 2010 - 12:36 #4
Jeg lukker spørgsmålet.
Avatar billede jisch Mester
06. november 2019 - 17:13 #5
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
Avatar billede Ny bruger Nybegynder

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.

Loading billede Opret Preview
Kategori
Vi har et stort udvalg af Excel kurser. Find lige det kursus der passer dig lige her.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester