Live-Forum - Die aktuellen Beiträge
Datum
Titel
17.10.2025 10:28:49
16.10.2025 17:40:39
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Wochenenden markieren per VBA

Forumthread: Wochenenden markieren per VBA

Wochenenden markieren per VBA
07.03.2020 20:03:06
Matthias
Hallo,
ich habe eine Tabelle erstellt, in denen Mitarbeiter ihre Arbeitsstunden tagesgenau eintragen können und diese best. Kostenträgern zuordnen. Die Tabelle ist sehr groß, und zur besseren Übersicht werden immer nur die relevanten Spalten eingeblendet. Die Tage in Zeile 1, die an einem Wochenende sind (Sa + So), sollen mit einer grauen Muster-Füllung versehen werden. Wenn ich dies mittels bedingter Formatierung löse, leidet darunter stark die Performance der Tabelle und wird zu langsam. Abhilfe würde folgendes schaffen:
- Wenn in Zelle E31 eine Eingabe erfolgt, wird automatisch ein Makro ausgelöst.
- Das Makro markiert alle Spalten, bei denen in Zeile 1 der Tag an einem Wochenende ist. Leere Zellen oder Zellen die kein Datum enthalten, sollen nicht markiert werden.
- Die Markierung soll in senkrechter Richtung möglichst nur bis zur letzten benutzten Zelle erfolgen (hier: Zeile 29), wobei sich diese Zeile ändern kann, wenn neue Kostenträger (d.h. Zeilen) eingefügt werden.
Ich habe bereits mit einem Makro (siehe in Modul1) angefangen, komme nun aber nicht weiter. Hier die vereinfachte Tabelle: https://www.herber.de/bbs/user/135687.xlsm
Vielen Dank und Gruß,
Matthias
Anzeige

21
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Wochenenden markieren per VBA
07.03.2020 20:17:55
onur
"Wenn ich dies mittels bedingter Formatierung löse, leidet darunter stark die Performance der Tabelle und wird zu langsam" - Wohl kaum, es sei denn, das liegt an deiner Formel für die bedForm.
Ich würde es dir zwar beweisen, aber das geht nicht mit dieser Minimal-Version deiner Datei.
AW: Wochenenden markieren per VBA
07.03.2020 20:24:54
Matthias
Wir haben es in der Firma hin- und hergetestet (unter Excel 2016, leider nur 32bit). Es ist eine Tabelle mit mehr als 4000 Spalten. Wenn wir die bed. Formatierung entfernen, wird die Tabelle deutlich schneller, vor allem beim Umschalten benutzerdefinierter Ansichten. Deswegen die Idee, dass man die Formatierung nur ein Mal jährlich per VBA berechnen lässt.
Anzeige
AW: Wochenenden markieren per VBA
07.03.2020 20:26:47
onur
Und WELCHE Formel habt ihr getestet?
AW: Wochenenden markieren per VBA
07.03.2020 20:34:46
Matthias
Sorry :-) die Formel für bed. Formatierung in Zeile 1 in z.B. Spalte M ist:
=WOCHENTAG(M$1;2)>5
AW: Wochenenden markieren per VBA
07.03.2020 20:41:14
onur
Und wieviele davon habt ihr gleichzeitig?
Anzeige
AW: Wochenenden markieren per VBA
07.03.2020 20:50:13
onur
Ich weiss ja nicht, was DU da genau gemacht hast, aber in MEINER Beispielsdatei geht die bedForm von Spalte 4 bis 4.500 und Zeile 1 bis 10.000 und sehe da NULL Performanceprobleme (wie denn auch, die BedForm wird ja nur neu berechnet, wenn Zeile 1 sich ändert).
https://www.herber.de/bbs/user/135690.xlsm
Anzeige
AW: Wochenenden markieren per VBA
07.03.2020 20:52:56
onur
Hast du etwa für jede Spalte oder Zeile eine eigene bedForm eingesetzt?
AW: Wochenenden markieren per VBA
07.03.2020 22:16:27
onur
Ignoriere ruhig meine Fragen bzw. Antworten.
AW: Wochenenden markieren per VBA
08.03.2020 10:36:59
Matthias
Die bed. Formatierung hat natürlich nicht für jede Zelle eine eigene Regel, aber für mehrere Spaltenbereich, die nicht miteinander verbunden sind, gibt es jeweils eigene Regeln.
Die Performanceprobleme treten bei mir auf, wenn
- Benutzerdefinierte Ansichten umgeschaltet werden
- Zeilen eingefügt oder entfernt werden (v.a. beim rückgängig machen)
Eindeutig ist es so, dass die Performanceprobleme verschwinden, wenn ich die bed. Formatierungen entferne.
Anzeige
AW: Wochenenden markieren per VBA
07.03.2020 20:45:03
Oberschlumpf
Hi Matthias,
hier ein VBA-Versuch ;-)
https://www.herber.de/bbs/user/135689.xlsm
Du hattest zwar nur von Zeile 1 geschrieben, da ich das aber zu spät gelesen hatte :-), hab ich immer alle Sa/So-Zeilen wie gewünscht, eingefärbt.
Wenns doch nur bei Zeile 1 bleiben soll, lass es mich wissen.
Hilfts denn?
Ciao
Thorsten
Anzeige
AW: Wochenenden markieren per VBA
07.03.2020 22:11:58
Matthias
Hi Thorsten,
danke, das sieht schon gut aus :-) Fehlen nur noch 2 Kleinigkeiten:
- Die graue Markierung sollte auch in Zeile 1 und 2 erfolgen.
- Das Makro sollte ausgeführt werden, sobald eine Eingabe in Zelle E31 erfolgt.
Gruß Matthias
AW: Wochenenden markieren per VBA
07.03.2020 23:45:49
Oberschlumpf
Hi Matthias,
- die Einfärbungen von Sa/So werden doch durchgeführt nach Änderung in E31
Wenn ich die Datei starte, die Makros aktiviere und in E31 den Eintrag ändere, werden die Sa/So-Spalten anders gefärbt.
- füge unterhalb der Codezeile
Dim lloCol As Long

