Live-Forum - Die aktuellen Beiträge
Datum
Titel
28.03.2024 21:12:36
28.03.2024 18:31:49
Anzeige
Archiv - Navigation
280to284
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
280to284
280to284
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

gesucht: Funktion, Makro oder Formel - haarig!

gesucht: Funktion, Makro oder Formel - haarig!
18.07.2003 09:31:30
Martin
Hallo,
ich habe mich bei folgendem Problem komplett festgefahren und komme nicht mehr raus.
Eine Tabelle erfasst Daten, die im wesentlichen aus einem Code (nennen wir ihn Kauf) und einem Datum bestehen. Das Datum ist dasjenige, an dem der Kauf getätigt wurde. Relevant ist das Datum, um die Fälligkeit des Kaufes zu erkennen.
Die Fälligkeit ist ihrerseits abhängig davon, welche Art von Kauf vorliegt. Unterschieden wird zwischen einem CF- und einem FF-Kauf. CF hat eine Fälligkeit von 3 Tagen, FF von 5 Tagen.
Das heisst, dass ein FF mit Datum 15/07/03 am 22/07/03 fällig wird, da die Wochenenden aus der Berechnung ausgeschlossen werden (15/07/03 + 5 Tage = 20/07/03 - WE wird aber übersprungen - also 22/07/03).
Was ich hinzufügen möchte, ist eine Spalte, in der ich entweder das Fälligkeitsdatum oder aber die restlichen Tage bis zur Fälligkeit anzeigen lasse. Die Formel oder die Funktion oder das Makro muss also in Abhängigkeit der Kaufart (CF, FF) und des Datums die Berechnung durchführen, zugleich aber die Wochenden ausklammern und das ist das Problem.
Folgendes Makro habe ich gebastelt, um (als Krücke) mir die Tage rund um die Fälligkeit anzeigen zu lassen. Es werden also hier bereits die WE ausgeklammert. Vielleicht ist dies eine Hilfe.

Sub FixDate()
Dim dT2p As Range
Dim dT1p As Range
Dim dtoday As Range
Dim dT1 As Range
Dim dT2 As Range
Dim dT3 As Range
Dim dT4 As Range
Dim dT5 As Range
Dim dT6 As Range
Dim dT7 As Range
Set dT2p = Sheets("Datum").Range("dT_2p")   'today +2
Set dT1p = Sheets("Datum").Range("dT_1p")   'today +1
Set dtoday = Sheets("Datum").Range("dT")    'today
Set dT1 = Sheets("Datum").Range("dT_1")     'yesterday
Set dT2 = Sheets("Datum").Range("dT_2")     'day before yesterday
Set dT3 = Sheets("Datum").Range("dT_3")     '...
Set dT4 = Sheets("Datum").Range("dT_4")
Set dT5 = Sheets("Datum").Range("dT_5")
Set dT6 = Sheets("Datum").Range("dT_6")
Set dT7 = Sheets("Datum").Range("dT_7")
If Weekday(Date) = 2 Then '=Monday
heuer2p = DateValue(Format(Date + 2))   'Wed
heuer1p = DateValue(Format(Date + 1))   'Tue
heuer1 = DateValue(Format(Date - 3))    'Fri
heuer2 = DateValue(Format(Date - 4))    'Thu
heuer3 = DateValue(Format(Date - 5))    'Wed
heuer4 = DateValue(Format(Date - 6))    'Tue
heuer5 = DateValue(Format(Date - 7))    'Mon
heuer6 = DateValue(Format(Date - 10))   'Fri
heuer7 = DateValue(Format(Date - 11))   'Thu
ElseIf Weekday(Date) = 3 Then 'Tue
heuer2p = DateValue(Format(Date + 2))   'Thu
heuer1p = DateValue(Format(Date + 1))   'Wed
heuer1 = DateValue(Format(Date - 1))    'Mon
heuer2 = DateValue(Format(Date - 4))    'Fri
heuer3 = DateValue(Format(Date - 5))    'Thu
heuer4 = DateValue(Format(Date - 6))    'Wed
heuer5 = DateValue(Format(Date - 7))    'Tue
heuer6 = DateValue(Format(Date - 8))    'Mon
heuer7 = DateValue(Format(Date - 11))   'Fri
ElseIf Weekday(Date) = 4 Then 'Wed
heuer2p = DateValue(Format(Date + 2))   'Fri
heuer1p = DateValue(Format(Date + 1))   'Thu
heuer1 = DateValue(Format(Date - 1))    'Tue
heuer2 = DateValue(Format(Date - 2))    'Mon
heuer3 = DateValue(Format(Date - 5))    'Fri
heuer4 = DateValue(Format(Date - 6))    'Thu
heuer5 = DateValue(Format(Date - 7))    'Wed
heuer6 = DateValue(Format(Date - 8))    'Tue
heuer7 = DateValue(Format(Date - 9))    'Mon
ElseIf Weekday(Date) = 5 Then 'Thu
heuer2p = DateValue(Format(Date + 4))   'Mon
heuer1p = DateValue(Format(Date + 1))   'Fri
heuer1 = DateValue(Format(Date - 1))    'Wed
heuer2 = DateValue(Format(Date - 2))    'Tue
heuer3 = DateValue(Format(Date - 3))    'Mon
heuer4 = DateValue(Format(Date - 6))    'Fri
heuer5 = DateValue(Format(Date - 7))    'Thu
heuer6 = DateValue(Format(Date - 8))    'Wed
heuer7 = DateValue(Format(Date - 9))    'Tue
ElseIf Weekday(Date) = 6 Then 'Fri
heuer2p = DateValue(Format(Date + 4))   'Tue
heuer1p = DateValue(Format(Date + 3))   'Mon
heuer1 = DateValue(Format(Date - 1))    'Thu
heuer2 = DateValue(Format(Date - 2))    'Wed
heuer3 = DateValue(Format(Date - 3))    'Tue
heuer4 = DateValue(Format(Date - 4))    'Mon
heuer5 = DateValue(Format(Date - 7))    'Fri
heuer6 = DateValue(Format(Date - 8))    'Thu
heuer7 = DateValue(Format(Date - 9))    'Wed
End If
dT2p.Value = CDbl(DateValue(heuer2p))
dT1p.Value = CDbl(DateValue(heuer1p))
dtoday.Value = CDbl(DateValue(Date))
dT1.Value = CDbl(DateValue(heuer1))
dT2.Value = CDbl(DateValue(heuer2))
dT3.Value = CDbl(DateValue(heuer3))
dT4.Value = CDbl(DateValue(heuer4))
dT5.Value = CDbl(DateValue(heuer5))
dT6.Value = CDbl(DateValue(heuer6))
dT7.Value = CDbl(DateValue(heuer7))
End Sub

