Ik ben bezig met het maken van een verdagskalender in Excel XP.
Daarbij zet ik de naam in A2
Geboortedatum in in B2 (eigenschappen cel: notatie = d-m-jjjj)
Leeftijd in C2 door formule "=vandaag()-b2" (eigenschappen cel:
notatie = jj)
Het vreemde is echter dat iemand die op deze dag jarig is (bv 17 jul
1970) niet 33 is, maar 32. Ook als ik Windows klokje op 18 jul zet, is
deze brave borst nog steeds 32.
Pas met een Windows tijd van 19 juli is hij 33 geworden!! ???
Volgens de Westerse methode zou dat dus niet kloppen. Weet iemand een
Excel oplossing voor mij? (Win XP / Excel XP)
Alvast bedankt.
---
e®i©
plaats berichten ook in nieuwsgroep!
leave messages also in usenet groups!
Bennie
>-----Oorspronkelijk bericht-----
>.
>
Arend
"Bennie" <bcl...@chello.nl> schreef in bericht
news:000301c34c85$bb78e6d0$a501...@phx.gbl...
groetjes PavaRE
"e®i©" <w...@knows.com> schreef in bericht
news:ovidhvkm8tkgu6p9l...@4ax.com...
dit werkt bij mij correct (xlXP), mits hij al geboren is..
want als b2>vandaag geeft hij (terecht) een fout :-)
en ik neem aan dat geboortetijdstip niet van belang is.
=ALS(B2="";"";DATUMVERSCHIL(INTEGER(B2);VANDAAG();"Y"))
keepITcool
< email : keepitcool chello nl (with @ and .) >
< homepage: http://members.chello.nl/keepitcool >
Groetjes PavaRE
"Paul Van Reeth" <paul.va...@pandora.be> schreef in bericht
news:V%ARa.16397$F92....@afrodite.telenet-ops.be...
>In c2
>=DATUMVERSCHIL(B2;VANDAAG();"y") en
>celeigenschappen op standaard zetten
>
>Arend
>
>"Bennie" <bcl...@chello.nl> schreef in bericht
>news:000301c34c85$bb78e6d0$a501...@phx.gbl...
>
>A1 Geboortedatum
>C1 =ALS(NU()-VANDAAG()>=B1;DATUMVERSCHIL(A1;VANDAAG
>();"y");DATUMVERSCHIL ;VANDAAG()-1;"y"))
>
>Bennie
Beiden vriendelijk bedankt voor de snelle hulp!
Vooral voor de aardigeid:
Als je een wat uitgebreidere weergave van de leeftijd wilt retourneren:
=ALS(DATUMVERSCHIL(B1;NU();"y")=0;"";DATUMVERSCHIL(B1;NU();"y")&ALS(DATUMVER
SCHIL(B1;NU();"md")=0;" jaren en ";" jaren,
"))&ALS(DATUMVERSCHIL(B1;NU();"ym")=0;"";ALS(DATUMVERSCHIL(B1;NU();"md")=0;D
ATUMVERSCHIL(B1;NU();"ym")&" maanden ";DATUMVERSCHIL(B1;NU();"ym")&" maanden
en
"))&ALS(DATUMVERSCHIL(B1;NU();"md")=0;"precies";DATUMVERSCHIL(B1;NU();"md")&
" dagen")
Dit geeft op 19/07/2003 voor de volgende 4 geboortedata:
naam (A1:A4) geboortedatum (B1:B4) leeftijd (C1:C4)
Jan donderdag 5 december 1968 34 jaren, 7 maanden en 14
dagen
Piet vrijdag 13 november 1970 32 jaren, 8 maanden en
6 dagen
Joris woensdag 19 april 2000 3 jaren en 3 maanden
precies
Corneel vrijdag 15 november 2002 8 maanden en 4 dagen
In plaats van NU(), waarin ook de tijd is opgenomen, kun je overal VANDAAG()
gebruiken. Het maakt de formule allen nog wat langer. Er zijn wel truukjes
om deze formule wat in te korten en ik heb hem wat langer gemaakt door met
ALS()-clausules de zinsopbouw te veranderen als er 0 jaren of ) maanden of 0
dagen worden geteld.
Een compactere versie:
=DATUMVERSCHIL(B1;NU();"y")&" jr, "& DATUMVERSCHIL(B1;NU();"ym")& " mnd, " &
DATUMVERSCHIL(B1;NU();"md") & " dg"
geeft bijv.: 34 jr, 7 mnd, 14 dg
Zorg bij het plakken dat de formule weer één aaneengesloten regel wordt (het
e-mail proces kapt regels af met onverwachte regeleindes).
Misschien vind je het leuk, of heeft een andere ng'er er wat aan.
Heb een zonnige dag,
--
Eric van Uden
at the foot of the 'bridge too far'
"e®i©" <w...@knows.com> schreef in bericht
news:ovidhvkm8tkgu6p9l...@4ax.com...
=ALS(DATUMVERSCHIL(B8;VANDAAG();"y")=0;"";DATUMVERSCHIL(B8;VANDAAG();"y")&AL
S(EN(DATUMVERSCHIL(B8;VANDAAG();"ym")=0;DATUMVERSCHIL(B8;VANDAAG();"md")=0);
" jaar ";ALS(DATUMVERSCHIL(B8;VANDAAG();"md")=0;" jaren en ";" jaren,
")))&ALS(DATUMVERSCHIL(B8;VANDAAG();"ym")=0;"";ALS(DATUMVERSCHIL(B8;VANDAAG(
);"md")=0;DATUMVERSCHIL(B8;VANDAAG();"ym")&" maanden
";DATUMVERSCHIL(B8;VANDAAG();"ym")&" maanden en
"))&ALS(DATUMVERSCHIL(B8;VANDAAG();"md")=0;"precies";DATUMVERSCHIL(B8;VANDAA
G();"md")&" dagen")
Ik vond hem nog niet lang genoeg... :^)
--
Eric van Uden
at the foot of the 'bridge too far'
"Eric van Uden" <ericv...@supermail.nl> schreef in bericht
news:uSffW$eTDHA...@TK2MSFTNGP11.phx.gbl...
A1 heeft iemands naam
B1 heeft zijn/haar geboortedatum
C1 heeft de formule die de huidige leeftijd van deze persoon in jaren,
maanden en dagen omschrijft:
=A1&" is vandaag
"&ALS(B1=0;"";ALS(DATUMVERSCHIL(B1;VANDAAG();"y")=0;"";DATUMVERSCHIL(B1;VAND
AAG();"y")&ALS(EN(DATUMVERSCHIL(B1;VANDAAG();"ym")=0;DATUMVERSCHIL(B1;VANDAA
G();"md")=0);" jaar ";ALS(OF(DATUMVERSCHIL(B1;VANDAAG();"md")=0;
EN(DATUMVERSCHIL(B1;VANDAAG();"ym")=0;DATUMVERSCHIL(B1;VANDAAG();"md")>0));"
jaar en ";" jaar,
")))&ALS(DATUMVERSCHIL(B1;VANDAAG();"ym")=0;"";ALS(DATUMVERSCHIL(B1;VANDAAG(
);"md")=0;DATUMVERSCHIL(B1;VANDAAG();"ym")&ALS(DATUMVERSCHIL(B1;VANDAAG();"y
m")=1;" maand ";" maanden ");DATUMVERSCHIL(B1;VANDAAG();"ym")&" maanden en
"))&ALS(DATUMVERSCHIL(B1;VANDAAG();"md")=0;"precies";DATUMVERSCHIL(B1;VANDAA
G();"md")&ALS(DATUMVERSCHIL(B1;VANDAAG();"md")=1;" dag";" dagen")))&" oud."
A1 heeft iemands naam
B1 heeft zijn/haar geboortedatum
C1 heeft de formule die de huidige leeftijd van deze persoon in jaren,
maanden en dagen omschrijft:
Nederlands:
=ALS(B1=0;"";A1&" is vandaag
"&ALS(DATUMVERSCHIL(B1;VANDAAG();"y")=0;"";DATUMVERSCHIL(B1;VANDAAG();"y")&A
LS(EN(DATUMVERSCHIL(B1;VANDAAG();"ym")=0;DATUMVERSCHIL(B1;VANDAAG();"md")=0)
;" jaar ";ALS(DATUMVERSCHIL(B1;VANDAAG();"md")=0;" jaar en ";" jaar,
")))&ALS(DATUMVERSCHIL(B1;VANDAAG();"ym")=0;"";ALS(DATUMVERSCHIL(B1;VANDAAG(
);"md")=0;DATUMVERSCHIL(B1;VANDAAG();"ym")&" maanden
";DATUMVERSCHIL(B1;VANDAAG();"ym")&" maanden en
"))&ALS(DATUMVERSCHIL(B1;VANDAAG();"md")=0;"precies";DATUMVERSCHIL(B1;VANDAA
G();"md")&" dagen")&" oud.")
Engels:
=ALS(B1=0;"";A1&" is
"&ALS(DATUMVERSCHIL(B1;VANDAAG();"y")=0;"";DATUMVERSCHIL(B1;VANDAAG();"y")&A
LS(EN(DATUMVERSCHIL(B1;VANDAAG();"ym")=0;DATUMVERSCHIL(B1;VANDAAG();"md")=0)
;" years ";ALS(DATUMVERSCHIL(B1;VANDAAG();"md")=0;" years and ";" years,
")))&ALS(DATUMVERSCHIL(B1;VANDAAG();"ym")=0;"";ALS(DATUMVERSCHIL(B1;VANDAAG(
);"md")=0;DATUMVERSCHIL(B1;VANDAAG();"ym")&" months
";DATUMVERSCHIL(B1;VANDAAG();"ym")&" months and
"))&ALS(DATUMVERSCHIL(B1;VANDAAG();"md")=0;"exactly";DATUMVERSCHIL(B1;VANDAA
G();"md")&" days")&" old today.")
For English Excel:
=IF(B1=0,"",A1&" is
"&IF(DATEDIF(B1,TODAY(),"y")=0,"",DATEDIF(B1,TODAY(),"y")&IF(AND(DATEDIF(B1,
TODAY(),"ym")=0,DATEDIF(B1,TODAY(),"md")=0)," years
",IF(DATEDIF(B1,TODAY(),"md")=0," years and "," years,
")))&IF(DATEDIF(B1,TODAY(),"ym")=0,"",IF(DATEDIF(B1,TODAY(),"md")=0,DATEDIF(
B1,TODAY(),"ym")&" months ",DATEDIF(B1,TODAY(),"ym")&" months and
"))&IF(DATEDIF(B1,TODAY(),"md")=0,"exactly",DATEDIF(B1,TODAY(),"md")&"
days")&" old today.")
Houd er bij knippen en plakken rekening mee dat het e-mailproces onverwachte
regeleindes invoert.
Zorg ervoor dat de geplakte formule weer één regel wordt. Hierbij kunnen
spaties uit de tekstgedeeltes verdwijnen, waardoor woorden in de
gegenereerde zinnen aan elkaar geplakt verschijnen.
Plaats de spaties dan in de formule terug waar ze nodig zijn:
" is vandaag "
" jaar "
" jaar en "
" jaar, "
" maanden "
" maanden en "
"precies"
" dagen"
Doel: Iemands leeftijd weergeven in een zin zoals:
Jan is vandaag 32 jaar, 11 maanden en 28 dagen oud.
A1 heeft iemands naam
B1 heeft zijn/haar geboortedatum
C1 heeft de formule die de huidige leeftijd van deze persoon in jaren,
maanden en dagen omschrijft:
=ALS(B1=0;"";A1&" is vandaag
"&ALS(DATUMVERSCHIL(B1;VANDAAG();"y")=0;"";DATUMVERSCHIL(B1;VANDAAG();"y")&A
LS(EN(DATUMVERSCHIL(B1;VANDAAG();"ym")=0;DATUMVERSCHIL(B1;VANDAAG();"md")=0)
;" jaar ";ALS(DATUMVERSCHIL(B1;VANDAAG();"md")=0;" jaar en ";" jaar,
")))&ALS(DATUMVERSCHIL(B1;VANDAAG();"ym")=0;"";ALS(DATUMVERSCHIL(B1;VANDAAG(
);"md")=0;DATUMVERSCHIL(B1;VANDAAG();"ym")&" maanden
";DATUMVERSCHIL(B1;VANDAAG();"ym")&" maanden en
"))&ALS(DATUMVERSCHIL(B1;VANDAAG();"md")=0;"oud
precies.";DATUMVERSCHIL(B1;VANDAA
G();"md")&" dagen oud."))
In het Engels is de formule overigens al een stuk korter: DATEDIF en TODAY
besparen samen al 88 tekens!
Ik zou NU() kunnen gebruiken voor VANDAAG(), maar dat is eenbeetje vals
spelen...
Korter krijg je de formule denk ik niet zo zeer. Wel kun je het in C1 wat
toonbaarder maken. Je kunt daarvoor de formule in een gedefiniëerde naam
zetten. nadeel is echter dat'ie daarvoor te lang is :-) Je zult hem dan in
tweeën moeten splitsen.
Andere optie is idd een UDF in VBA. Is wel beduidend trager met berekenen.
Groeten,
Bert
"Eric van Uden" <eric no @ spam doornroosje.nl> wrote in message
news:OILNGJ4T...@TK2MSFTNGP10.phx.gbl...
Ik was er al bang voor, temeer omdat er nog steeds situaties zijn waarin de
resulterende zin niet perfect is.
Het is echt een puzzeltje, zonder enige consequentie of belang, maar toch
aardig.
En misschien heeft er iemand nog een briljant moment...
Een prachtige dag gewenst,
--
Eric van Uden
at the foot of the 'bridge too far'
"S for Software" <www.sforsoftware.nl> schreef in bericht
news:uZlcTS4T...@TK2MSFTNGP10.phx.gbl...
=ALS(B1<>"";A1&TEKST(VANDAAG()-A2;""" is"" jj ""jaar,"" m ""maanden en"" d
""dagen"""))
keepITcool
< email : keepitcool chello nl (with @ and .) >
< homepage: http://members.chello.nl/keepitcool >
dmv ATP functie EDATE/ZELFDE.DAG op te lossen, vermits de baby niet
pasgeboren is.
=ALS(B1<>"";A1&TEKST(ZELFDE.DAG(VANDAAG()-B1;-1);""" is"" jj ""jaar,"" m
""maanden en"" d ""dagen"""))
je krijgt bovendien onzin als je 1904 datum systeem gebruikt.
forget it. 't is zomer!
keepITcool
< email : keepitcool chello nl (with @ and .) >
< homepage: http://members.chello.nl/keepitcool >
Zoals altijd een onverwachte en creatieve aanpak. Erg leuk, maar de
verkregen omschrijvingen blijven natuurlijk ook identiek, ongeacht de
situatie. Bijv.: 1 jaren, 1 maanden, 1 dagen. Ik heb mijn monster tot de
limit opgevoerd en heb nu dit:
=ALS(B1=VANDAAG();"Hallo "&A1&"!";ALS(OF(A1="";B1="";
B1>NU());"";"Vandaag is "&A1&" "&ALS(DATUMVERSCHIL(B1;
NU();"Y")<=0;"";ALS(DATUMVERSCHIL(B1;NU();"Y")=1;
DATUMVERSCHIL(B1;NU();"Y")&" jaar";DATUMVERSCHIL(B1;
NU();"Y")&" jaren"))&ALS(OF(DATUMVERSCHIL(B1;NU();"Y")=0;
EN(DATUMVERSCHIL(B1;NU();"YM")=0;DATUMVERSCHIL(B1;
VANDAAG();"MD")=0));"";ALS(OF(DATUMVERSCHIL(B1;NU();
"YM")=0;DATUMVERSCHIL(B1;NU();"MD")=0);" en ";", "))&
ALS(DATUMVERSCHIL(B1;NU();"YM")<=0;"";
ALS(DATUMVERSCHIL(B1;NU();"YM")=1;DATUMVERSCHIL(B1;
NU();"YM")&" maand";DATUMVERSCHIL(B1;NU();
"YM")&" maanden"))&ALS(DATUMVERSCHIL(B1;NU();"YM")=0;
"";ALS(OF(DATUMVERSCHIL(B1;NU();"Y")=0;
EN(DATUMVERSCHIL(B1;VANDAAG();"Y")>0;
DATUMVERSCHIL(B1;NU();"MD")>0));" en ";""))&
ALS(DATUMVERSCHIL(B1;NU();"MD")<=0;"";
ALS(DATUMVERSCHIL(B1;NU();"MD")=1;
DATUMVERSCHIL(B1;NU();"MD")&" dag";DATUMVERSCHIL(B1;
NU();"MD")&" dagen"))&ALS(OF(EN(DATUMVERSCHIL(B1;
NU();"YM")=0;DATUMVERSCHIL(B1;NU();"MD")=0);
DATUMVERSCHIL(B1;NU();"MD")=0);" precies.";".")))
Aan de grens van wat Excel toelaat, maar zoals je zegt: 't is zomer...
Daarom juist. Het is een speledingetje.
Heb een zinderende dag!
--
Eric van Uden
at the foot of the 'bridge too far'
"keepitcool" <xrrcv...@puryyb.ay> schreef in bericht
news:Xns93BFA686FF8...@207.46.248.16...
Lookup (NL:ZOEKEN)? hmmm... Tada!
=ALS(
OF(B1>=VANDAAG();B1="");
"Hoi "&A1;
"Vandaag is "&A1&" "&
SUBSTITUEREN(SUBSTITUEREN(SUBSTITUEREN(
ZOEKEN(DATUMVERSCHIL($B$1;VANDAAG();"y");{0\1\2};DATUMVERSCHIL($B
$1;VANDAAG();"y")&{"X"\" jaar en "\" jaren en "})&
ZOEKEN(DATUMVERSCHIL($B$1;VANDAAG();"ym");{0\1\2};DATUMVERSCHIL($B
$1;VANDAAG();"ym")&{"X"\" maand en "\" maanden en "})&
ZOEKEN(DATUMVERSCHIL($B$1;VANDAAG();"md");{0\1\2};DATUMVERSCHIL($B
$1;VANDAAG();"md")&{"X"\" dag"\" dagen"})&".";
"0X";"");" en ";", ";1);", .";".")
)
Toch allemaal wat eleganter. Probeer de linebreaks in de FormuleBalk
zo te zetten dat je 3 regels krijgt die beginnen met ZOEKEN
BTW1: Heeft Excel grenzen?
BTW2: die bridge...
daar waar de film is opgenomen of daar waar t om begonnen was?
Wat een fantastische reactie weer. Dat kostte me een uur om mijn hoofd
eromheen te krijgen.
Dankjewel!? Maar ja, het was om puzzelen begonnen.
Er zitten nog wel 1 of 2 haakjes in, echter. Die tweede en derde
substitueren-laag dienen natuurlijk om alles mooi af te ronden, maar dan
krijg je bijvoorbeeld:
'Vandaag is Jurgen Janssen 1 jaar, 1 dag.' in plaats van:
'Vandaag is Jurgen Janssen 1 jaar en 1 dag.'
Dat laatste krijg je wel wanneer buitenste substitueren-lagen weglaat, maar
dan krijg je weer:
'Vandaag is Jurgen Janssen 1 jaar en .' in plaats van:
'Vandaag is Jurgen Janssen 1 jaar.'
Dat 'en' heeft mij ook behoorlijk parten gespeeld. Ik ben nu hierop
uitgekomen. Het geeft correcte zinnen in alle gevallen (geloof ik) en het is
nog steeds een lelijk monster, maar met de formulebalk verborgen en in het
donker is het resultaat op zich verdragelijk:
=ALS(B3=VANDAAG();"Welkom "&A3&"!";
ALS(OF(A3="";B3="";B3>NU());"";"Vandaag is "&A3&
" "&ALS(DATUMVERSCHIL(B3;NU();"Y")<=0;"";
DATUMVERSCHIL(B3;NU();"Y")&" jaar")&
ALS(OF(DATUMVERSCHIL(B3;NU();"Y")=0;
EN(DATUMVERSCHIL(B3;NU();"YM")=0;
DATUMVERSCHIL(B3;VANDAAG();"MD")=0));
"";ALS(OF(DATUMVERSCHIL(B3;NU();"YM")=0;
DATUMVERSCHIL(B3;NU();"MD")=0);" en ";", "))&
ALS(DATUMVERSCHIL(B3;NU();"YM")<=0;"";
ALS(DATUMVERSCHIL(B3;NU();"YM")=1;
DATUMVERSCHIL(B3;NU();"YM")&" maand";
DATUMVERSCHIL(B3;NU();"YM")&" maanden"))&
ALS(EN(DATUMVERSCHIL(B3;NU();"Y")=0;
DATUMVERSCHIL(B3;NU();"MD")>0);" en ";"")&
ALS(DATUMVERSCHIL(B3;NU();"YM")=0;"";
ALS(EN(DATUMVERSCHIL(B3;VANDAAG();
"Y")>0;DATUMVERSCHIL(B3;NU();"MD")>0);
" en ";""))&ALS(DATUMVERSCHIL(B3;NU();"MD")<=0;
"";ALS(DATUMVERSCHIL(B3;NU();"MD")=1;
DATUMVERSCHIL(B3;NU();"MD")&" dag";
DATUMVERSCHIL(B3;NU();"MD")&" dagen"))&
ALS(OF(EN(DATUMVERSCHIL(B3;NU();"YM")=0;
DATUMVERSCHIL(B3;NU();"MD")=0);
DATUMVERSCHIL(B3;NU();"MD")=0);
" oud, precies.";" oud.")))
WTB1: Ja, voor mij heeft Excel dus duidelijk nog grenzen, maar als ik jouw
formules zie, begin ik ervan overtuigd te raken dat het aan mij ligt. Er kan
duidelijk meer dan ik doorheb.
WTB2: Allebei. Ik woon bij de brug én bij allerlei (Excel-)dingen wil ik nog
wel eens te ver van huis raken... ;^) Ben met die signature begonnen voor
een engelstalige nieuwsgroep en gebruik hem nu ook voor deze ng.
Een soepele dag gewenst!
Dit is een vertaling van een uitwerking van jouw idee door Stephen Dunn,
die nog wat puntjes op de i zet:
=ALS(OF(B1>=VANDAAG();B1="");"-";"Vandaag is "&A$1&" "&
SUBSTITUEREN(DATUMVERSCHIL(B1;VANDAAG();"y")&
ZOEKEN(DATUMVERSCHIL(B1;VANDAAG();"y");{0;1;2};
{"x";" jaar";" jaar"})&ALS(DATUMVERSCHIL(B1;VANDAAG();
"y")*DATUMVERSCHIL(B1;VANDAAG();"ym")*
DATUMVERSCHIL(B1;VANDAAG();"md");", ";
ALS(DATUMVERSCHIL(B1;VANDAAG();"y")*
DATUMVERSCHIL(B1;VANDAAG();"ym");" en ";""))&
DATUMVERSCHIL(B1;VANDAAG();"ym")&ZOEKEN(
DATUMVERSCHIL(B1;VANDAAG();"ym");{0;1;2};
{"x";" maand";" maanden"})&ALS((DATUMVERSCHIL(B1
;VANDAAG();"y")+DATUMVERSCHIL(B1;VANDAAG();"ym"))*
DATUMVERSCHIL(B1;VANDAAG();"md");" and ";"")&
DATUMVERSCHIL(B1;VANDAAG();"md")&ZOEKEN(
DATUMVERSCHIL(B1;VANDAAG();"md");{0;1;2};
{"x";" dag";" dagen"});"0x";"")&" oud.")
Nog een lange zomerdag gewenst.