| Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
| Autor |
Nachricht |
Alexander Wolff
Anmeldedatum: 01.01.1970 Beiträge: 3570
|
Verfasst am: Do Dez 20, 2007 3:19 pm Titel: Altersgrenze berechnen |
|
|
Die Tastatur von Alexander Wolff wurde wie folgt gedrückt:
>> Man müßte also auch noch mit "Tage=29" boolsch korrigieren, oder
>> so... vielleicht hilft ja:
>> =JAHR(B2+1+3*(TAG(B2)>=TAG(A2))+(TAG(A2)-TAG(B2)>27)-A2)-1900
>
> Nee, auch nicht: 1.1.-31.12. klappt dann manchmal nicht ... also
> weitersuchen
Hier hab ich noch keinen Fehler entdeckt:
=JAHR(B2+1+3*ODER(TAG(A2)-TAG(B2)={0;-1;-2;27;28;29;30})-A2)-1900
Wahrscheinlich kann man noch auf einige {}-mittige Elemente verzichten.
--
Moin+Gruss Alexander - MVP for MS Excel - www.xxcl.de - mso2000sp3 --7-2
.
|
|
| Nach oben |
|
 |
Alexander Wolff
Anmeldedatum: 01.01.1970 Beiträge: 3570
|
Verfasst am: Do Dez 20, 2007 6:00 pm Titel: Altersgrenze berechnen |
|
|
> Hier hab ich noch keinen Fehler entdeckt:
>
> =JAHR(B2+1+3*ODER(TAG(A2)-TAG(B2)={0;-1;-2;27;28;29;30})-A2)-1900
>
> Wahrscheinlich kann man noch auf einige {}-mittige Elemente
> verzichten.
Kann man nicht. Es scheint sich in etwa dies zu erhärten:
=JAHR(B2+4*ODER(TAG(A2)-TAG(B2)={0;-1;-2;26;27;28;29;30})-A2)-1900
Wesentlich verkürzen kann man den {}-Teil wohl nicht mehr.
Absolut sicher über die Lösung bin ich mir immer noch nicht.
--
Moin+Gruss Alexander - MVP for MS Excel - www.xxcl.de - mso2000sp3 --7-2
.
|
|
| Nach oben |
|
 |
Anmeldedatum: 01.01.1970 Beiträge: 312655
|
Verfasst am: Do Dez 20, 2007 7:24 pm Titel: Altersgrenze berechnen |
|
|
Hallo Alexander
Hallo Klaus
Am 20.12.2007 13:44:40 schrieb Alexander Wolff:
>> =JAHR((HEUTE()+WENN(REST(GANZZAHL(2*(HEUTE()-60)/1461);2);2;1))-B2)-1900
> HEUTE() = A2 (neueres Datum)
> =JAHR((A2+WENN(REST(GANZZAHL(2*(A2-60)/1461);2);2;1))-B2)-1900
>
> B2: 29.02.1992 bis
> A2: 28.02.2096 müsste 103 ergeben. Bei Deiner Formel 104.
>
> Ich habe gestern auch noch gegrübelt ... aber Datum ist immer eine heiße
> Kiste. Vor allem tappt man immer wieder in die gleichen, obwohl schon selbst
> gemachten, Fehler.
Ich habe mal die Formel von Klaus bearbeitet:
=JAHR((A2+WENN(REST(GANZZAHL(2*(A2-60)/1461);2);2;1))-B2)-1900-(B2=DATUM(JAHR(B2);2;29))
Bei Deiner Formel:
=JAHR(B2+4*ODER(TAG(A2)-TAG(B2)={0;-1;-2;26;27;28;29;30})-A2)-1900
bekomme ich die Fehlermeldung:
#ZAHL!
MfG
Klaus
.
|
|
| Nach oben |
|
 |
Alexander Wolff
Anmeldedatum: 01.01.1970 Beiträge: 3570
|
Verfasst am: Do Dez 20, 2007 10:38 pm Titel: Altersgrenze berechnen |
|
|
>> =JAHR(B2+4*ODER(TAG(A2)-TAG(B2)={0;-1;-2;26;27;28;29;30})-A2)-1900
>>
>> Wesentlich verkürzen kann man den {}-Teil wohl nicht mehr.
>> Absolut sicher über die Lösung bin ich mir immer noch nicht.
>
> die kritischen Übergänge bestehen wohl bei den Schalttagen, aber die
> werden von der Formel richtig ausgewertet. Ich habe viele Situationen
> durchgespielt, aber für 100%ige Sicherheit müsste man wohl alle
> Möglichkeiten betrachten. Mit VBA ist das sicher möglich, aber wie sollte
> ein fehlerfreier Vergleich in VBA aussehen?
>
> Nach meinem Dafürhalten funktioniert deine Excelformel einwandfrei.
Klingt beruhigend :-)
Ich habe nach manuellem Probieren eine VBA-Testroutine *) geschrieben, die
1.000.000 zufällige Datenpaare vom drittletzten bis dritten Monatstag von
Rnd()-Datümern (Zufallszahl) gegeneinanderstellt (also nur bspw. 26.2.-3.3.
für Märzdatümer oder 29.1.-3.2. für Februardatümer, wenn das Zufallsdatum im
jeweiligen Monat liegt, und dies für alle Monate), und diese 5mal
durchlaufen lassen (ca. je eine Minute). Es kam auch bei diesem "brute
force"-Test keine einzige Message wegen einer Differenz zu DATEDIF(..."Y").
Daher steht die Seite www.xxcl.de/0064.htm erst mal wieder online.
*) poste ich morgen, hab ich grad nicht zur Hand
--
Moin+Gruss Alexander - MVP für MS Excel - www.xxcl.de - mso2000sp3 --7-2
.
|
|
| Nach oben |
|
 |
Alexander Wolff
Anmeldedatum: 01.01.1970 Beiträge: 3570
|
Verfasst am: Do Dez 20, 2007 10:50 pm Titel: Altersgrenze berechnen |
|
|
> =JAHR(B2+4*ODER(TAG(A2)-TAG(B2)={0;-1;-2;26;27;28;29;30})-A2)-1900
> bekomme ich die Fehlermeldung:
> #ZAHL!
Achtung: Bei mir ist A2 vor B2! Du hast es andersrum eingegeben.
--
Moin+Gruss Alexander - MVP für MS Excel - www.xxcl.de - mso2000sp3 --7-2
.
|
|
| Nach oben |
|
 |
Alexander Wolff
Anmeldedatum: 01.01.1970 Beiträge: 3570
|
Verfasst am: Fr Dez 21, 2007 2:54 pm Titel: Altersgrenze berechnen |
|
|
Die Tastatur von Alexander Wolff wurde wie folgt gedrückt:
>>> =JAHR(B2+4*ODER(TAG(A2)-TAG(B2)={0;-1;-2;26;27;28;29;30})-A2)-1900
>>>
>>> Wesentlich verkürzen kann man den {}-Teil wohl nicht mehr.
>>> Absolut sicher über die Lösung bin ich mir immer noch nicht.
>>
>> die kritischen Übergänge bestehen wohl bei den Schalttagen, aber die
>> werden von der Formel richtig ausgewertet. Ich habe viele Situationen
>> durchgespielt, aber für 100%ige Sicherheit müsste man wohl alle
>> Möglichkeiten betrachten. Mit VBA ist das sicher möglich, aber wie
>> sollte ein fehlerfreier Vergleich in VBA aussehen?
>>
>> Nach meinem Dafürhalten funktioniert deine Excelformel einwandfrei.
>
> Klingt beruhigend
>
> Ich habe nach manuellem Probieren eine VBA-Testroutine *)
> geschrieben, die 1.000.000 zufällige Datenpaare vom drittletzten bis
> dritten Monatstag
> von Rnd()-Datümern (Zufallszahl) gegeneinanderstellt (also nur bspw.
> 26.2.-3.3. für Märzdatümer oder 29.1.-3.2. für Februardatümer, wenn
> das Zufallsdatum im jeweiligen Monat liegt, und dies für alle
> Monate), und diese 5mal durchlaufen lassen (ca. je eine Minute). Es
> kam auch bei diesem "brute force"-Test keine einzige Message wegen
> einer Differenz zu DATEDIF(..."Y").
> Daher steht die Seite www.xxcl.de/0064.htm erst mal wieder online.
>
> *) poste ich morgen, hab ich grad nicht zur Hand
Tja, tatsächlich doch noch Fehler gefunden (Routine hier schon upgedatet):
Sub BruteForceTestingOfDATEDIFAlternatives()
For i = 1 To 1000000
a = Int(Rnd() * 100000) + 61
b = Int(a + Int(1 + Rnd() * 5000) * 365.2425) 'ensuring a year'S diff
a = a - Day(a) + 4 - Int(Rnd() * 'testing days close to month's end
b = b - Day(b) + 4 - Int(Rnd() *
c = Evaluate("=YEAR(" & b & "-" & a & "+4*((ABS(DAY(" & a & _
")+1.5-DAY(" & b & "))<2)+(ABS(DAY(" & a & ")-27.5-DAY(" & b & _
"))<3)))-1900-DATEDIF(" & a & "," & b & ",""Y"")")
If c <> 0 Then
' MsgBox i & ": <" & c & "> " & a & "|" & b
j = j + 1: Range("A" & j) = a:Range("B" & j) = b
End If
Next
End Sub
Die Formel erweitert sich um -3 und 25:
=JAHR(B1-A1+4*ODER(TAG(A1)-TAG(B1)={0;-1;-2;-3;25;26;27;28;29;30}))-1900
Pocket Excel (hat kein DATEDIF, daher besonders wichtig für
ActiveSync-Dokumente!) kennt keine {Matrizen}, daher Umformung zu:
=JAHR(B1-A1+4*((ABS(TAG(A1)+1,5-TAG(B1))<2)+(ABS(TAG(A1)-27,5-TAG(B1))<3)))-1900
--
Moin+Gruss Alexander - MVP for MS Excel - www.xxcl.de - mso2000sp3 --7-2
.
|
|
| Nach oben |
|
 |
Alexander Wolff
Anmeldedatum: 01.01.1970 Beiträge: 3570
|
Verfasst am: Fr Dez 21, 2007 4:05 pm Titel: Altersgrenze berechnen |
|
|
Die Tastatur von Alexander Wolff wurde wie folgt gedrückt:
>> =JAHR(B2+4*ODER(TAG(A2)-TAG(B2)={0;-1;-2;26;27;28;29;30})-A2)-1900
>> bekomme ich die Fehlermeldung:
>> #ZAHL!
>
> Achtung: Bei mir ist A2 vor B2! Du hast es andersrum eingegeben.
Die Formel stimmt noch nicht, siehe in anderem Ast des Threads.
--
Moin+Gruss Alexander - MVP for MS Excel - www.xxcl.de - mso2000sp3 --7-2
.
|
|
| Nach oben |
|
 |
Anmeldedatum: 01.01.1970 Beiträge: 312655
|
Verfasst am: Sa Dez 22, 2007 6:47 pm Titel: Altersgrenze berechnen |
|
|
Hallo Alexander
Hallo Klaus
Am 21.12.2007 14:54:53 schrieb Alexander Wolff:
> Die Formel erweitert sich um -3 und 25:
> =JAHR(B1-A1+4*ODER(TAG(A1)-TAG(B1)={0;-1;-2;-3;25;26;27;28;29;30}))-1900
>
> Pocket Excel (hat kein DATEDIF, daher besonders wichtig für
> ActiveSync-Dokumente!) kennt keine {Matrizen}, daher Umformung zu:
>
> =JAHR(B1-A1+4*((ABS(TAG(A1)+1,5-TAG(B1))<2)+(ABS(TAG(A1)-27,5-TAG(B1))<3)))-1900
Das hat mir keine ruhe gelassen, ich wollte mal sehen ob ich
auch eine passende Formel zusammen bekomme.
Ich hoffe die Formel ist jetzt richtig:
=JAHR(B1)-JAHR(A1)-((DATUM(1900;MONAT(B1);TAG(B1))-DATUM(1900;MONAT(A1);TAG(A1)))<0)
MfG
Klaus
.
|
|
| Nach oben |
|
 |
Alexander Wolff
Anmeldedatum: 01.01.1970 Beiträge: 3570
|
Verfasst am: Sa Dez 22, 2007 10:33 pm Titel: Altersgrenze berechnen |
|
|
> Ich hoffe die Formel ist jetzt richtig:
> =JAHR(B1)-JAHR(A1)-((DATUM(1900;MONAT(B1);TAG(B1))-DATUM(1900;MONAT(A1);TAG(A1)))<0)
Klasse! Und viel weniger umständlich als meine!
Da =DATUM(;1;1)=DATUM(1900;1;1) WAHR ergibt, wird sie sogar noch kürzer:
=JAHR(B1)-JAHR(A1)-((DATUM(;MONAT(B1);TAG(B1))-DATUM(;MONAT(A1);TAG(A1)))<0)
Das nehme ich morgen in meine Seite mit auf
--
Moin+Gruss Alexander - MVP für MS Excel - www.xxcl.de - mso2000sp3 --7-2
.
|
|
| Nach oben |
|
 |
Anmeldedatum: 01.01.1970 Beiträge: 312655
|
Verfasst am: So Dez 23, 2007 3:32 pm Titel: Altersgrenze berechnen |
|
|
Am 22.12.2007 22:33:06 schrieb Alexander Wolff:
> Klasse! Und viel weniger umständlich als meine!
> Da =DATUM(;1;1)=DATUM(1900;1;1) WAHR ergibt, wird sie sogar noch kürzer:
>
> =JAHR(B1)-JAHR(A1)-((DATUM(;MONAT(B1);TAG(B1))-DATUM(;MONAT(A1);TAG(A1)))<0)
> Das nehme ich morgen in meine Seite mit auf :-)
Das freut mich. :-)
Ich habe auf Deiner Seite: http://www.xxcl.de/0064.htm
gesehen, das Du die Formel noch weiter verkürzt hast:
=JAHR(B1)-JAHR(A1)-(MONAT(B1)+TAG(B1)%
Sehe ich das richtig, das man % auch noch weglassen kann?
=JAHR(B1)-JAHR(A1)-(MONAT(B1)+TAG(B1)
MfG
Klaus
.
|
|
| Nach oben |
|
 |
Alexander Wolff
Anmeldedatum: 01.01.1970 Beiträge: 3570
|
Verfasst am: So Dez 23, 2007 4:52 pm Titel: Altersgrenze berechnen |
|
|
> Ich habe auf Deiner Seite: http://www.xxcl.de/0064.htm
> gesehen, das Du die Formel noch weiter verkürzt hast:
>
> =JAHR(B1)-JAHR(A1)-(MONAT(B1)+TAG(B1)%<MONAT(A1)+TAG(A1)%)
>
> Sehe ich das richtig, das man % auch noch weglassen kann?
>
> =JAHR(B1)-JAHR(A1)-(MONAT(B1)+TAG(B1)
Nein, dann müßte es heißen: MONAT(B1)*32+TAG(B1)
die Hierarchie "Monat vor Tag" gewährleistet bleibt. Mit TAB(B1)% werden die
Tage einfach zweistellig hinters Komma gestellt, was aufgrund der Obergrenze
von 31 zufällig hinhaut. - Deine Idee war jedenfalls bahnbrechend! Du hast
eben klarer gedacht.
--
Moin+Gruss Alexander - MVP für MS Excel - www.xxcl.de - mso2000sp3 --7-2
.
|
|
| Nach oben |
|
 |
|