Teilweise unzutreffende Zellformatierung mit Einhe
25.07.2006 22:55:23
reiner
mit Hilfe einer Funktion GetAlterInJahren(C54;$A$1) wird die Anzahl der vergangenen Jahre zwischen einem Startdatum und einem Enddatum ermittelt. In diesem Beispiel steht C54 für das Startdatum und ;$A$1 für das Enddatum. Die Einheit Jahre wird über die Formatierung der Zelle hinzugefügt.
Hier können 3 Arten von Ergebnissen ermittelt werden: 0 Jahre; 1 Jahre; jede Zahl > 2 Jahre. Mich stört hier das die Einheit immer Jahre lautet selbst wenn es sich nur um 1 Jahr handelt.
Da die Einheit Jahre automatisch hinzugefügt wird wäre eine Korrektur auf Jahr unpraktisch.
Hat jemand einen Vorschlag wie mit einer WENN-Funktion und der eingefügten Funktion GetAlterInJahren(C54;$A$1) bei einem Ergebnis von 0 die Ergebniszelle leer bleibt, bei einem Ergebnis von 1 die Einheit Jahr und bei einem Ergebnis von 2 (oder größer) die Einheit Jahre eingefügt wird und somit auf die Zellformatierung mit Jahre verzichtet werden kann?
Function GetAlterInJahren(ByVal datVon As Date, ByVal datBis As Date) As Integer '======von Sabine Konschak Softwarelösungen======================================= Dim intJahre As Integer Dim dat2 As Date Dim bolJahrestagVorbei As Boolean '---- Schaltjahre berücksichtigen-------------------------------- If Month(datVon) = 2 And Day(datVon) = 29 Then datVon = DateSerial(Year(datVon), 2, 28) End If If Month(datBis) = 2 And Day(datBis) = 29 Then datBis = DateSerial(Year(datBis), 2, 28) End If ' ---- Jahrestag bestimmen---------------------------------------- dat2 = DateSerial(Year(datBis), Month(datVon), Day(datVon)) '------ feststellen, ob der Jahrestag schon vorbei ist------------ bolJahrestagVorbei = dat2 <= datBis intJahre = DateDiff("yyyy", datVon, datBis) '------ Leider achtet DateDiff nicht darauf, ob die Jahre schon komplett vergangen sind If Not bolJahrestagVorbei Then intJahre = intJahre - 1 GetAlterInJahren = intJahre End Function
mfg
reiner