Hányas vagy?

Vannak esetek, amikor nem elegendő nagy vonalakban, pusztán a születési év alapján kiszámítani valakinek az életkorát, hanem pontosan tudnunk kell, hogy az illető betöltött-e már egy bizonyos életkort. Ilyen esetek pl. a nagykorúvá válás a 18. életév betöltésével, a mentesülés életkor alapján az idegenforgalmi adó alól, vagy a 70 év felettiek utazási kedveszménye.
Az alábbi írásban több módszert is bemutatok, hogyan tudod a pontos életkort kiszámítani az Excelben.


1. Képlet
Mint tudod, az Excel az 1900. január 1. óta eltelt napok számaként tarja nyilván a dátumokat. Ha a tárgynapi dátumból kivonod a vizsgálni kívánt személy születési dátumát, megkapod, hány napos az illető.
A születési dátumot igény szerint cellahivatkozásként vagy közvetlenül a képletbe írt konstansként egyaránt megadhatod. Ha a feladat az, hogy egy adott napon állapítsuk meg az életkort, és ezt az eredményt konzerváljuk (azaz az életkor ne változzon meg az idő múltával, ha újra megnyitjuk a fájlt), akkor nem szabad a MA() függvénnyel hivatkoznunk a tárgynapi dátumra, hanem csak állandóként adhatjuk meg azt.
Meglepő módon a dátumkonstansokat (szám!) idézőjelek közé kell tenni (szöveg!).
Végezetül már csak évekre kell átszámolnod a napokat, és az eredményt a legközelebbi egész számra kell lefelé kerekítened. No persze ez sem annyira egyszerű ám, mint amilyennek hangzik. A kivitelezés kapcsán már bizony problémákba ütközünk.
Kezdjük azzal, hogy hány napos is egy év? Hát nem itt van már megint az a fránya szökőév. Nos, amennyiben kortársaink életkorát kívánjuk kiszámítani − és mi mást is kívánhatnánk, hiszen az Excel nem képes az 1900. január 1. előtti dátumokat kezelni, kései utódainknak pedig a születési dátuma az, amit nem ismerünk −, nem tévedünk nagyot, ha úgy vesszük, hogy minden negyedik év szökőév, azaz egy év 365,25 napból áll. E lazaságot megengedve kizárólag az 1900-ban születettek esetében tévedünk, hiszen 1900 nem volt szökőév, de ezt az apró malőrt más eljárással sem tudnánk elkerülni, hiszen − mint arról egy korábbi írásban már szó esett − az Excel tévesen szökőévként kezeli az 1900. esztendőt.
Aztán itt van a kerekítés... Mivel a töredék évet nem vehetjük figyelembe, hiszen a beöltött életévek száma érdekel csak bennünket, a kapott eredményt mindenképpen lefelé kell kerekítenünk. Abból adódóan, hogy az életévek esetében csak az egészeket vesszük figyelembe, nem kell a kerekítés mértékével bajlódnunk, elegendő az eredmény egész részét vennünk. E célra az INT() függvénynél nem találunk kézenfekvőbb megoldást.



Életkor kiszámítása képlettel


2. Függvény
Az ATP (Analysis ToolPak) készletben található YEARFRAC() függvény két dátum (kezdő dátum; befejező dátum) közötti napok számát töredék évként fejezi ki. Ha a függvény első argumentumaként a születési dátumot, második argumentumaként pedig a tárgynap dátumát adod meg, máris megkaptad az életkort tizedes szám alakjában. A függvény alkalmazása során is használhatók cellahivatkozások,  dátumkonstansok, illetve a mindenkori tárgynap meghatározásához a MA() függvény.
A nem kívánt tizedesektől a fentebb már említett INT() függvény segítségével tudsz megválni.
A függvény használatának egyetlen problémája, hogy ha egy másik számítógépen nincsen bekapcsolva az ATP, az életkor helyett az #ÉRTÉK hibaüzenettel találja szembe magát a felhasználó.

=INT(YEARFRAC(születési dátum;MA()))

6 megjegyzés:

Névtelen írta...

A fenti 1. képlet a születési és a mai dátumtól függően néha hibás eredményt ad. Tipikusan akkor, amikor szülinapja van az illetőnek. Azaz pl. a 6. szülinapján azt fogja jelezni, hogy még mindig 5 éves.

Gábor MÁTHÉ írta...

Hosszasan próbálkoztam, de nekem nem sikerült előidéznem, hogy bakizzon a képlet. Egy dolog bizonyos: ez a képlettel történő számítás nem egy egzakt módszer. Akinek pontos eredményre van szüksége, használja a megfelelő függvényeket.
A Liber Office Calc moduljának ráadásul önálló függvénye van az életkor e kétféle (napra pontos, illetve csak az év alapján történő) kiszámítására. A metódus a függvény argumentumán múlik. Csak tudnám, hogy ezeket a megoldásokat miért nem nyúlja le a Microsoft?
Lám, lám, olcsó húsnak sem mindig híg a leve...

Névtelen írta...

Már bocsáss meg, de ágyúval verébre...!
az év hónap és nap függvényekkel ugyanezt meg tudod oldani analysis Toolpak nélkül is és nem kell a szökőévekkel babrálni.

c3 aktuális dátum
b3 születési dátum

=HA(ÉS(ÉV(C3)-ÉV(B3)>=18;VAGY(HÓNAP(C3)>HÓNAP(B3);ÉS(HÓNAP(C3)=HÓNAP(B3);NAP(C3)>=NAP(B3))));"nagykorú";"kiskorú")

Gábor MÁTHÉ írta...

Nincs miért megbocsátanom, mivel nem haragszom...
Ami pedig az ágyút meg a verebet illeti, több szempontból sem értek egyet azzal, hogy bárkinek is az általad leírt megoldást ajánljam.
Azon hosszasan lehetne vitatkozni, mit is tekintünk egyszerűbb megoldásnak. (Példának okáért az Excelben végzett feladatok elvégzése a program képességeinek a töredékét sem használja ki, így már maga az a tény, hogy ezt a programot használja valaki, ágyúval lövés verébre...)
Személy szerint azokat a megoldásokat részesítem előnyben, amelyek első ránézésére is könnyen megérthetők. Sem az egymásba ágyazott függvények, sem a függvényeknek a Visual Basictől eltérő - sokak számára idegen - szintaxisa nem segítik a könnyebb olvashatóságot. Azt is vallom, hogy minden, a felhasználó által végrehajtott billentyűleütés egy potenciális hibaforrás, így az a képlet, ami rövidebb, kevesebb hibalehetőséget hordoz magában.
Oktatói pályafutásom során azt tapasztalom, hogy a logikai függvények sajnos a "mezei felhasználók" ismereti körén kívül esnek. Míg a kötőszavakat tanítják általános és középiskolában nyelvtanból, nem tanítják matematikából.
Írásaim során nem tudom és nem is akarom elfojtani a bennem buzgó oktatói hajlamot. Jelen esetben az is szándékom volt, hogy olvasóim figyelmébe ajánljam a kevéssé ismert YEARFRAC() függvényt.
(Megjegyzem, a 2010-es verzió óta szerencésre megszűntek az ATP függvények, nem kell bekapcsolni semmit.)

De ha már az egyszerűségnél tartunk... Szeretném megérni azt a napot, amikor a redmondi óriás lenyúlja végre az ingyenes Libre Office Calcjának YEARS (MONTHS, DAYS) függvényét, amely egymaga mindkét módszerrel könnyedén számolja az életkort. :)

Névtelen írta...

5. Hogyan jeleníthetem meg egy cellában, hogy aktuálisan hány éves, hónapos és napos vagyok?
SEGÍTSÉGET ELŐRE IS KÖSZÖNÖM!
DONI

Gábor MÁTHÉ írta...

A megoldáshoz a súgóban sem dokumentált DÁTUMTÓLIG() függvény használatára van szükség.
Az alábbi linken találod a megoldást:
http://office.microsoft.com/hu-hu/windows-sharepoint-services-help/datumtolig-fuggveny-HA001160981.aspx
Ha nem boldogulsz, szólj, szívesen segítek!

Megjegyzés küldése