Ich hoffe das Problem einigermassen verständlich erklärt zu haben und würde mich über eine Lösung oder einen Denkansatz sehr freuen.
Gruss,
Martin

8
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: gesucht: VBA-Funktion
18.07.2003 10:33:01
Sigi E.
Hallo Martin,
da sollte folgende Funktion helfen ...

Function ArbeitstageAdd(Datum As Date, ArbTage As Long, _
FreieTage As Excel.Range) As Long
Dim EndDatum As Long
Dim ATage As Long
Dim FreiTag As Range
Dim Istfrei As Boolean
If IsDate(Datum) And IsNumeric(ArbTage) And _
Datum > 30000 And Datum < 50000 And _
ArbTage > -1001 And ArbTage < 1001 And _
ArbTage = Int(ArbTage) Then
EndDatum = Datum
ATage = ArbTage
Do While ATage <> 0
If ArbTage > 0 Then
EndDatum = EndDatum + 1
Else
EndDatum = EndDatum - 1
End If
Istfrei = False
For Each FreiTag In FreieTage
If EndDatum = FreiTag.Value Then
Istfrei = True
Exit For
End If
Next FreiTag
If WeekDay(EndDatum, vbMonday) < 6 And Not Istfrei Then
If ArbTage > 0 Then
ATage = ATage - 1
Else
ATage = ATage + 1
End If
End If
Loop
Else
EndDatum = ""
End If
ArbeitstageAdd = EndDatum
End Function

z.B.: in A1 steht dein Datum, in B1 die Art ("FF"), in H1 bis H12 die Feiertage:
dann folgende Formel: "=ArbeitstageAdd(A1;WENN(B1="FF";5;WENN(B1="CF";3;0));H1:H12)"
Gruß
Sigi

Anzeige
AW: gesucht: VBA-Funktion
18.07.2003 10:49:48
Martin
Das schaue ich mir mal genauer an, da ich eine Schwäche für Funktionen habe ;-)
Danke dir
Martin

ohne Add-In
18.07.2003 09:56:10
FCH
Hi,
ich hoffe, ich hab das richtig verstanden:
AW: ohne Add-In
18.07.2003 10:15:58
Martin
hmm, kommt leider nicht ganz hin, ist aber ein Ansatz. Werde damit rumspielen.
Danke!
Martin

AW: gesucht: Funktion, Makro oder Formel - haarig!
18.07.2003 09:48:42
Yvonne
Hallo Martin,
dein Problem lässt sich mit Hilfe der Analyse-Funktion Arbeitstag lösen. (Unter Extras-AddIns- die Analyse-Funktionen aktivieren).
Steht in Spalte A die Kauf-Art und in Spalte B das Datum (ab Zeile 2), dann schreibe z.B. in Spalte C folgendes:
=WENN(A2="FF";ARBEITSTAG(B2;5);WENN(A2="CF";ARBEITSTAG(B2;3);0))
Gruß, Yvonne

Anzeige
AW: gesucht: Funktion, Makro oder Formel - haarig!
18.07.2003 09:57:07
Martin
Hallo Yvonne,
hier im Büro habe ich anscheinend nicht dieses AddIn, oder die englische Definition ist anders als im Deutschen bzw. anders als ich es erwarten würde. Werde das aber zuhause mal anschauen!
Danke schon mal für den Tip.
Gruss,
Martin

AW: gesucht: Funktion, Makro oder Formel - haarig!
18.07.2003 10:36:08
Yvonne
Hallo Martin,
ohne Add-In kannst du mal folgendes probieren:
=WENN(A2="FF";WENN(WOCHENTAG(B2)=7;B2+6;WENN(WOCHENTAG(B2)=1;B2+5;B2+7));WENN(A2="CF";WENN(WOCHENTAG(B2)=7;B2+4;WENN(WOCHENTAG(B2)>3;B2+5;B2+3))))
Gruß, Yvonne

Ist gekauft!
18.07.2003 10:47:13
Martin
Super Yvonne, das klappt absolut hervorragend.
Vielen Dank!
Gruss,
Martin

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige