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

Excelberechnung in VBA

Forumthread: Excelberechnung in VBA

Excelberechnung in VBA
31.07.2006 19:49:59
Peter
Hallo VBA-Profis.
Folgendes Problem.
Ich möchte die Feiertage eines Jahres berechnen. Für Excel habe ich das gelöst.
Nun möchte ich das ganze von einem Tabellenblatt unabhängig in VBA durchführen.
Ich habe mit einem Makrorekorder die Formeln aufgezeichnet. Allerdings soll das ganze nicht statisch für ein Jahr funktionieren sondern zum Beispiel nach Eingabe des Jahres über eine Userform für jedes Jahr. Dazu müssen die Excel-Formeln im VBA aber Variable verstehen. Und dies kriege ich nicht hin.
Ich hoffe ich habe mich nicht zu umständlich ausgedrückt.
Ich hänge eine Datei mit den Excelformeln und der Übertragung der Formeln in VBA an.
https://www.herber.de/bbs/user/35476.xls
Vielleicht kann mir jemand helfen.
Danke schan mal
Peter
Anzeige

6
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Excelberechnung in VBA
31.07.2006 21:05:58
Josef
Hallo Peter!
Mal abgesehen davon, daß in deinen Berechnungen ein Fehler versteckt ist, würde ich das in VBA, vom späteren Einsatz abhängig, zB. so lösen.
' **********************************************************************
' Modul: Modul2 Typ: Allgemeines Modul
' **********************************************************************

Option Explicit

Public Function Feiertage(intYear As Integer) As Variant
Dim varDates(13, 1) As Variant
Dim dEaster As Date

dEaster = Easter(intYear)

varDates(0, 0) = DateSerial(intYear, 1, 1)
varDates(0, 1) = "Neujahr"

varDates(1, 0) = DateSerial(intYear, 1, 6)
varDates(1, 1) = "Dreikönig"

varDates(2, 0) = dEaster - 3
varDates(2, 1) = "Karfreitag"

varDates(3, 0) = dEaster + 1
varDates(3, 1) = "Ostermontag"

varDates(4, 0) = DateSerial(intYear, 5, 1)
varDates(4, 1) = "Tag der Arbeit"

varDates(5, 0) = dEaster + 39
varDates(5, 1) = "Christi Himmelfahrt"

varDates(6, 0) = dEaster + 50
varDates(6, 1) = "Pfingstmontag"

varDates(7, 0) = dEaster + 60
varDates(7, 1) = "Fronleichnam"

varDates(8, 0) = DateSerial(intYear, 10, 3)
varDates(8, 1) = "Tag der Einheit"

varDates(9, 0) = DateSerial(intYear, 11, 1)
varDates(9, 1) = "Allerheiligen"

varDates(10, 0) = DateSerial(intYear, 12, 24)
varDates(10, 1) = "Heiligabend"

varDates(11, 0) = DateSerial(intYear, 12, 25)
varDates(11, 1) = "1. Weihnachtstag"

varDates(12, 0) = DateSerial(intYear, 12, 26)
varDates(12, 1) = "2. Weihnachtstag"

varDates(13, 0) = DateSerial(intYear, 12, 31)
varDates(13, 1) = "Silvester"

Feiertage = varDates

End Function



Private Function Easter(Year As Integer) As Date
Dim D As Integer
D = (((255 - 11 * (Year Mod 19)) - 21) Mod 30) + 21
Easter = DateSerial(Year, 3, 1) + D + (D > 48) + 6 - _
  ((Year + Year \ 4 + D + (D > 48) + 1) Mod 7)
End Function



Sub test()
Dim dummy As Variant

dummy = Feiertage(2006)

Range("A1:B" & UBound(dummy, 1) + 1) = dummy
End Sub


Gruß Sepp

Anzeige
AW: Excelberechnung in VBA
31.07.2006 21:29:09
Peter
Hallo Sepp.
Das funktioniert wunderbar. Jetzt müsste es nur noch möglich sein das gewünschte Jahr zu übergeben.
Die späteren Anwendungen sollen verschiedene sein. Zum einen eine reine Auflistung wie sie jetzt schon funktioniert. Unter anderem sollen die Ergebnisse aber auch für die Formatierung eines Kalenders dienen.
Bis hierher schon mal vielen Dank
gruß
Peter
Anzeige
AW: Excelberechnung in VBA
31.07.2006 22:24:52
Peter
Wunderbar Sepp.
Da steckt schon einiges drin was ich verwenden kann.
Jetzt muss ich nur noch versuchen das alles zu verstehen und an anderer Stelle für meine Zwecke anzuwenden.
Vielen Dank noch mal.
Peter
Anzeige
AW: Excelberechnung in VBA
31.07.2006 21:19:32
Dörte
hallo peter,
endlich kann ich auch mal mit ner antwort glänzen und nicht immer nur fragen stellen.
ich habe mich vor einiger zeit mit dem thema feiertage beschäftigt und dieses makro dazu gefunden

Function Ostern(Jahr As Integer) As Date
Dim D As Integer
D = (((255 - 11 * (Jahr Mod 19)) - 21) Mod 30) + 21
Ostern = DateSerial(Jahr, 3, 1) + D + (D > 48) + 6 - ((Jahr + Jahr \ 4 + D + (D > 48) + 1) Mod 7)
End Function

dieses makro bezieht sich auf ostersonntag, der seit jahrhunderten nach dem mondkalender berechnet wird.die restlichen beweglichen feiertage beziehen sich auf ostersonntag.pfingstmontag ist so und so viele tage nach ostermontag ect.
ich hänge die passende datei mal mit an, vielleicht ist dir so ja schon geholfen.
https://www.herber.de/bbs/user/35480.xls
gruß dörte
Anzeige
AW: Excelberechnung in VBA
31.07.2006 22:22:05
Peter
Hallo Dörte.
Danke für deine Antwort. Sepp hat dieses Mkro in seiner Antwort auch genannt.
Wenn zwei diese Antwort liefern um so besser.
Gruß
Peter
;
Anzeige

Infobox / Tutorial

Feiertage in Excel VBA berechnen


Schritt-für-Schritt-Anleitung

Um Feiertage wie "Christi Himmelfahrt" und andere in Excel VBA zu berechnen, kannst du die folgende Schritt-für-Schritt-Anleitung verwenden:

  1. Öffne den Visual Basic-Editor:

    • Drücke ALT + F11, um den VBA-Editor zu öffnen.
  2. Füge ein neues Modul hinzu:

    • Klicke mit der rechten Maustaste auf "VBAProject (deine Arbeitsmappe)" > Einfügen > Modul.
  3. Füge den Code für die Feiertagsberechnung ein:

    • Kopiere den folgenden Code in das Modul:
    Option Explicit
    
    Public Function Feiertage(intYear As Integer) As Variant
       Dim varDates(13, 1) As Variant
       Dim dEaster As Date
    
       dEaster = Easter(intYear)
    
       varDates(0, 0) = DateSerial(intYear, 1, 1): varDates(0, 1) = "Neujahr"
       varDates(1, 0) = DateSerial(intYear, 1, 6): varDates(1, 1) = "Dreikönig"
       varDates(2, 0) = dEaster - 3: varDates(2, 1) = "Karfreitag"
       varDates(3, 0) = dEaster + 1: varDates(3, 1) = "Ostermontag"
       varDates(4, 0) = DateSerial(intYear, 5, 1): varDates(4, 1) = "Tag der Arbeit"
       varDates(5, 0) = dEaster + 39: varDates(5, 1) = "Christi Himmelfahrt"
       varDates(6, 0) = dEaster + 50: varDates(6, 1) = "Pfingstmontag"
       varDates(7, 0) = dEaster + 60: varDates(7, 1) = "Fronleichnam"
       varDates(8, 0) = DateSerial(intYear, 10, 3): varDates(8, 1) = "Tag der Einheit"
       varDates(9, 0) = DateSerial(intYear, 11, 1): varDates(9, 1) = "Allerheiligen"
       varDates(10, 0) = DateSerial(intYear, 12, 24): varDates(10, 1) = "Heiligabend"
       varDates(11, 0) = DateSerial(intYear, 12, 25): varDates(11, 1) = "1. Weihnachtstag"
       varDates(12, 0) = DateSerial(intYear, 12, 26): varDates(12, 1) = "2. Weihnachtstag"
       varDates(13, 0) = DateSerial(intYear, 12, 31): varDates(13, 1) = "Silvester"
    
       Feiertage = varDates
    End Function
    
    Private Function Easter(Year As Integer) As Date
       Dim D As Integer
       D = (((255 - 11 * (Year Mod 19)) - 21) Mod 30) + 21
       Easter = DateSerial(Year, 3, 1) + D + (D > 48) + 6 - ((Year + Year \ 4 + D + (D > 48) + 1) Mod 7)
    End Function
  4. Starte die Berechnung:

    • Du kannst die Funktion jetzt in deinen Excel-Zellen verwenden, um die Feiertage für ein beliebiges Jahr zu berechnen.

Häufige Fehler und Lösungen

  • Fehler: "Typ nicht definiert"

    • Überprüfe, ob du Option Explicit am Anfang deines Moduls hast. Dies stellt sicher, dass alle Variablen deklariert sind.
  • Fehler: Ungültige Datumsausgabe

    • Stelle sicher, dass das Jahr, das du eingibst, gültig ist und im richtigen Format eingegeben wird.

Alternative Methoden

Eine alternative Methode zur Berechnung der Feiertage besteht darin, die Excel-Funktion direkt zu verwenden, anstatt VBA zu nutzen. Du kannst beispielsweise die Feiertage in einer Excel-Tabelle manuell auflisten und dann mit Formeln die Beweglichkeit der Feiertage steuern.


Praktische Beispiele

Hier ist ein Beispiel, wie du die Funktion in Excel verwenden kannst:

  1. Gib in Zelle A1 ein Jahr ein (z.B. 2023).

  2. Gib in Zelle A2 die folgende Formel ein:

    =Feiertage(A1)
  3. Du kannst die Ergebnisse in den Zellen A2 bis B15 sehen, die die Feiertage für das eingegebene Jahr auflisten.


Tipps für Profis

  • UserForm nutzen: Du kannst eine UserForm erstellen, um das Jahr einzugeben und die Feiertage direkt anzuzeigen.
  • Datenvalidierung: Setze Datenvalidierung ein, um sicherzustellen, dass nur gültige Jahre eingegeben werden.

FAQ: Häufige Fragen

1. Wie kann ich die Feiertage für ein bestimmtes Jahr berechnen? Um die Feiertage für ein bestimmtes Jahr zu berechnen, benutze die Funktion Feiertage(Jahr) und gib das gewünschte Jahr als Parameter ein.

2. Welche Feiertage werden in der Funktion berücksichtigt? Die Funktion berücksichtigt Feiertage wie Neujahr, Christi Himmelfahrt, Ostermontag und viele andere.

3. Kann ich die Berechnung für verschiedene Jahre gleichzeitig durchführen? Ja, du kannst die Funktion in mehreren Zellen verwenden, indem du verschiedene Jahre in benachbarte Zellen eingibst und die Funktion anwendest.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige