Live-Forum - Die aktuellen Beiträge
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Schaltjahr in VBA

Forumthread: Schaltjahr in VBA

Schaltjahr in VBA
30.01.2004 08:14:13
Franz W.
Guten Morgen Fachleute,
ich versuche mich daran, per VBA rauszukriegen, ob ein Jahr ein Schaltjahr ist oder nicht, komme aber leider nicht weiter. Für Excel hab ich folgende Formel:
=WENN(UND(TAG(DATUM($A$1;2;TAG(Kalender!$L$30)+1))<>1;$A$1<>1900);"Schaltjahr";"")
- in A1 steht die Jahreszahl
- in Kalender!L30 steht der 28. Februar
Noch besser wäre es natürlich, das Schaltjahr ohne Bezug zu einer bestimmten Zelle ermitteln zu können. Ist das irgendwie möglich?
Vielen Dank im Voraus und Grüße
Franz
Anzeige

17
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Schaltjahr in VBA
30.01.2004 08:23:20
Worti
Hallo Franz,
die Formel ermittelt, ob das Jahr, welches in A1 steht, ein Schaltjahr ist:

=WENN(REST(A1;4)<>0;"kein Schaltjahr";WENN(UND(REST(A1;100)=0;REST(A1;400)<>0);"kein Schaltjahr";"Schaltjahr"))
Worti
AW: Schaltjahr in VBA
30.01.2004 08:37:37
Franz W.
Hallo Worti,
vielen Dank für Den Tipp. Deine Formel ist schon mal besser als meine, weil sie nicht in Abhängigkeit einer bestimmten Zelle arbeitet. Aber kannst Du mir bitte jetzt auch noch helfen, das in VBA zu übersetzen? Da bräuchte ich das nämlich... :-))

Schon mal herzlichen Dank und Grüße
Franz
Anzeige
AW: Schaltjahr in VBA
30.01.2004 08:41:23
Worti
Hallo Franz,
hier die VBA-Übersetzung:

Sub Schaltjahr()
Dim EinJahr As Variant
Dim NumJahr As Integer
EinJahr = InputBox("Bitte zu prüfendes Jahr vorgeben!")
If EinJahr = "" Then
Exit Sub
End If
If Not (IsNumeric(EinJahr)) Then
MsgBox "Eingabe nicht numerisch!"
Exit Sub
End If
NumJahr = CInt(EinJahr)
If Not (NumJahr Mod 4) = 0 Then
MsgBox ("kein Schaltjahr!")
Exit Sub
End If
If (NumJahr Mod 100) = 0 And Not ((NumJahr Mod 400) = 0) Then
MsgBox ("kein Schaltjahr!")
Else
MsgBox ("Schaltjahr!")
End If
End Sub

Worti
Anzeige
Spiiiiitze !!!
30.01.2004 08:49:44
Franz W.
Hallo Worti,
toll, Du hast mir sehr geholfen!! Ganz vielen Dank!!!
Beste Grüße
Franz
AW: Spiiiiitze !!!
30.01.2004 09:23:36
y
hi Franz,
vielleicht etwas kürzer ?

Function schaltjahr(jahr As Integer) As Boolean
schaltjahr = Day(DateSerial(jahr, 2, 29)) = 29
End Function

ich hoffe natürlich das excel intern richtig rechnet ;-)
cu Micha
Anzeige
Danke!! Lässt sich wohl alles noch toppen :-)) o.T
30.01.2004 11:51:40
Franz W.
AW: mathematisch korrekt geht's so ...
30.01.2004 21:33:52
Sigi

Function IstSchaltjahr(Jahr As Long) As Boolean
If (Jahr Mod 4 = 0 And Jahr Mod 100 <> 0) Or _
(Jahr Mod 400 = 0) Then IstSchaltjahr = True
End Function

