Den hemmelige funktion i Excel

Når vi taler indbyggede funktioner i Excel, så som fx SUM(), YDELSE(), SUMPRODUKT() og så videre, kan vi altid få hjælp til dem, hvis vi er i tvivl. vælg Indsæt - Funktion, find funktionen på listen, og du bliver guidet gennem brugen af den pågældende funktion. Er du i tvivl, kan du slå op i hjælpen og få hjælp til funktionen. Jeg indrømmer at hjælpen ikke altid er lige brugbar, men den er der.

Der er dog mindst én funktion i Excel, som ikke kan findes under Indsæt - Funktion, og så du ikke kan finde noget som helst om i hjælpen*. Den giver heller argumenthjælp, når man indtaster den. Det er funktionen DATO.FORSKEL(). Det er ikke, som nogle måske ville tro, en ny funktion, som er levet indført og af en eller anden grund glemt. Funktionen har eksisteret i Excel i hvert fald siden Excel 95 (og så vidt husker også i forgængeren, Excel 5), og den lever stadig sit eget, skjulte liv i Excel 2007.

Årsagen til funktionens tilsyneladende hemmelighed har der været mange gisninger om, men noget svar der der aldrig givet. Nogle mener dog, at det skyldes funktionens lidt "mærkelige" måde at beregne på, af og til med rigtige, men overraskende resultater til følge, som er grunden til, at den aldrig er beskrevet nærmere.

Funktionen findes også i den engelske version af Excel. Her hedder den DATEDIF() og er lige så udokumenteret. Funktionen må ikke forveksles med DATEDIFF, der er en VBA funktion, som er dokumenteret rigeligt. Det er altså regnearksfunktionen, der er "hemmelig".

Som navnet antyder, finder funktionen forskellen mellem to datoer. Den har tre argumenter, Startdato, Slutdato og Enhed).

Startdato skal være en dato i Excels datoformat, og den skal ligge før Slutdato, som også skal være i det korrekte datoformat. Ligger Slutdato før Startdato returnere funktionen fejlen #NUM!. Enhed, er den enhed, som resultatet skal returneres i. Her kender funktionen følgende, d, m, y samt md og yd og ym. Alle enheder skal skrives i anførselstegn, fx

=DATO.FORSKEL(A1;A2;"d")

  • "d" = returnerer antallet af dage mellem de to datoer. Dette svarer til, at trække de to datoer fra hinanden.
  • "m" = returneret antallet af hele måneder. Påbegyndte måneder tælles ikke med. 1-2-08 til 28-8-08 giver således 0 måneder. Rettes slutdato til 1-3-08 giver det én.
  • "y" = returnere antallet af hele år. Som i "m" tælles påbegyndte år ikke med. Bemærk at også i den danske version af funktionen, bruges der "y" om år, ikke "å".
  • "md" returnerer antallet af dage ud over hele måneder. =DATO.FORSKEL(A1;A2;"md") returner således 0, hvis datoerne er 1-2-09 og 1-3-09, men 27, hvis datoerne er 1-2-09 og 28-2-09.
  • "yd" returnerer antallet af dage ud over hele år. =DATO.FORSKEL(A1;A2;"yd") returner således 27, både hvis datoerne er 1-2-08 og 1-3-09 og 1-2-09 og 1-3-09.
  • "ym" returnerer antallet af hele måneder ud over hele år. =DATO.FORSKEL(A1;A2;"ym") returnerer således 1, hvis startdato er 1-2-08 og slutdato 1-3-09, men 0 hvis slutdatoen er 28-2-09.

Det er specielt de sidste tre argumentværdier, der giver anledning til uventede resultater. Disse er dog altid korrekte ud fra funktionens logik, men det er ikke altid det samme som den menneskelige logik :-)

Eksempel:

=DATO.FORSKEL(A1;A2;"md") med startdato 31-1-08 og slutdato 1-3-08 giver -1 dag.
=DATO.FORSKEL(A1;A2;"md") med startdato 31-1-09 og slutdato 29-3-09 giver -2 dage.

Beregner jeg fx måneder mellem 31-1-09 og 1-3-09 får jeg 1. Der er altså 1 måned og -2 dage mellem disse to datoer. Retter jeg Startdatoen til 1-2-09, er der stadig 1 måned, men nu er der 0 dage. Perioden er tilsyneladende blevet to dage længere af, at jeg har gjort den 1 dag kortere ved at rykke startdato. Problemet opstår typisk omkring februar. Ved andre perioder opstår der andre "fænomener", fx

=DATO.FORSKEL(A1;A2;"md") med startdato 31-8-09 og slutdato 1-10-09 giver 0 dage. Det samme gør funktionen med startdato 1-9-09 i stedet for 31-8. Beregnet med "m" er tallet for måneder i begge tilfælde 1. der er altså 1 måned og 0 dage, uanset om man ændrer startdatoen med 1 dag. Ændrer man derimod startdato til 2-9-09, returneres 29 dage.

"yd" og "ym" giver tilsvarende overraskende resultater. Årsagen er, at DATO.FORSKEL() tilsyneladende primært tager udgangspunkt i Startdatoens Måneds- og Års-værdier.

Bortset fra disse mindre "underligheder" er funktionen som regel ganske effektiv, og kan være nemmere at bruge end fx at skulle regne antallet af måneder ud med de indbyggede funktioner. Skal man fx finde antallet af hele måneder mellem 31-1-09 og 15-9-09 kan man bruge =HELTAL((A2-A1)/30), men den giver kun et tilnærmet resultat, da ikke alle måneder jo er 30 dage. Bedre - men mere besværlig er

=HVIS(DAG(A2)>DAG(A1);MÅNED(A2)-MÅNED(A1);MÅNED(A2)-MÅNED(A1)-1) og så er =DATO.FORSKEL(A1;A2;"m") klart hurtigere at skrive.

* Af ukendte årsager var funktionen faktisk beskrevet i hjælpen til Excel 2000, men heller ikke her fandtes den under Indsæt - Funktion, og både før og siden har den altså slet ikke været beskrevet.

NB! DATO.FORSKEL kan ikke bruges i VBA, fx som Application.WorksheetFunction(DATEDIF...). Her skal man bruge VBA funktionen Datediff (med to f'er).

- Til Top -
- Retur til Excel -