Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: Arbeitstage ohne WE und Feiertage

Arbeitstage ohne WE und Feiertage
03.01.2020 00:14:43
Marcel
Hallo Excel Profis,
ich wünsche zunächst ein frohes und gesundes neues Jahr 2020.
Doch auch in diesem Jahr, habe ich wieder Fragen und Probleme und so kommen zu meiner ersten Problematik im neuen Jahr.
Ich arbeite gerade an einer Projekt-Liste mit Priorisierung. Eine Komponente in der Prio-Berechnung ist die geplante Dauer des Projekts.
Soll heissen: In meiner Tabelle, in der Spalte H steht immer das Datum an dem mit dem Projekt begonnen wurde.
In Spalte R trage ich ein weiteres Datum ein, das geplante Ende des Projekts.
Nun möchte ich die Arbeitstage zwischen diesen beiden Daten berechnen lassen und falls Feiertage dazwischen liegen, sollen diese abgezogen werden.
Ich habe hier im Forum schon folgende Function entdeckt:
Function Arbeitstage(AnfDatum As Date, EndDatum As Date, FreieTage As Excel.Range) As Long
Dim Datum As Date
Dim Tage As Long
Dim Istfrei As Boolean
Dim FreiTag As Range
If AnfDatum For Datum = AnfDatum To EndDatum
Istfrei = False
If Weekday(Datum, vbMonday) For Each FreiTag In FreieTage
If Datum = FreiTag.Value Then
Istfrei = True
Exit For
End If
Next FreiTag
If Not Istfrei Then
Tage = Tage + 1
End If
End If
Next Datum
Else
Tage = ""
End If
Arbeitstage = Tage
End Function Allerdings habe ich keine Ahnung wie ich diese richtig nutze. Wenn ich es richtig verstehe ist es ein Nachbau der Nettoarbeitstage (WorkSheet-)Funktion, richtig? Also berechnet sie Arbeitstage, abzüglich Feiertage (Oben in der Funktion "FreieTage" und "FreiTag"), oder nicht?
Wenn es so ist, wie ich es meine, soll die Funktion ausgeführt werden, wenn ich das End-Datum in Spalte R eingetragen habe. Dies wollte ich so lösen:
Im Code zu Tabelle1 steht folgendes:
Private Sub Worksheet_Change(ByVal Target As Range)
xRow = Target.Row
xCol = Target.Column
If xCol = 18 Then
If Intersect(Target, Range("R5:R35")) Is Nothing Then
Exit Sub
Else
Call WorkDay_Calc
End If
End If
End Sub
Im Modul1 steht folgender Code:
Sub WorkDay_Calc()
dend = Tabelle1.Cells(xRow, xCol).Value
dstart = Tabelle1.Cells(xRow, 8).Value
FTage = Tabelle9.Range("B2:B11")
WorkDay = Arbeitstage(dstart, dend, FTage)
Tabelle1.Cells(xRow, 19).Value = WorkDay
End Sub
Function Arbeitstage(AnfDatum As Date, EndDatum As Date, FreieTage As Excel.Range) As Long
Dim Datum As Date
Dim Tage As Long
Dim Istfrei As Boolean
Dim FreiTag As Range
If AnfDatum For Datum = AnfDatum To EndDatum
Istfrei = False
If Weekday(Datum, vbMonday) For Each FreiTag In FreieTage
If Datum = FreiTag.Value Then
Istfrei = True
Exit For
End If
Next FreiTag
If Not Istfrei Then
Tage = Tage + 1
End If
End If
Next Datum
Else
Tage = ""
End If
Arbeitstage = Tage
End Function Nun habe ich das Problem das beim Kompilieren folgender Fehler auftaucht: "Argumenttyp ByRef unverträglich" und zwar bei der Variable dstart.
Ich habe die Variablen aber unter Option Explicit im Modul als Date deklariert.
Schon mal vielen Dank!
LG
Marcel
Anzeige

5
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Arbeitstage ohne WE und Feiertage
03.01.2020 21:11:07
Marcel
Vielen Dank für eure Antworten.
@Bernd:
Die Funktion Nettoarbeitstage kenne ich. Ich weiss auch damit umzugehen. Ich wolle es bewusst über VBA machen, um meine VBA Kenntnisse weiter zuvertiefen. Als Übung so zu sagen. Habe ich denn recht damit, dass die Funktion die ich erwähnte, eine VBA Kopie von Nettoarbeitstage ist?
@Günther:
Ich schaue mir dieses Power Query gerne an, allerdings befürchte ich, dass ich es auf meine Tabelle so nicht anwenden kann,ohne meine Tabelle komplett umzubauen bzw. neu zu formatieren.
Gruß
Marcel
Anzeige
AW: Arbeitstage ohne WE und Feiertage
03.01.2020 23:25:04
Günther
Nun ja Marcel,
das kann ich nicht beurteilen. Mir liegt keine Muster-xlsx vor. Allerdings kann PQ auch bei recht individuellen Dateistrukturen in der eigentlichen Abfrage vieles umbauen. Viel Glück bei der weiteren Lösungssuche.
Gruß
Günther
Anzeige
AW: Arbeitstage ohne WE und Feiertage
04.01.2020 01:19:59
Marcel
Hallo Günther,
meine Vermutung basiert auch nur auf dem Link den du gepostet hattest. Was dort an Vorbereitungen getroffen wird, um dieses Power Query zu nutzen, dazu fehlt mir gerade die Zeit. Dazu müsste ich meine Tabelle halt komplett neu gestalten. Aber ich weiss es halt auch nicht 100%-ig, ich habe es noch nie benutzt. Aber es ist auf jeden Fall spannend!
Vielen Dank auf jeden Fall nochmal für den Hinweis.
Gruß
Marcel
Anzeige
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige
Anzeige
Anzeige
Anzeige

