Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
800to804
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
800to804
800to804
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

einzelne Tage innerhalb einer Zeitspanne zählen

einzelne Tage innerhalb einer Zeitspanne zählen
10.09.2006 23:39:47
Uwe
Hallo allerseits, ich hoffe jemand kann mir weiterhelfen.
Innerhalb einer Userform gibt es ein Textfeld mit einem Anfangsdatum und ein Textfeld mit einem Enddatum sowie 7 Checkboxen, welche die Wochentage Mo - So darstellen sollen.
Kann man nun mit (endlichem) Programmieraufwand die Anzahl aller der Tage in dem Intervall ermitteln, für die in der jeweilige Checkbox ein Häkchen gesetzt wurde?
Bsp.: Anfangsdatum: 01.09.2006 Enddatum: 30.09.2006 Checkbox Mo, Di und Do gewählt ergibt 12 Tage
Für eine Anregung zur Lösung des Problems wäre ich Euch dankbar.
MfG
Uwe

3
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: einzelne Tage innerhalb einer Zeitspanne zählen
11.09.2006 10:02:35
ingUR
Hallo, Uwe,
leider hast Du nicht eine Beispielform hochgelaladen in die man hätte hineinschreiben können. So habe ich eine eigene Userform erstellt, die neben den beiden Textboxen tbx0, tbx1 die sieben Chackboxen chkxMo, chkxDi,chkxMi, ... (So=1, Mo=2, ...) enthält, ein Label-Objekt für das Ergebnis sowie einen Commandbutton cbtnCalc zum Auslösen der Berechnung:

Option Explicit
Private Sub cbtnCalc_Click()
Dim t0 As Date, t1 As Date, nt As Long
Dim wday0 As Integer, wday1 As Integer
Dim anz As Long
t0 = CDate(tbx0.Value)
t1 = CDate(tbx1.Value)
wday0 = Weekday(t0)
wday1 = Weekday(t1)
nt = t1 - t0 + 1
If chkxSo.Value = True Then anz = anz + calcNDays(nt, wday0, wday1, 1)
If chkxMo.Value = True Then anz = anz + calcNDays(nt, wday0, wday1, 2)
If chkxDi.Value = True Then anz = anz + calcNDays(nt, wday0, wday1, 3)
If chkxMi.Value = True Then anz = anz + calcNDays(nt, wday0, wday1, 4)
If chkxDo.Value = True Then anz = anz + calcNDays(nt, wday0, wday1, 5)
If chkxFr.Value = True Then anz = anz + calcNDays(nt, wday0, wday1, 6)
If chkxSa.Value = True Then anz = anz + calcNDays(nt, wday0, wday1, 7)
lbAnzahl.Caption = anz
End Sub
Private Function calcNDays(nt As Long, wday0 As Integer, wday1 As Integer, wday As Integer) As Integer
Dim anz As Integer, n7 As Integer
'Anzahl der vollen Wochen im Zeitraum (So, Mo, ...Sa)
n7 = (nt - (7 - wday0 + 1) - wday1) / 7
anz = n7
'Tag in der Startwoche?
anz = anz + IIf(nt - 7 * n7 - wday1 < 8 - wday, 0, 1)
'Tag in der EndWoche
anz = anz + IIf(nt - 7 * n7 - (7 - wday0 + 1) <= wday1, 1, 0)
calcNDays = anz
End Function

Das wesentliche dürfte in der Funktion stecken. Die Anzahl der vollen Wochen innerhalb der Zeitspanne ist gleich der Anzahl der bezeichneten Wochentage in dieser Spanne.
Für die Anzahl der Tage der Restwoche, nt - 7 * n7 - (7 - wday0 + 1), ist leicht zu ermitteln, ob ein bestimmter Wochentag noch einmal dort auftaucht.
Anders bei der Startwoche. Hier habe ich die Numerierung der Tage in der Startwoche umgekehrt wird (TagNr.So' = 8-Tag.So(:=1) = 7, TagNr.Mo' = 8-Tag.Mo(:=2)=6, ...) um feststellen zu können, ob die Startwoche noch einen gesuchten Wochentag enthält.
Umfangreiche Test habe ich nicht durchgeführt, ich hoffe jedoch, Du kannst diesen Gedanken in Deinem Brogramm umsetzen.
Gruß,
Uwe
Anzeige
AW: einzelne Tage innerhalb einer Zeitspanne zählen
11.09.2006 14:52:28
Uwe
Hallo ingUR,
vielen Dank für die prompte Hilfe - genau das ist die Lösung!!! Das Makro bzw. die Funktion funktionieren so, wie ich es mir vorgestellt habe.
Nochmals Danke
Uwe
geschlossen oT
11.09.2006 16:35:57
Schließer

301 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige