Aufgabe
Du hast eine Adressliste mit Geburtstagen nach Namen oder sonstwie sortiert. Nun möchtest du wissen (ohne, dass die Liste irgendwie umsortiert werden muss), wer als nächstes (ab/inklusive heute) Geburtstag hat.
Lösung
Datumsspalte: A
Namensspalte: B
nächstes Geburtsdatum in Zelle D1:
{=INDEX(A1:A100;VERGLEICH(MIN(WENN(A1:A100<>"";REST((MONAT(A1:A100)+TAG(A1:A100)/100-MONAT(HEUTE())-TAG(HEUTE())/100)+0,001;12,31)));WENN(A1:A100<>"";REST((MONAT(A1:A100)+TAG(A1:A100)/100-MONAT(HEUTE())-TAG(HEUTE())/100)+0,001;12,31));0))}
Der entsprechende Name:
=sverweis(D1;A:B;2;0)
Tage bis zum nächsten Geburtstag:
=DATUM(JAHR(HEUTE())+((MONAT(D1)*50+TAG(D1)-MONAT(HEUTE())*50-TAG(HEUTE()))<0);MONAT(D1);TAG(D1))-HEUTE()
Falls am Datum in D1 mehrere Geburtstag haben, ermittelt man mit
{=INDEX(B1:B100;KKLEINSTE(WENN(A1:A100<>"";WENN(MONAT(A1:A100)+TAG(A1:A100)/100=MONAT(D1)+TAG(D1)/100;ZEILE(1:100)));2))}
den 2. und mit
{=INDEX(B1:B100;KKLEINSTE(WENN(A1:A100<>"";WENN(MONAT(A1:A100)+TAG(A1:A100)/100=MONAT(D1)+TAG(D1)/100;ZEILE(1:100)));3))}
den dritten, usw.
Die Datumsspalte darf keinen Text enthalten; - Leerzellen sind erlaubt.
Falls ein Spaltenkopf vorhanden ist, in obiger Formel A1 durch A2 ersetzen.
Diese Variante bringt als Ergebnis nicht das Geburtsjahr der Person, sondern das Jahr des Geburtstages also das aktuelle oder das nächste Jahr. Kopiert man die Formel nach unten bringt Sie den übernächsten, usw...
Der entsprechende Name wird dann mit
{=WENN(D2="";"";INDEX(B:B;KKLEINSTE(WENN(TEXT(A$2:A$100;"TTMM")=TEXT(D2;"TTMM");ZEILE($2:$100));SUMME(N(D$1:D2=D2)))))}
gefunden. SO wie man den Namen findet, könnte man bei Bedarf auch das Geburtsjahr finden.