Infobox / Tutorial

Arbeitstage ohne Wochenende und Feiertage berechnen


Schritt-für-Schritt-Anleitung

Um die Arbeitstage ohne Wochenende und Feiertage in Excel zu berechnen, kannst du folgende Schritte befolgen:

  1. Daten vorbereiten: Stelle sicher, dass du zwei Datumsangaben hast:

    • Startdatum in Spalte H
    • Enddatum in Spalte R
  2. Feiertage definieren: Liste die Feiertage in einem separaten Bereich, z.B. in Tabelle9!B2:B11.

  3. VBA-Funktion erstellen: Füge die folgende Funktion in ein Modul ein:

    Function Arbeitstage(AnfDatum As Date, EndDatum As Date, FreieTage As Excel.Range) As Long
       Dim Datum As Date
       Dim Tage As Long
       Dim Istfrei As Boolean
       Dim FreiTag As Range
    
       If AnfDatum < EndDatum Then
           For Datum = AnfDatum To EndDatum
               Istfrei = False
               If Weekday(Datum, vbMonday) < 6 Then ' Montag bis Freitag
                   For Each FreiTag In FreieTage
                       If Datum = FreiTag.Value Then
                           Istfrei = True
                           Exit For
                       End If
                   Next FreiTag
                   If Not Istfrei Then
                       Tage = Tage + 1
                   End If
               End If
           Next Datum
       Else
           Tage = 0
       End If
       Arbeitstage = Tage
    End Function
  4. Änderungsereignis für die Tabelle: Füge den folgenden Code in das Arbeitsblattmodul ein, um die Berechnung beim Ändern des Enddatums auszulösen:

    Private Sub Worksheet_Change(ByVal Target As Range)
       Dim xRow As Long
       Dim xCol As Long
       If Target.Column = 18 Then ' Spalte R
           xRow = Target.Row
           Call WorkDay_Calc(xRow)
       End If
    End Sub
    
    Sub WorkDay_Calc(xRow As Long)
       Dim dend As Date
       Dim dstart As Date
       Dim FTag As Range
    
       dend = Tabelle1.Cells(xRow, 18).Value ' Enddatum
       dstart = Tabelle1.Cells(xRow, 8).Value ' Startdatum
       Set FTag = Tabelle9.Range("B2:B11") ' Feiertage
    
       Tabelle1.Cells(xRow, 19).Value = Arbeitstage(dstart, dend, FTag) ' Ergebnis in Spalte S
    End Sub
  5. Testen: Gib ein Start- und Enddatum ein und überprüfe die Berechnung der Arbeitstage ohne Wochenende und Feiertage in der entsprechenden Zelle.


Häufige Fehler und Lösungen

  • Fehler: "Argumenttyp ByRef unverträglich":

    • Stelle sicher, dass die Variablen dstart und dend korrekt als Date deklariert sind und dass die Zellen, auf die sie verweisen, tatsächliche Datumswerte enthalten.
  • Fehler: Funktion gibt 0 zurück:

    • Überprüfe, ob die Feiertage korrekt in den angegebenen Bereich eingetragen sind und dass die eingegebenen Daten in den Zellen H und R gültig sind.

Alternative Methoden

Anstelle von VBA kannst du auch Excel-Formeln verwenden:

  • Nettoarbeitstage-Funktion: Du kannst die integrierte Formel NETTOARBEITSTAGE verwenden, um die Arbeitstage zu berechnen:

    =NETTOARBEITSTAGE(H2; R2; Feiertage!B2:B11)

    Diese Formel zieht automatisch die Wochenenden und die Feiertage ab.

  • Power Query: Für komplexere Datenanalysen kannst du auch Power Query verwenden, um Arbeitstage zu berechnen. Hierbei kannst du die Daten aufbereiten und dann die Nettoarbeitstage extrahieren.


Praktische Beispiele

Angenommen, dein Projekt beginnt am 01.03.2023 und endet am 15.03.2023. Wenn der 08.03.2023 (Tag der Frau) ein Feiertag ist und auf einen Mittwoch fällt, kannst du die Arbeitstage wie folgt berechnen:

  1. Startdatum: 01.03.2023
  2. Enddatum: 15.03.2023
  3. Feiertage: 08.03.2023

Die Berechnung würde dann 10 Arbeitstage ergeben, wenn man nur die Wochenenden und den Feiertag abzieht.


Tipps für Profis

  • Nutze named ranges für die Feiertage, um die Formel handlicher zu gestalten und die Lesbarkeit zu verbessern.
  • Achte darauf, die Excel-Version zu überprüfen, da einige Funktionen in älteren Versionen nicht verfügbar sind.
  • Verwende bedingte Formatierung, um Arbeitstage visuell hervorzuheben.

FAQ: Häufige Fragen

1. Frage
Wie kann ich die Nettoarbeitstage berechnen, wenn ich auch Urlaubstage abziehen möchte?
Antwort: Du kannst die Funktion NETTOARBEITSTAGE erweitern, indem du die Urlaubstage ebenfalls in den Feiertagsbereich einfügst.

2. Frage
Wie viele Tage hat ein Jahr ohne Wochenende und Feiertage?
Antwort: Ein Jahr hat 365 Tage minus der Wochenendtage und Feiertage. In Deutschland gibt es ca. 10-13 Feiertage, die du abziehen musst, was zu etwa 250-255 Arbeitstagen führt, abhängig von der Anzahl der Wochenenden.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige