26. marts 2005 - 13:28Der er
21 kommentarer og 1 løsning
Alder: År- måneder-dage
I(a1) fødselsdato I(b1) dags dato (=idag) I(c3) alder: år-måneder-dage a1 22-03-1990 a2 26-03-2005 d.v.s. 15 år 0 md 4 dage men c3: a2-a1 siger 15 01 04 formentlig 4 dage ind i første måned i det l5. år. Og det er jo sådan set rigtigt, men ikke det, jeg ville frem til!!
I lang tid har samarbejdsbranchen fokuseret på at forbedre enhedsfunktioner – bedre kameraer, klarere lyd og smartere software. Men den virkelige forvandling handler ikke om funktioner.
Det skyldes formentlig at der var 53 uger i 2005. Det er årsagen til regnefejlen. Hvis du i stedet for prøver at skrive 26-10-04, så regner den rigtig. For at få det rigtige resultat er du nødt til at "fuske".
Problemet er, at den formel giver dig det samlede antal dage. Så skal du selveregne videre om til år, måneder og dage. Når du får 15 01 04 er det et tilfælde. Det betyder i virkeligheden 15. januar 1904 og er den dato, der svarer forskellens serienummer, nemlig 5483.
Du kan bruge denne funktion i stedet. Læg funktionen ind i et modul, og brug den som alle andre indbyggede funktioner:
Function Alder(Date1 As Date, Date2 As Date) As String Dim Y As Integer Dim M As Integer Dim D As Integer Dim Temp1 As Date Temp1 = DateSerial(Year(Date2), Month(Date1), Day(Date1)) Y = Year(Date2) - Year(Date1) + (Temp1 > Date2) M = Month(Date2) - Month(Date1) - (12 * (Temp1 > Date2)) D = Day(Date2) - Day(Date1) If D < 0 Then M = M - 1 D = Day(DateSerial(Year(Date2), Month(Date2) + 1, 0)) + D + 1 End If Age = Y & " år " & M & " måneder " & D & " dage" End Function
Function Alder(Date1 As Date, Date2 As Date) As String Dim Y As Integer Dim M As Integer Dim D As Integer Dim Temp1 As Date Temp1 = DateSerial(Year(Date2), Month(Date1), Day(Date1)) Y = Year(Date2) - Year(Date1) + (Temp1 > Date2) M = Month(Date2) - Month(Date1) - (12 * (Temp1 > Date2)) D = Day(Date2) - Day(Date1) If D < 0 Then M = M - 1 D = Day(DateSerial(Year(Date2), Month(Date2) + 1, 0)) + D + 1 End If Alder = Y & " år " & M & " måneder " & D & " dage" End Function
Ja, men desværre ikke hvis statdatoen ligger efter slutdatoen. Fx 27-03-90 til 26-03-05 giver 15 år, 0 måneder og -1 dag, og selv om det er rigtigt, er det jo ikke sådan, at du vil have det :-)
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.