Egyik kedves Olvasóm igencsak fogós fejtörővel örvendeztetett meg a napokban és csak egy igazi örömöt okozó, kiadós elmélkedés után született meg a megoldás, ami természetesen, ahogy más Excel-problémáknál, úgy valószínűleg most sem az egyetlen lehetséges megoldás, de ez egy tényleg jó kis feladvány, szóval szokás szerint nyitott vagyok más megoldási módszerekre is.
Maga a kérdés több témakört ölel fel, de a probléma középpontjában a dátumok és az Excel dátumkezelése áll, hiszen alapvetően közismert, hogy a táblázatkezelő az 1900-as és az 1904-es dátumrendszert tudja használni, azaz az egyiknél 1900. január elseje jelenti az egyes sorszámot, a másiknál pedig 1904. január elseje.
Amiért ez igen fájó pont az az, hogy bár formátum és bevitel szempontjából az Excel képes kezelni 1900 előtti dátumokat is, kalkulációkat már nem tudunk velük végezni:
Persze ez nem egy mindennap felmerülő igény, az tény, de ettől függetlenül mi van, ha régi történelmi személyiségek pontos életkorát szeretnénk napban megadni születésük és haláluk időpontja alapján? Vagy teljesen más okból lenne erre szükségünk?
Anno itt írtam az egyik rejtélyes Excel-formuláról, a DATEDIF-ról, amely önmagában most sem tud segíteni nekünk, hiszen ha 1900 előtti dátumokat adunk be paraméterként, akkor ez a függvény is egy vaskos #VALUE! hibaüzenettel válaszol, de ha kicsit kreatívak vagyunk, akkor mégis el tudjuk érni, hogy megkapjuk a kívánt értéket.
Adott tehát egy egyszerű kis feladat:
Alapból itt most fejből is meg tudjuk mondani az eredményt, de a cél az, hogy bármely dátum és bármennyi dátum esetén működjön ez a logika. Összesen három függvényt fogunk felhasználni a különbség meghatározásához, a fentebb már említett DATEDIF formula mellett egy LEN és egy RIGHT is kelleni fog majd - plusz az, hogy a dátumok egységes formátumban legyenek (ezen függvényekről hosszabban nem írok már, elég sok posztban bemutattam őket, úgyhogy valószínűleg minden Olvasó előtt ismertek).
Az én példámban szereplő formátum esetén első lépésként vegyük le az utolsó négy karaktert a dátumról:
=LEFT(K3,LEN(K3)-4)
Mit is teszünk? A K3 cellában szereplő értékből levágjuk az érték karakterszáma-4 értéket, azaz konkrétan az évet (hiszen ez pont négy karakter az értékünk végén):
Majd újra hozzátesszük az évet, de nem ugyanúgy, hanem a dátumaink tartományát figyelembe véve hozzáadunk még több száz évet:
=LEFT(K3,LEN(K3)-4)&RIGHT(K3,4)+400
Az előbb levágott, most már év nélküli részhez hozzáadjuk teljes eredeti dátumunk utolsó négy karakterét, tehát az évet (RIGHT(K3,4)), megnövelve 400-zal:
Ezt teljesen ugyanezzel a módszerrel megismételjük a másik dátumra is:
=LEFT(L3,LEN(L3)-4)&RIGHT(L3,4)+400
Ezután pedig szimplán csak beágyazzuk a két, most már jelentősen jövőbeni dátumot egy DATEDIF függvénybe és meg is van a különbségünk:
=DATEDIF(LEFT(K3,LEN(K3)-4)&RIGHT(K3,4)+400,LEFT(L3,LEN(L3)-4)&RIGHT(L3,4)+400,"d")
Mint tudjuk, DATEDIF függvényünk első két paramétere a két dátum, amelynek különbségét meg akarjuk határozni, harmadik paramétere pedig az az indikátor, amellyel jelezzük, hogy napban, hónapban, évben stb. szeretnénk látni a különbséget.
Ez biztosan nem a legszebb megoldás, de elvileg olyan makró nélküli eredmény, amire megbízhatóan támaszkodhatunk - ennek ellenére további ötleteket, javaslatokat szívesen fogadok.
Update: az évszámhoz kizárólag 400-at illetve többszörösét adhatjuk hozzá a szökőévek okán. Köszönet az észrevételért.