Live-Forum - Die aktuellen Beiträge
Datum
Titel
29.03.2024 13:14:12
28.03.2024 21:12:36
28.03.2024 18:31:49
Anzeige
Archiv - Navigation
372to376
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
372to376
372to376
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

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

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
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
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
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
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
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
Anzeige
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

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige
Archiv - Verwandte Themen
Forumthread
Beiträge