Excel-Problemstellung

Spike

Admiral
Teammitglied
Vielleicht kann hier mal jemand meinen Gehirnwindungen auf die Sprünge helfen, wie man folgende Problemstellung in Excel am besten lösen kann:

Ich hab zB einen Datumsbereich 26.01.2010-20.02.2010. Als Ergebnis hätte ich gerne wieviele Tage in diesem Bereich auf einen bestimmten Monat entfallen. Hier also 6 Tage im Jänner und 20 Tage im Feber.
 
Angenommen die beiden Daten stehen in B1 und B2 und die Ausgabe soll in der Spalte C erfolgen:

Code:
Option Explicit

Sub Button1_Click()
    Dim startDatum As Date
    Dim endDatum As Date
    Dim index As Integer
    
    startDatum = Range("B1")
    endDatum = Range("B2")
    If (endDatum <= startDatum) Then
        Exit Sub
    End If
    index = 1
    While (startDatum < endDatum)
        If (Month(startDatum) = Month(endDatum) And Year(startDatum) = Year(endDatum)) Then
            Range("C" & index) = DateDiff("d", startDatum, endDatum) + 1
            Exit Sub
        Else
            Dim endeVomMonat As Date
           
            endeVomMonat = TageImMonat(Month(startDatum), Year(startDatum)) & "." & Month(startDatum) & "." & Year(startDatum)
            Range("C" & index) = DateDiff("d", startDatum, endeVomMonat) + 1
            If (Month(startDatum) = 12) Then
                startDatum = "1.1." & Year(startDatum) + 1
            Else
                startDatum = "1." & Month(startDatum) + 1 & "." & Year(startDatum)
            End If
            index = index + 1
        End If
    Wend
End Sub

Function TageImMonat(Monat As Integer, Jahr As Integer) As Integer
    Select Case Monat
       Case 1, 3, 5, 7, 8, 10, 12
           TageImMonat = 31
       Case 4, 6, 9, 11
           TageImMonat = 30
       Case 2
           If (Jahr Mod 4 <> 0) Then
               TageImMonat = 28 'nicht durch 4 teilbar = kein Schaltjahr
           Else
               If (Jahr Mod 100 <> 0) Then
                   TageImMonat = 29 'nicht durch 100 teilbar = Schaltjahr
               Else
                   If (Jahr Mod 400 <> 0) Then
                       TageImMonat = 28 'nicht durch 400 teilbar = kein Schaltjahr
                   Else
                       TageImMonat = 29  'durch 400 teilbar = Schaltjahr
                   End If
               End If
           End If
    End Select
End Function
 
Zuletzt bearbeitet:
Na darauf wär ich in 1.000 Jahren nicht gekommen. Werd das gleich mal ausprobieren. Besten Dank!
 
Zurück
Oben