diese Codezeile ein
Range(Cells(1, 4), Cells(2, Cells(1, Columns.Count).End(xlToLeft).Column)).Interior.ColorIndex = xlNone
ändere diese Codezeile
With Range(Cells(3, lloCol), Cells(Cells(Rows.Count, 5).End(xlUp).Row - 2, lloCol)).Interior

um in
With Range(Cells(1, lloCol), Cells(Cells(Rows.Count, 5).End(xlUp).Row - 2, lloCol)).Interior
Jetzt werden auch die Zeilen 1+2 mit eingefärbt.
Hilfts?
Ciao
Thorsten
Anzeige
AW: Wochenenden markieren per VBA
08.03.2020 11:10:53
Oberschlumpf
ne Antwort wär auch hier noch ne gute Idee...
AW: Wochenenden markieren per VBA
08.03.2020 11:15:54
Matthias
Hi Thorsten,
ja klar, ich probiere nur gerade selbst noch rum. Mit deinen Hinweisen hab ich es in der Testdatei hinbekommen: https://www.herber.de/bbs/user/135692.xlsm (der Eingabezelle für das Startdatum habe ich noch einen Namen gegeben).
Nur funktioniert es noch nicht in meiner Originaldatei ("Laufzeitfehler 13: Typen unverträglich"). Ich werde diese mal etwas bereinigen und hochladen.
Gruß Matthias
Anzeige
AW: Wochenenden markieren per VBA
08.03.2020 11:55:20
Matthias
Hier ist die bereinigte Liste: https://www.herber.de/bbs/user/135693.xls
Leider gibt es bei mir den "Laufzeitfehler 13", wenn ich das Makro "Wochenenden_grau" ausführe. Wie kann das sein, dass dasselbe Makro in dieser Datei nicht läuft?
VG Matthias
Anzeige
AW: Wochenenden markieren per VBA
08.03.2020 12:13:13
Oberschlumpf
Hi Matthias,
man man man :-/
WO ist denn mein Makro?
und WO ist mein Code, der das Bearbeiten von Zelle E31 überwacht?
Apropos E31:
In deiner neuen Tabelle steht das Datum nun in D90.
Hast du denn meinen Code bzgl E31 auf D90 korrigiert?
da ich nun keine Lust habe, auf deine Datei MIT MEINEM Code zu warten, werde ich ihn selbst wieder einfügen.
Aber trotzdem:
Es ist kein Problem, dass ihr vieles noch nicht wisst und entsprechend Fragen stellt.
(genau SO habe auch ich mal angefangen)
Aber nicht ok ist, dass ihr eine qualifizierte Antwort erwartet, wenn eure (Nach)Fragen nicht qualifiziert sind!
Ich bastel jetzt an deiner neuen Datei, würde mich aber schon freuen, wenn du meine hier gestellten Fragen beantworten würdest.
Hinweis: Eine Frage endet immer mit einem Fragezeichen (?).
Und ich wünsche mir bitte eine Antwort zu all meinen Fragen. Denn auch das stellte ich schon oft fest. Ich hatte in anderen Threads noch z Bsp 3 oder 4 Fragen, bekam aber nur 1 oder 2 Antworten.
Auch hier ist es nicht qualifiziert genug, wenn nicht alle Fragen beantwortet werden, da dann noch mal nachgefragt werden muss.
So, danke.
Mag sein, dass du jetzt genervt bist - das war ich auch, nachdem ich deine nachgelieferte Datei öffnete und sah, was alles fehlte.
Ciao
Thorsten
Anzeige
vergiss meinen letzten Beitrag
08.03.2020 12:46:12
Oberschlumpf
Hi Matthias,
ich bin ganz raus.
Während ich bis eben dabei war, meinen Code an deine neue Bsp-Datei anzupassen, stellte ich auf einmal fest (hatte ich vorher nicht gesehen), dass deine 1. Bsp-Datei (bisher) mindestens einen gravierenden Unterschied zu deiner 2. Bsp-Datei hat.
Die - unterschiedlich - eingefärbten Zeilen in Bsp-Datei2 gibt es - nicht - in Bsp-Datei1!
Ich vermute, die unterschiedlichen Farben sollen unterschiedliche Bereiche visuell voneinander trennen.
Das ist auch ok so.
Leider nicht ok ist, dass diese unterschiedl. farbigen Zeilen nicht in Bsp-Datei1 enthalten sind.
(und auch sonst ist vieles aus Bsp-Datei2 nicht in Bsp-Datei1 enthalten)
Mein bisheriges Makro bezieht sich auf deine Bsp-Datei1.
Und natürlich muss ich voraussetzen, dass zumindest der Aufbau, das Design, usw in Bsp-Datei1 ganz genau so ist, wie in deiner Originaldatei. Ich denke mal, deine Bsp-Datei2 entspricht vom Aufbau, etc deinem Original eher, oder?
Na ja, wie dem auch sei, mein Code kann in deiner Originaldatei nur funktionieren, wenn denn deine Bsp-Datei1 genau so ausgesehen hätte, wie dein Original.
Bsp-Datei1 sieht nicht aus wie Original, ergo kann mein Code im Original auch nur mit viel Glück funktioneren.
Du kannst, wenn du magst, gerne auf diesen, meinen letzten Beitrag antworten.
Ich bin aber raus.
Daher empfehle ich dir, einen ganz neuen Beitrag hier im Forum zu erstellen.
nett gemeinter Tipp: zeige wieder eine Bsp-Datei; die sollte aber wirklich vom Aufbau dem Original entsprechen.
Ciao + weiter viel Erfolg
Thorsten
Anzeige
AW: vergiss meinen letzten Beitrag
08.03.2020 13:42:15
Matthias
Hi Thorsten,
ich verstehe dass du dich über sowas ärgerst. Ich hätte nur ein bisschen Nachsicht begrüßt, wenn User wie ich, die nur selten mit VBA zu tun haben, einen Fehler machen. Ich musste gerade beim Hochladen feststellen, dass meine Liste mit 1,35MB zu groß für das Forum ist. Bereinigen der xlsm-Datei (alle Zeilen unten und Spalten rechts löschen) sowie Kopieren des Blatts in eine neue Datei hat leider auch nicht viel gebracht. Danach habe ich einfach mal die Datei als .xls gespeichert und war dann (vermutlich wegen der Beschränkung auf 256 Spalten) unter 300 kB. Datei wurde aber von Excel der Code entfernt, das hab ich am Schluss übersehen - sorry :-(
Der andere Punkt ist mir nicht ganz klar, weil das Muster .Pattern = xlGray16 nur "über die Zellen gelegt wird" unabhängig von der Füllung, die vorher darin war. Von daher dachte ich, die Farbe der Füllung sei unerheblich.
Der Eingabezelle für das Startdatum hatte ich einen Namen "Eingabe_GJ" gegeben (hatte ich oben geschrieben), damit es unabhäng von der Zelle (E31 oder D90) wird. Wenn in dem farbigen Bereich Zeilen eingefügt werden, soll der Bezug zur Eingabezelle nicht verloren gehen.
Viele Grüße,
Matthias
Anzeige
AW: vergiss meinen letzten Beitrag
08.03.2020 14:21:40
Oberschlumpf
Hi Matthias,
...wenn User wie ich, die nur selten mit VBA zu tun haben, einen Fehler machen.
Ja, allein auf dich bezogen, hast du bestimmt Recht.
Aber die Antworter haben immer wieder mit solchen, leider nicht immer hilfreichen Reaktionen der Fragenden "zu kämpfen".
Mein Frust ist also eher damit begründet, dass nicht nur du nicht immer hilfreiche Antworten, Infos, Bsp-Dateien lieferst.
Da ich aber auch nur ein Mensch bin, hab ich meinen Ärger diesmal leider bei dir "abgeladen" - dafür möchte ich mich entschuldigen (auch, wenn damit deine Bsp-Dateien nicht besser werden ;-) )
dass meine Liste mit 1,35MB zu groß für das Forum ist
Jep, das ist wahr. Hans W. Herber begrenzt jede von ihm zugelassene Datei auf max 300kb.
(alle Zeilen unten ... löschen)
Keine gute Idee, da ja ab jetzt (löschen der unteren Zeilen) dein Bsp nicht mehr dem Original-Aufbau entspricht ;-)
(vermutlich wegen der Beschränkung auf 256 Spalten) unter 300 kB
Ja, damit könntest du richtig liegen.
anderer Tipp: speicher mal deine große XLSM-Datei mit z Bsp 7Zip als ZIP-Datei.
7Zip (Komprimiertool) "presst" oft aus Excel-Dateien "so viel Luft raus" :-), dass die danach erstellte ZIP-Datei auch schon kleiner/gleich 300kb sein kann.
Wenn das mit der XLSM-Datei nicht funktioniert (zip noch immer größer 300kb), dann speicher deine Bsp-Datei, wie schon versucht, als XLS-Datei, versuch aber eben so viel wie möglich an Datenzeilen in der XLS-Datei zu belassen.
Die XLS-Datei könnte immer noch größer 300kb sein. Aber erstell jetzt mal mit 7ZIP aus der XLS-Datei eine ZIP-Datei.
Dabei wurde aber von Excel der Code entfernt, das hab ich am Schluss übersehen
Jep, hab ich gemerkt :-) Hier gilt eben: Sorgfalt walten lassen :-)
Ja, du bist auch nur ein Mensch, och weiß ;-)
Und trotzdem:
Die Fragenden freuen und wünschen sich Lösungen, die sie im Umgang/Lernen mit Excel weiterbringen.
Geht mir genau so, ich weiß auch längst nicht alles! ;-)
Die Antworter können aber eben nur die gewünschten Lösungen liefern, wenn die erstellten Lösungen zum Original passen. Und das ist nur möglich, wenn die dafür erforderlichen Informationen geliefert werden.
So, fertig - und danke für's Mitlesen :-)
All das ist nicht mehr als Frustablassen bei dir gemeint, sondern nur ein Versuch, dir mal die Sicht eines Antworters zu erklären ;-)
weiter viel Erfolg!
Ciao
Thorsten
Anzeige
AW: Wochenenden markieren per VBA
08.03.2020 12:26:18
Daniel
Hi
Prüf mal, ob sich durch die Bearbeitung der Liste (Zeilen/Spalten löschen, einfügen) die Anzahl der Bedingten Formate vervielfacht hat.
Excel macht das nämlich, wenn du beispielsweise eine Zeile einfügst, können drei bedingte Formate entstehen, eines gilt bis zur neuen Zeile, eines ab der neuen Zeile und das dritte für die neue Zeile.
Wenn das der Fall ist, musst du diese Vielfalt löschen und nur eine Bedingte Formatierung für den gesamten Bereich behalten.
Gruß Daniel
Anzeige
AW: Wochenenden markieren per VBA
08.03.2020 13:16:47
Matthias
Hi Daniel,
danke für den Tipp, das könnte auch ein Ansatz sein! Ich habe es so gemacht, dass ich zuerst den Oktober angelegt habe und danach alle weiteren 11 Monate rechts daneben kopiert habe. Dadurch haben sich die bed. Formatierungen vervielfacht. Mir war nur nicht bewusst, dass darunter die Performance leidet (1 große Regel statt vieler kleiner Regeln). Werde das mal ausprobieren.
Gruß Matthias
Anzeige
;
Anzeige
Anzeige

Infobox / Tutorial

Wochenenden in Excel per VBA markieren


Schritt-für-Schritt-Anleitung

Um Wochenenden in Deiner Excel-Tabelle zu markieren, kannst Du ein einfaches VBA-Makro verwenden. Hier sind die Schritte:

  1. Öffne Excel und das Visual Basic for Applications (VBA) 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 (DeineDatei)“, wähle „Einfügen“ und dann „Modul“.
  3. Kopiere folgenden VBA-Code in das Modul:

    Sub WochenendenMarkieren()
       Dim lloCol As Long
       Dim i As Long
       Dim letzteZeile As Long
    
       ' Letzte benutzte Spalte ermitteln
       lloCol = Cells(1, Columns.Count).End(xlToLeft).Column
       ' Letzte benutzte Zeile ermitteln
       letzteZeile = Cells(Rows.Count, 1).End(xlUp).Row
    
       ' Alle Zellen in Zeile 1 durchgehen
       For i = 1 To lloCol
           If Weekday(Cells(1, i).Value, vbMonday) >= 6 Then
               Range(Cells(1, i), Cells(letzteZeile, i)).Interior.Color = RGB(169, 169, 169) ' Grau
           End If
       Next i
    End Sub
  4. Füge den Code zur Überwachung von Zelle E31 hinzu:

    • Gehe zu „ThisWorkbook“ im VBA-Editor und füge diesen Code ein:
    Private Sub Worksheet_Change(ByVal Target As Range)
       If Not Intersect(Target, Me.Range("E31")) Is Nothing Then
           WochenendenMarkieren
       End If
    End Sub
  5. Teste das Makro:

    • Ändere den Wert in Zelle E31, um das Makro auszulösen und die Wochenenden in Deiner Excel-Tabelle zu markieren.

Häufige Fehler und Lösungen

  • Laufzeitfehler 13: Typen unverträglich

    • Überprüfe, ob die Zellen in Zeile 1 tatsächlich Datumswerte enthalten. Falls nicht, kann der Fehler auftreten. Stelle sicher, dass die Zellen korrekt formatiert sind.
  • Die Wochenenden werden nicht markiert

    • Vergewissere Dich, dass die Zellen in Zeile 1 korrekt in das Datumsformat konvertiert sind und dass das Makro korrekt ausgeführt wird.
  • Langsame Performance

    • Wenn Du viele bedingte Formatierungen hast, kann dies die Performance beeinträchtigen. Nutze stattdessen das VBA-Makro zur einmaligen Markierung der Wochenenden.

Alternative Methoden

Falls Du kein VBA verwenden möchtest, gibt es auch die Möglichkeit, die Wochenenden mit bedingter Formatierung zu markieren:

  1. Markiere die zu formatierenden Zellen in Zeile 1.

  2. Gehe zu „Start“ > „Bedingte Formatierung“ > „Neue Regel“.

  3. Wähle „Formel zur Ermittlung der zu formatierenden Zellen verwenden“ und gib folgende Formel ein:

    =WOCHENTAG(A1;2)>5
  4. Wähle eine Füllfarbe aus und klicke auf „OK“.

Diese Methode ist jedoch weniger performant bei großen Datenmengen.


Praktische Beispiele

Hier sind einige Beispiele, wie Du das VBA-Makro in unterschiedlichen Excel-Versionen nutzen kannst:

  • Excel 2016 oder neuer: Das oben beschriebene Makro funktioniert hier einwandfrei und kann für Tabellen mit mehr als 4000 Spalten verwendet werden.
  • Komplexe Tabellen: In großen Excel-Daten, wo Du nur Wochenenden anzeigen möchtest, kann es sinnvoll sein, das Makro nur auf relevante Bereiche anzuwenden.

Tipps für Profis

  • Verwende die Application.ScreenUpdating-Einstellung, um die Bildschirmaktualisierung während der Ausführung des Makros zu deaktivieren. Das kann die Performance steigern:

    Application.ScreenUpdating = False
    ' Dein Code hier
    Application.ScreenUpdating = True
  • Dokumentiere Deinen VBA-Code, um ihn später leichter nachvollziehen zu können.


FAQ: Häufige Fragen

1. Wie kann ich das Makro automatisch beim Öffnen der Datei ausführen? Du kannst das Makro im Workbook_Open-Ereignis einfügen, um es beim Öffnen der Datei automatisch auszuführen.

2. Funktioniert das Makro auch in älteren Excel-Versionen? Ja, das Makro sollte auch in Excel 2013 und 2010 funktionieren, solange VBA unterstützt wird.

3. Wie kann ich die Markierung zurücksetzen? Füge eine weitere Sub-Prozedur hinzu, die die Füllfarbe aller Zellen zurücksetzt:

Sub ResetMarkierung()
    Cells.Interior.ColorIndex = xlNone
End Sub

Mit diesem Leitfaden kannst Du effizient und einfach Wochenenden in Deiner Excel-Tabelle markieren.

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