Anzeige
Archiv - Navigation
1140to1144
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
Inhaltsverzeichnis

Tage zwischen zwei Datümern auswerten

Tage zwischen zwei Datümern auswerten
Reinhard
Hallo Wissende,
in A ist der Starttermin, in C der Endtermin. Beide Spalten benutzerdefiniert so formatiert: TTT, TT.MM.JJJJ
Es können da ja 0-X Tage dazwischenliegen, diese Zahl der dazwischenliegenden Tage möchte ich ermitteln.
Mit Datediff-1 erhalte ich diese Zahl. Diese will ich nun vermindern um die Tage die Sa oder So sind. daran scheitere ich bislang.
Es soll eine UDF werden.
Sobald ich die Hochkommas im Code wegmache kommt "#WERT!" :-(
Function ZDiff()
Dim Zei As Long, Tage As Integer
Zei = Application.Caller.Row
Tage = DateDiff("d", Range("A" & Zei), Range("C" & Zei)) - 1
'MsgBox CDate(Range("A" + Zei).Value)
'MsgBox Range("A" + Zei).Value
'For N = 1 To Tage
'   If Weekday(Range("A" + Zei).Value + N, vbMonday) > 5 Then Tage = Tage - 1
'Next N
ZDiff = Tage
End Function

Danke ^ Gruß
Reinhard

12
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Benutzer
Anzeige
AW:=NETTOARBEITSTAGE
05.03.2010 17:05:03
hary
hallo Reinhard
gibt's doch schon: =NETTOARBEITSTAGE(A1;B1)
geht auch in VBA.
oder meinst was anderes.
gruss hary
AW: AW:=NETTOARBEITSTAGE
05.03.2010 17:09:46
Reinhard
Hallo Hary,
es war so, ja , ich kenne die Formel, aber ich habe von Hans den Übersetzer (vbaplusde.xla) , da standen sie nicht in der Liste, dann fiel mir ein in Excelformeln.de steht doch was dazu.
Es ist eine Add-In Funktion. Deren Ersatzformel war mir zu lang um sie in Vba zu wandeln :-)
Dann dachte ich mir, probier ichs doch mit Datediff....
Gruß
Reinhard
AW: Tage zwischen zwei Datümern auswerten
05.03.2010 17:08:23
Hajo_Zi
Hallo Reinhard,
und falls Feiertage noch berücksichtigt werden soll.
Arbeitstage ausrechnen von Datum bis Datum
z.B. mit der Funktion Nettoarbeitstage. Du musst aber vorher im Menü Extra-Add-In-Manager die Analyse-Funktionen aktivieren.
=NETTOARBEITSTAGE(A1;A30;{"13.4.01";"16.4.01"})
A1 =erster Tag
A30=letzter Tag
In den Klammern die Feiertage
lt Excel-Hilfe so: (A1, A2 die Datumangaben)
=NETTOARBEITSTAGE(A1;A2;{"24.12.1999";"03.01.2000"})
besser: lege einen Bereich fest(z.B."Feiertage") , in den du alle Feiertage schreibst und dann
=NETTOARBEITSTAGE(A1;A2;Feiertage)

Anzeige
Feiertage spielen keine Rolle
05.03.2010 17:13:05
Reinhard
Hallo Hajo,
es tut mir leid, habe es vergessen das zu schreiben, Feiertage spielen keine Rolle.
Ansonsten, ich möchte Add-In frei bleiben.
Gruß
Reinhard
AW: was von Ramses
05.03.2010 18:08:30
Ramses
Hallo Hary,
danke, bringt zwar noch (für meinen Wunsch) die falsche zahl, aber das kann ich leicht korrigieren.
Genauso das mit Feiertagen rauswerfen.
Aber mal meine Anfrage völlig vereinfacht,
In A1 steht Fr, 05.03.2010 und A1 ist entsprechend formatiert.
Wie teste ich in Vba in einer Schleife ab ob A1+1, A1+2, usw ein Wochenendtag ist?
Abermach dir bitte erst in ner Stunde einen Kopp drüber.
Bis dahin probiere ich es anhand vom Code von Rainer selbst rauszufinden.
Gruß
Reinhard
Anzeige
Ich kriegs nicht hin :-(
05.03.2010 19:17:44
Reinhard
hallo Hary,
Wieso klappt mein Code nicht?
Ich habe doch sehr versucht das von Rainer nachzubilden.
Bei If Weekday(Format(Range("A" + Zei) + n, "dd.mm.yyyy"), vbMonday) krachts, warum?
Function ZDiff()
Dim Zei As Long, Tage As Integer, i, n
Zei = Application.Caller.Row
Tage = DateDiff("d", Range("A" & Zei), Range("C" & Zei)) - 1
For i = Range("A" & Zei) To Range("C" & Zei)
If Weekday(Format(Range("A" + Zei) + n, "dd.mm.yyyy"), vbMonday) 

Gruß
Reinhard
Glaub ich dir...
05.03.2010 22:58:10
Ramses
Hallo
Der Teufel liegt wie immer im Detail
If Weekday(Format(Range("A" + Zei) & n, "dd.mm.yyyy"), vbMonday)
Trotzdem kann es nicht funktionieren wegen unterschiedlicher Werte DateDiff und For i... Ergebnissen
Hier eine modifizierte Variante
Function ZDiff()
    Dim Zei As Long, i As Long, n As Long
    Dim myWDay As Long
    Zei = Application.Caller.Row
    Application.Volatile
    n = 0
    For i = Range("A" & Zei) To Range("C" & Zei)
        If Weekday(Range("A" & Zei) + n, vbMonday) < 6 Then
            myWDay = myWDay + 1
        End If
        n = n + 1
    Next i
    ZDiff = myWDay
End Function

Gruss Rainer
Anzeige
AW: Glaub ich dir...
06.03.2010 10:27:25
Reinhard
Hallo Rainer,
Klappt natürlich, como siempre .-)
Gruß
Reinhard
Solamente siempre ? :-) o.w.T.
06.03.2010 21:57:41
Ramses
...
AW: Solamente siempre ? :-) o.w.T.
08.03.2010 15:04:13
Reinhard
Hallo Rainer,
como siempre heißt doch "wie immer"!?
Solamente heißt "nur".
Wie soll ich denn "wie immer" noch steigern? :-)
Gruß
Reinhard
Kein Problem...
08.03.2010 21:01:08
Ramses
Hallo Reinhard
Siempre kann auch mit "gewöhnlich" übersetzt werden.
Daher die Frage "nur gewöhnlich" ? :-)
Gruss Rainer

343 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige