avalon1
Goto Top

VBA Werktage in Zellen eintragen

Hy

mit den Werktage ist das so eine Sache, wie man zw. 2 Datumseinträge die Werktage
auslesen kann, geht ja, aber ich bräuchte eine etwas andere Funktion,
und zwar habe ich in einem Worksheet in Zelle "A2" ein Datum stehen
von dem lese ich das Monat aus und speichere dies in eine Variable.

Jetzt hätt ich gerne dass VBA jetzt erkennt welche Tage von diesem Monat
Werktage sind und die soll mir VBA in ein anderes Worksheet in Spalte "A"
eintragen.

Dann würde eine Formel greifen die sich auf die Spalte "A" bezieht.

ich hoffe das kann man realisieren...

lg
ava

Content-Key: 149287

Url: https://administrator.de/contentid/149287

Printed on: April 18, 2024 at 05:04 o'clock

Member: bastla
bastla Aug 18, 2010 at 18:55:51 (UTC)
Goto Top
Hallo Avalon1!

Könnte etwa so aussehen:
Sub Werktage()
AbZeile = 2 'erste Zeile Zieltabelle  
Spalte = "A" 'Spalte Zieltabelle  
Datum = Worksheets("Tabelle1").Range("A2").Value  
Von = DateSerial(Year(Datum), Month(Datum), 1) 'erster Tag des Monats  
Bis = DateAdd("m", 1, Von) - 1 'erster Tag des nächsten Monats - 1 = letzter Tag dieses Monats  
Zeile = AbZeile
With Worksheets("Tabelle2")  
    For D = Von To Bis 'Schleife für alle Tage des Monats  
        If Weekday(D) <> vbSunday And Weekday(D) <> vbSaturday Then ' wenn Tag weder So noch Sa ist, ...  
            .Cells(Zeile, Spalte) = D '... Datum eintragen  
            Zeile = Zeile + 1
        End If
    Next
End With
End Sub
Um Feiertage musst Du Dich natürlich zusätzlich kümmern ...

Grüße
bastla
Mitglied: 76109
76109 Aug 19, 2010 at 11:01:34 (UTC)
Goto Top
Hallo Avalon1 und Hallo bastla!

...wobei sich die Feiertage und sonstige Ausschlusstage (Brückentage...) z.B. in Tabelle 3 Range(A2:L7) in einer Tabelle befinden könnten.

In Zeile 2 sind die Monate von 1-12 und ab Zeile 3 die Tage in den entsprechenden Monatsspalten eingetragen
A B C D E F G H I J K L
2 ##blue | 1 ## ##blue | 2 ## ##blue | 3 ## ##blue | 4 ## ##blue | 5 ## ##blue | 6 ## ##blue | 7 ## ##blue | 8 ## ##blue | 9 ## ##blue | 10 ## ##blue | 11 ## ##blue | 12 ##
3 ##red | 1 ## ##red | 2 ## ##red | 1 ## ##red | 3 ## ##red | 3 ## ##red | 1 ## ##red | 25 ##
4 ##red | 6 ## ##red | 5 ## ##red | 13 ## ##red | 26 ##
5 ##red | 24 ##
6
7
und mit diesem Code wird diese Tabelle dann auf Ausschlusstage geprüft:
Const SheetHoliday = "Tabelle3"  
Const RangeHoliday = "A2:L7"  

Private Function IsHoliday(ByVal Datum As Date) As Boolean
    Dim V As Variant, i As Integer
    
    V = Sheets(SheetHoliday).Range(RangeHoliday).Value
        
    For i = 2 To UBound(V, 1)
        If Not IsEmpty(V(i, Month(Datum))) Then
            If Day(Datum) = V(i, Month(Datum)) Then IsHoliday = True:  Exit Function
        End If
    Next
End Function
Das ließe sich dann in bastlas Codezeile 10 in etwa so mit einbinden:
... And IsHoliday(D) = False Then ....

Gruß Dieter

PS. Die Tabelle kann natürlich auch ausgeblendet werden