Gruß
Sigi
für einen Lehrling...
30.01.2004 23:00:37
Franz W.
Hallo Sigi,
vielen Dank für Dein Einklinken, funktioniert super! Aber ein Frischling bittet um Nachhilfe und um eine kurze Erläuterung: was ist daran richtiger als an der Funktion von Micha???
Vielen Dank schon mal und Grüße
Franz
Anzeige
AW: für einen Lehrling...
31.01.2004 11:12:04
y
hi Franz,
Sigi berechnet tatsächlich ob das Jahr ein Schaltjahr ist
ich frage nur ab ob excel einen 29.2. in diesem Jahr kennt
wenn excel intern einen "falschen" 29.Februar kennt ist meine Formel falsch
Sigis funktion ist somit sicherer, weil ich tatsächlich nicht weiss ob excel da fehlerbehaftet ist
cu Micha
Anzeige
AW: für einen Lehrling...
31.01.2004 14:05:09
Franz W.
Hallo Micha,
ja, jetzt - nach deiner Erklärung :-)) - erkenne ich's auch.
Vielen Dank und Grüße
Franz
AW: für einen Lehrling...
31.01.2004 21:15:28
Sigi
Hallo Franz,
Excel rechnet in der Tat für das Jahr 1900 falsch. Denn Microsoft hat in Excel auch
den 29.02.1900 aufgenommen. 1900 war aber kein Schaltjahr!
In VBA gibt's den 29.02.1900 übrigens nicht.
Gruß
Sigi
Anzeige
AW: für einen Lehrling...
31.01.2004 22:13:03
Franz W.
Hallo Sigi,
toll, vielen Dank noch für Deine Antwort. Einen Teil hab ich ja schon kapiert mit der Erklärung von Micha: dass seine Funktion "nur" Excel abfragt, deine dagegen eigenständig rechnet und somit nicht Excels Fehler übernimmt. Und jetzt auch noch, wo der Fehler in Excel liegt.
Ganz vielen Dank und Grüße
Franz
Anzeige
AW: für einen Lehrling...
01.02.2004 11:06:06
Sigi
Hallo Franz,
die Sub von Micha prüft lediglich, ob es einen 29.02. des Jahres gibt. Für 1900 ergibt
sie ein Schaltjahr! Meine Funktion rechnet auch für 1900 richtig.
Seit der gregorianischen Kalenderreform (1582) sind diejenigen Jahre Schaltjahre die
folgendes erfüllen ...
1. jedes durch 4 teilbare Jahr (Jahr Mod 4 = 0: also 1904, 1908, 1912, etc. )
2. nicht jedoch Jahre, die durch 100 teilbar sind (nicht Jahr Mod 100 = 0: 1800, 1900)
3. aber doch Jahre die durch 400 teilbar sind (Jahr Mod 400 = 0: 1600, 2000, 2400, etc.)
Volle Jahrhunderte sind kein Schaltjahr, es sei denn sie sind durch 400 teilbar.
Deshalb war 1900 kein Schaltjahr, 2000 aber doch!
Microsoft hat in der 1. Excel-Version irrtümlich den 29.02.1900 integriert und in den
folgenden Versionen aus Kompatibilitätsgründen nie eliminiert!
Gruß
Sigi
Anzeige
AW: für einen Lehrling...
01.02.2004 11:30:19
y
hi Sigi,
natürlich ist deine erklärung richtig aber:
meine "sub" ist eine "function" und gibt auch bei 1900 falsch an was in diesem fall richtig ist ;-)
probier mal aus
cu Micha
AW: für einen Lehrling...
01.02.2004 11:44:47
y
mal ein hübsches beispiel:

Sub test()
Dim datumoberflaeche As Date
Dim datumvba As String
datumoberflaeche = DateSerial(1900, 3, 1) - 1 'falsches ergebnis
datumvba = Format(DateSerial(1900, 3, 1) - 1, "DD.MM.YYYY") 'richtiges ergebnis
Cells(1) = datumoberflaeche
Cells(2) = datumvba
End Sub

cu Micha
Anzeige
AW: für einen Lehrling...
01.02.2004 18:14:07
Sigi
Hallo Micha,
du hast Recht! Deine Funktion liefert das selbe Ergebnis. Es wird ja auch auf VBA-Seite
ermittelt. (Übrigens schönes Beispiel mit dem Datum in VBA und auf Exceloberfläche)
Gruß
Sigi
Und ich habe bei Eurer Diskussion...
02.02.2004 08:23:17
Franz W.
... noch bissl was lernen dürfen :-))...
vielen Dank Euch beiden und Grüße
Franz
Anzeige
;
Anzeige

Infobox / Tutorial

Schaltjahr in VBA erkennen und berechnen


Schritt-für-Schritt-Anleitung

Um in Excel zu überprüfen, ob ein Jahr ein Schaltjahr ist, kannst Du sowohl Formeln als auch VBA verwenden. Hier sind die Schritte für beide Methoden:

1. Schaltjahrberechnung mit einer Excel-Formel:

Verwende folgende Formel in einer Zelle, um zu überprüfen, ob das Jahr in Zelle A1 ein Schaltjahr ist:

=WENN(UND(REST(A1;4)=0;ODER(REST(A1;100)<>0;REST(A1;400)=0));"Schaltjahr";"kein Schaltjahr")

2. Schaltjahrberechnung in VBA:

Um ein Jahr in VBA zu prüfen, kannst Du den folgenden Code verwenden:

Sub Schaltjahr()
    Dim EinJahr As Variant
    Dim NumJahr As Integer
    EinJahr = InputBox("Bitte zu prüfendes Jahr vorgeben!")
    If EinJahr = "" Then Exit Sub
    If Not (IsNumeric(EinJahr)) Then
        MsgBox "Eingabe nicht numerisch!"
        Exit Sub
    End If
    NumJahr = CInt(EinJahr)
    If Not (NumJahr Mod 4) = 0 Then
        MsgBox ("kein Schaltjahr!")
        Exit Sub
    End If
    If (NumJahr Mod 100) = 0 And Not ((NumJahr Mod 400) = 0) Then
        MsgBox ("kein Schaltjahr!")
    Else
        MsgBox ("Schaltjahr!")
    End If
End Sub

Häufige Fehler und Lösungen

  • Fehler: "Eingabe nicht numerisch!"

    • Lösung: Stelle sicher, dass Du nur Zahlen eingibst, wenn Du das Jahr in der Eingabeaufforderung angibst.
  • Fehler: Das Ergebnis ist nicht wie erwartet.

    • Lösung: Überprüfe, ob das Jahr korrekt eingegeben wurde und ob die Logik in der Formel oder im VBA-Code richtig ist.
  • Fehler: Excel zeigt 29. Februar 1900 an, obwohl es kein Schaltjahr ist.

    • Lösung: Dies ist ein bekanntes Problem in Excel. Verwende die VBA-Funktion von Sigi, um dies zu umgehen.

Alternative Methoden

Neben den oben genannten Methoden gibt es auch kürzere Möglichkeiten, um ein Schaltjahr zu berechnen. Hier ist eine alternative VBA-Funktion:

Function schaltjahr(jahr As Integer) As Boolean
    schaltjahr = Day(DateSerial(jahr, 2, 29)) = 29
End Function

Diese Funktion gibt True zurück, wenn das Jahr ein Schaltjahr ist, und False, wenn nicht.


Praktische Beispiele

Hier sind einige Beispiele für die Nutzung der Schaltjahr-Berechnung in Excel und VBA:

  • Excel:

    • Wenn Du in Zelle A1 2020 eingibst, wird die Formel "Schaltjahr" zurückgeben.
    • Bei 1900 wird die Formel "kein Schaltjahr" zurückgeben.
  • VBA:

    • Wenn Du das Makro ausführst und 2000 eingibst, erscheint eine Nachricht mit "Schaltjahr!".
    • Bei Eingabe von 1900 erscheint die Nachricht "kein Schaltjahr!".

Tipps für Profis

  • Nutze die Funktion DateSerial, um sicherzustellen, dass Du immer die korrekten Datumswerte erhältst.
  • Berücksichtige die Besonderheiten von Excel in Bezug auf Schaltjahre, insbesondere die falsche Behandlung des Jahres 1900.
  • Verwende die InputBox, um eine benutzerfreundliche Eingabe zu ermöglichen.

FAQ: Häufige Fragen

1. Was ist ein Schaltjahr? Ein Schaltjahr ist ein Jahr, das einen zusätzlichen Tag im Februar hat, um den Kalender mit dem Sonnenjahr abzugleichen.

2. Wie kann ich in Excel ein Schaltjahr erkennen, ohne VBA zu verwenden? Du kannst eine Formel verwenden, die das Jahr und die Bedingungen für Schaltjahre überprüft, wie im Abschnitt zur Schritt-für-Schritt-Anleitung beschrieben.

3. Warum ist 1900 kein Schaltjahr? Das Jahr 1900 ist kein Schaltjahr, weil es durch 100 teilbar ist, aber nicht durch 400. Excel zeigt jedoch fälschlicherweise den 29. Februar 1900 an.

4. Gibt es eine Liste von Schaltjahren? Ja, Du kannst eine Liste der Schaltjahre von 1900 bis 2100 erstellen, indem Du die oben genannten Methoden in Excel anwendest.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige