Differenz aus zwei DateDiff mit Wenn Bedingung

Hallo Zusammen,

ich möchte ein Formelfeld berechnen, welches auf zwei DateDiff beruht. Leider bekomme ich keine Differenz hin. In Excel würde die Formel so aussehen:

=WENN(F879="";"";WENN((NETTOARBEITSTAGE(B879;F879)-NETTOARBEITSTAGE(C879;D879)-1)<1;1;NETTOARBEITSTAGE(B879;F879)-NETTOARBEITSTAGE(C879;D879)-1))

Ausgeschrieben:
Wenn Ausgangsdatum = leer, dann leer, ansonsten Datumsdifferenz aus Eingangs- und Ausgangsdatum abzüglich Datumsdifferenz aus KV versendet und Freigabe minus 1 ist kleiner 1, dann 1, ansonsten berechne Datumsdifferenz aus Eingangs-und Ausgangsdatum abzüglich KV versendet und Freigabe minus 1

Ich hoffe es ist einigermaßen verständlich, aber ich bekomme es leider weder als Textfeldformel hin, noch in den Formelfeldern.

Danke euch.

Gruß Daniel

Die Formelfunktionen, die Sie brauchen, sind Cond (synonym: If, entspricht WENN) und DateDiff (ermittelt Datumsdifferenz in Tagen).

Die Abfrage auf leer geht über IsNullOrEmpty.

Nachtrag: Wenn das Formelfeld vom Typ ‚Numerisch‘ ist (wir reden ja im Endeffekt von einer Zahl), dann müssen Sie für „leer“ als Ergebnis null() verwenden.

Cond(IsNullOrEmpty(Ausgangsdatum), null(), DateDiff(Ausgangsdatum, Eingangsdatum) - Cond(....))

Habs hinbekommen. Danke schon mal, aber noch eine Frage.

Gibt es die Möglichkeit nur Wochentage einrechnen zu lassen? Habe keine entsprechende Formel gefunden.

Gruß Daniel

Ich geh davon aus, mit „Wochentage“ sind „Werktage“ (im Sinne von Mo-Fr) gemeint?

Uhhh :sweat_smile: - das wird etwas komplizierter und wäre angesichts von Feiertagen, die auf Mo-Fr fallen, am besten noch nur regionale Feiertage wie 6.1. oder 14.8. :see_no_evil:, dennoch nicht perfekt exakt.

Eine recht gute Annäherung wäre, dass man je „volle 7 Tage“ wieder 2 Tage abzieht. D.h. sowas wie

... - (Int(DateDiff(...)/7)*2)

Zusätzlicher Sonderfall zum Knobeln :nerd_face:: wenn DateDiff < 7 dann müsste man dennoch 2 Tage abziehen, falls der Dow (day of the week) des Endedatums kleiner ist, als der des Anfangsdatums, weil auch dann ein Wochenende dazwischenliegt (z.B. Do-Di). Es muss also nochmal ein

... - Cond(DateDiff(...) < 7 and Dow(...) < Dow(...), 2, 0)

dahinter.

Disclaimer: Alles ohne Gewähr. Ich tipp das hier tatsächlich auf der Couch ad hoc, ohne das ausgetestet zu haben.

Zusammengebaut sähe es also so aus:

Cond(IsNullOrEmpty(Ausgangsdatum)
  , null()
  , DateDiff(Ausgangsdatum, Eingangsdatum)
    - (Int(DateDiff(Ausgangsdatum, Eingangsdatum)/7)*2)
    - Cond(DateDiff(Ausgangsdatum, Eingangsdatum) < 7 and Dow(Ausgangsdatum) < Dow(Eingangsdatum), 2, 0)
)

(Die Nebenbedingung bzgl der weiteren Felder wie „KV“ habe ich jetzt unter den Tisch fallen lassen, damit die Grundidee der Formel für alle (hoffentlich) nachvollziehbar bleibt.)

ja Freitag da funktioniert der Kopf nur noch bedingt, natürlich Werktage :smiley:

mhm muss ich mir mal überlegen, ob wir da nicht den ein oder anderen Tag verschlucken. Andere Frage:
Ich wollte es jetzt als Formelfeld genauso anlegen, aber da gibt er mit Datentyp Fehler an. Ich habe die einzelnen Punkte angepasst aber es funktioniert leider weiterhin nicht.
Formel aus der Eingabemaske:

«Cond(IsNullOrEmpty(Ausgangsdatum),Null(),Cond((DateDiff(Date(Eingangsdatum) ,Date(Ausgangsdatum))-DateDiff(Date(KV_versendet),Date(Freigabe))-1)<1,1 ,(DateDiff(Date(Ausgangsdatum),Date(Eingangsdatum))-DateDiff(Date(KV_versendet),Date(Freigabe))-1)))» «" Tage"»

angepasste Felder für Formelfelder:

«Cond(IsNullOrEmpty(Date$(IssueDate)),Null(),Cond((DateDiff(Date(Date(ReceiptDate)) ,Date(Date$(IssueDate)))-DateDiff(Date(KV_versendet),Date(Freigabe))-1)<1,1 ,(DateDiff(Date(Date$(IssueDate)),Date(Date$(ReceiptDate)))-DateDiff(Date(KV_versendet),Date(Freigabe))-1)))»

Gruß Daniel

In der Eingabemaske sind („historisch bedingt“:tm: :roll_eyes:) Datumsfelder vom Typ Zeichen. Daher brauch(t)en Sie dort die Date()-Konvertierungsfunktion. Die neu in Version 12 hinzugekommenen Formelfelder berücksichtigen hingegen von Anfang die eigentlichen Feldtypen - und ich unterstelle hiermit, dass „ReceiptDate“, „IssueDate“, „KV_versendet“ und „Freigabe“ alle vom Typ Datum(zeit) sind.

Demnach müsste Ihre Formel eigentlich so aussehen:

«Cond(IsNullOrEmpty(IssueDate)
  , Null()
  , Cond((DateDiff(IssueDate,ReceiptDate)-DateDiff(KV_versendet,Freigabe)-1) < 1
      , 1
      , (DateDiff(IssueDate,ReceiptDate)-DateDiff(KV_versendet,Freigabe)-1)
	)
)»

Den „else“-Term könnten Sie auch schreiben als Max(1,...):

«Cond(IsNullOrEmpty(IssueDate)
  , Null()
  , Max(1, (DateDiff(IssueDate,ReceiptDate)-DateDiff(KV_versendet,Freigabe)-1))
)»

Ich hoff das passt so. In jedem Fall müssen die ganzen Konvertier-Funktionen (Date, Date$) alle weg, wenn die ganzen Felder alle eh schon Datum(zeit)-Feldtypen sind.

Der Formelfeldtyp muss irgendeiner der numerischen Typen sein.