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
1676to1680
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
Inhaltsverzeichnis

Kalenderwochen per VBA

Kalenderwochen per VBA
26.02.2019 11:05:39
Titus
Moin,
ich bin gerade dabei in Excel einen Einsatzplan zu programmieren.
Dabei generiert sich der Kalender immer vom 25.12. des Vorjahres bis zum 03.02.des nächsten Jahres. Beispiel: 25.12.2018-03.02.2020
Ich habe nun eine Zeile C2 in welche ich das Jahr eingebe und aus welcher automatisch die unterschiedlichen Daten eingetragen werden (in Zeile 5). Darunter stehen die Wochentage.
In Zeile 2 sollen nun die Kalenderwochen dargestellt werden. Per Makro habe ich es schon geschafft, das automatisch die Zellen wochenweise verbunden und eingerahmt werden. Jetzt muss nur noch im Bezug auf das Anfangsdatum der Woche die jeweilige Kalenderwoche errechnet und eingetragen werden. Wie mache ich das?
Was ich aktuell in VBA habe:
Sub Kalenderwoche()
Dim i As Integer
Dim a As Integer
i = 7
a = 0
Range(Range("C2"), Range("OV2")).Borders.LineStyle = x1None
Range(Range("G2"), Range("OV2")).MergeCells = False
Do Until Cells(6, i) = "Mo"
If Cells(6, i) = "So" Then
Range(Cells(2, i - a), Cells(2, i)).MergeCells = True
Range(Cells(2, i - a), Cells(2, i)).Select
Selection.Borders(xlDiagonalDown).LineStyle = xlNone
Selection.Borders(xlDiagonalUp).LineStyle = xlNone
With Selection.Borders(xlEdgeLeft)
.LineStyle = xlContinuous
.Weight = xlMedium
.ColorIndex = xlAutomatic
End With
With Selection.Borders(xlEdgeTop)
.LineStyle = xlContinuous
.Weight = xlMedium
.ColorIndex = xlAutomatic
End With
With Selection.Borders(xlEdgeBottom)
.LineStyle = xlContinuous
.Weight = xlMedium
.ColorIndex = xlAutomatic
End With
With Selection.Borders(xlEdgeRight)
.LineStyle = xlContinuous
.Weight = xlMedium
.ColorIndex = xlAutomatic
End With
Else: a = a + 1
End If
i = i + 1
Loop
Do Until Cells(6, i) = ""
If Cells(6, i) = "So" Then
Range(Cells(2, i - 6), Cells(2, i)).MergeCells = True
Range(Cells(2, i - 6), Cells(2, i)).Select
Selection.Borders(xlDiagonalDown).LineStyle = xlNone
Selection.Borders(xlDiagonalUp).LineStyle = xlNone
With Selection.Borders(xlEdgeLeft)
.LineStyle = xlContinuous
.Weight = xlMedium
.ColorIndex = xlAutomatic
End With
With Selection.Borders(xlEdgeTop)
.LineStyle = xlContinuous
.Weight = xlMedium
.ColorIndex = xlAutomatic
End With
With Selection.Borders(xlEdgeBottom)
.LineStyle = xlContinuous
.Weight = xlMedium
.ColorIndex = xlAutomatic
End With
With Selection.Borders(xlEdgeRight)
.LineStyle = xlContinuous
.Weight = xlMedium
.ColorIndex = xlAutomatic
End With
End If
i = i + 1
Loop
Range("G7").Select
End Sub

9
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Kalenderwochen per VBA
26.02.2019 11:08:27
Daniel
Hallo Titus,
das geht eigentlich prima ohne VBA, mit der Funktion KALENDERWOCHE.
Gruß
Daniel
AW: Kalenderwochen per VBA
26.02.2019 11:17:31
Titus
Das Problem ist, dass sich die verbundenen Zeilen für die Kalenderwochen beim Jahreswechsel jedes mal verschieben. Daher müsste man die Funktion Kalenderwoche irgendwie beim Wechsel per VBA einfügen. Wenn das Programm zum Beispiel einen Sonntag in Zeile 6 erkennt, verbindet es in Zeile zwei die 6 vorherigen und die aktuelle Zelle und umrandet diese. Nun müsste man doch irgendwie die Formel dort mit einfügen können, oder?
AW: Kalenderwochen per VBA
26.02.2019 11:19:50
Daniel
Natürlich, du kannst auch die Formel per VBA einfügen, dann aber in Englisch WEEKNUM
Anzeige
AW: Kalenderwochen per VBA
26.02.2019 11:27:50
Titus
Ich weiß leider überhaupt nicht wie ich die Formel per VBA einfüge. Kannst du mir das beispielhaft zeigen? Sagen wir wir durchsuchen Zeile 6 mit der Variable i. Sobald ein Sonntag in Zelle (6,i) gefunden wird soll in Zelle (2,i) die Formel Kalenderwoche mit Bezug auf die Zelle (6,i) eingefügt werden. Welchen Code muss ich dafür schreiben?
AW: Kalenderwochen per VBA
26.02.2019 11:33:05
Daniel
Netter Trick, den der andere Daniel hier gerne regelmäßig gibt:
Schreibe die Formel in eine Zelle. Dann gehst du ins Direktfenster im VBA Editor und Schreibst ?Range("Zelle mit Formel").Formula
Dann siehst du die Formel übersetzt in Englisch. Diese gibst du dann in "" in deinen Code ein, und zwar so:
Zielzelle.formula = "Formel aus dem Direktfenster (inklusive =)"
Einigermaßen verständlich?
Anzeige
AW: Kalenderwochen per VBA
26.02.2019 11:36:03
Klexy
Schreib die Formel-Funktion per VBA in die Zelle und ersertz sie dann durch den Wert:
Sub Makro1()
Range("B17").Select
ActiveCell.FormulaR1C1 = "=WEEKNUM(R[-11]C,21)"
Range("B17").Select
Selection.Copy
Selection.PasteSpecial Paste:=xlPasteValues
Application.CutCopyMode = False
End Sub

AW: Kalenderwochen per VBA
26.02.2019 11:41:55
Torsten
Bite die selktiererei und Selection weglassen. Ist Unsinn.
Sub Makro1()
With Range("B17")
.FormulaR1C1 = "=WEEKNUM(R[-11]C,21)"
.Copy
.PasteSpecial Paste:=xlPasteValues
Application.CutCopyMode = False
End With
End Sub
Gruss Torsten
Anzeige
AW: Kalenderwochen per VBA
26.02.2019 12:18:54
Titus
Okay danke an alle, die geholfen haben. Es hat jetzt alles geklappt :)
Aber Achtung!
26.02.2019 11:32:43
Klexy
Die Kalenderwoche wird auf Amerikanisch anders berechnet als auf Deutsch.
Auf Amerikamisch ist die Woche mit dem 1. Januar die Kalenderwoche 1
Auf Deutsch ist die Woche mit dem ersten Donnerstag im Jahr die Kalenderwoche 1
Ob die VBA-Funktion WEEKNUM dem Rechnung trägt, weiß ich nicht.
Bei der Kalenderwoche-Funktion musst du die 21 als Zahl-Typ nehmen: =KALENDERWOCHE(B5;21)
Oder du nimmst die Funktion =ISOKALENDERWOCHE(B5)

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige