| |
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 -
|