Bitte um VBA Hilfe
Aus einer Jahreszahl sollten jeweils alle Donnerstage mit Datum aus diesem Jahr in eine Tabelle eingetragen werden!
siehe Testmappe
Vielen Dank für Eure Hilfe
Gruß Gerhard
https://www.herber.de/bbs/user/135835.xlsm
| A | B | C | D | E | F | |
| 1 | 2020 | Januar | Bemerkung | Februar | Bemerkung | März |
| 2 | ||||||
| 3 | Do 02.01.2020 | Do 06.02.2020 | Do 05.03.2020 | |||
| 4 | Do 09.01.2020 | Do 13.02.2020 | Do 12.03.2020 | |||
| 5 | Do 16.01.2020 | Do 20.02.2020 | Do 19.03.2020 | |||
| 6 | Do 23.01.2020 | Do 27.02.2020 | Do 26.03.2020 | |||
| 7 | Do 30.01.2020 | |||||
| 8 |
| verwendete Formeln | |||
| Zelle | Formel | Bereich | R1C1 für Add In |
| B3,D3,F3 | =DATWERT("1."&B1 &$A$1)+5-REST(DATWERT("1."&B1 &$A$1);7) | =DATEVALUE("1."&R[-2]C &R1C1)+5-MOD(DATEVALUE("1."&R[-2]C &R1C1),7) | |
| B4:B7,D4: D7,F4:F7 | =WENN(MONAT(B3)=MONAT(B3+7);B3+7;"") | =IF(MONTH(R[-1]C)=MONTH(R[-1]C+7),R[-1]C+7,"") | |
Option Explicit
Sub Donnerstage()
Dim Sp As Integer, MA As Date, TTag As Date, Z1 As Integer, Zeile As Integer
Dim WT As Integer, Jahr As Integer
WT = 4 'Donnerstag
Jahr = Cells(1, 1)
Z1 = 3 'erste Zeile
'Reset
Rows(Z1).Resize(5).Clear
For Sp = 2 To 24 Step 2
Zeile = Z1 'Zeile, in die geschrieben wird
MA = DateSerial(Jahr, Sp / 2, 1) 'Monatsanfang
If Weekday(MA, vbMonday) <= WT Then
TTag = WT - Weekday(MA, vbMonday) + MA
Else
TTag = 7 - Weekday(MA, vbMonday) + WT + MA
End If
Do Until TTag > DateSerial(Jahr, Month(MA) + 1, 0)
With Cells(Zeile, Sp)
.Value = TTag
.NumberFormat = "DDD DD.MM"
End With
TTag = TTag + 7
Zeile = Zeile + 1
Loop
Next
End Sub
Um alle Donnerstage eines bestimmten Jahres in Excel aufzulisten, kannst Du das folgende VBA-Skript verwenden. Stelle sicher, dass Du die Makros in Excel aktiviert hast.
ALT + F11, um den VBA-Editor zu starten.Einfügen > Modul, um ein neues Modul zu erstellen.Option Explicit
Sub Donnerstage()
Dim Sp As Integer, MA As Date, TTag As Date, Z1 As Integer, Zeile As Integer
Dim WT As Integer, Jahr As Integer
WT = 4 ' Donnerstag
Jahr = Cells(1, 1)
Z1 = 3 ' erste Zeile
' Reset
Rows(Z1).Resize(5).Clear
For Sp = 2 To 24 Step 2
Zeile = Z1 ' Zeile, in die geschrieben wird
MA = DateSerial(Jahr, Sp / 2, 1) ' Monatsanfang
If Weekday(MA, vbMonday) <= WT Then
TTag = WT - Weekday(MA, vbMonday) + MA
Else
TTag = 7 - Weekday(MA, vbMonday) + WT + MA
End If
Do Until TTag > DateSerial(Jahr, Month(MA) + 1, 0)
With Cells(Zeile, Sp)
.Value = TTag
.NumberFormat = "DDD DD.MM"
End With
TTag = TTag + 7
Zeile = Zeile + 1
Loop
Next
End Sub
Donnerstage aus, um die Daten in die Tabelle einzutragen.Fehler: Makro läuft nicht.
Lösung: Überprüfe, ob die Makros in den Excel-Optionen aktiviert sind. Gehe zu Datei > Optionen > Trust Center > Einstellungen für das Trust Center > Makroeinstellungen.
Fehler: Falsches Jahr wird angezeigt.
Lösung: Stelle sicher, dass Du das Jahr korrekt in Zelle A1 eingegeben hast.
Falls Du keine VBA-Lösungen verwenden möchtest, kannst Du auch die folgende Formel nutzen, um alle Donnerstage in einer Spalte zu erzeugen:
=B1 + 7
Angenommen, Du möchtest alle Donnerstage im Jahr 2023 auflisten. Gib einfach 2023 in Zelle A1 ein und führe das Makro Donnerstage aus. In der Tabelle erscheinen dann alle Donnerstagsdaten des Jahres.
WENN-Funktion in Kombination mit WOCHENTAG, um weitere Wochentage wie Freitage oder Samstage zu berechnen. Dies könnte hilfreich sein, wenn Du die Methode für Excel alle Freitage des Jahres anpassen möchtest.1. Kann ich die Liste der Donnerstage für ein anderes Jahr erstellen?
Ja, ändere einfach das Jahr in Zelle A1 und führe das Makro erneut aus.
2. Welche Excel-Version benötige ich für das VBA-Skript?
Das Skript funktioniert in Excel 2007 und späteren Versionen. Stelle sicher, dass Du die Makros aktiviert hast.