Microsoft Excel

Herbers Excel/VBA-Archiv

Alle Zellen mit bestimmtem Datum markieren


Betrifft: Alle Zellen mit bestimmtem Datum markieren von: Tobias
Geschrieben am: 02.10.2019 14:41:26

Version: Excel 2016

Hallo,

ich suche innerhalb eines Makros eine Möglichkeit zur automatisierten Umsetzung der folgenden, immer wiederkehrenden Anwendung:

- manuelle Eingabe eines (variablen) Stichtages (Datum) in einer dafür vorgesehenen Zelle (A1) auf Tabellenblatt "Blatt 1"
- auf einem anderen Tabellenblatt "Blatt 2" befindet sich bereits eine Tabelle mit 8 Spalten, eine davon (F) ist eine Datumsspalte
- die Datumsspalte ist bereits anhand der Filter/Kopfzeile absteigend nach Datum sortiert
- es sollen innerhalb der Spalte F alle Zellen mit dem Datum aus Blatt 1, Zelle A1 gefunden und markiert werden

Das ist meine gesuchte "Grundfunktion", die gesamte "Kür" ginge noch weiter:

- es sollen zusätzlich auch alle Zellen mit jüngerem Datum (also alle – abgesehen von der Titelzeile – oberhalb der Auswahl mit dem Stichtag befindlichen Zellen) markiert werden
- diese Markierung soll auf alle Zellen links davon (also bis Spalte A) erweitert werden
- Ändern der Schriftfarbe auf Rot der markierten Zellen

→ im Ergebnis ist dann in allen Zeilen, bei denen in der Spalte F das eingegebene Datum oder ein späteres Datum steht, die Schriftfarbe in den Zellen A bis F rot eingefärbt

Hoffnungsfroh,
Tobias

  

Betrifft: AW: Alle Zellen mit bestimmtem Datum markieren von: Daniel
Geschrieben am: 02.10.2019 14:43:46

hi
warum nutzt du dafür nicht einfach die Bedingte Formatierung?
die ist genau für sowas da.
Gruß Daniel


  

Betrifft: AW: Alle Zellen mit bestimmtem Datum markieren von: Tobias
Geschrieben am: 02.10.2019 14:56:45

Hallo,

es handelt sich um eine Exceldatei, in die "jeder" eine unformatierte Tabelle aus einer anderen Anwendung (also als Excel-Export) hineinkopiert (im Beispiel ins Blatt 2). Mithilfe des Makros wird diese Tabelle dann nach den immer gleichen Kriterien aufbereitet, die Farbgebung und Datumssortierung ist nur ein Teil davon. Aktuell funktioniert es mit zwei Makros, der manuelle Zwischenschritt ist die Einfärbung. Es wäre schön, wenn diese ebenfalls und dann in nur einem Makro unterzubringen wäre ...

Alternativ könnte die bedingte Formatierung vermutlich tatsächlich in der Spalte F auf auf die Tabelle aus der Zwischenablage "warten" und dann gar nicht mehr Bestandteil des Makros bzw. der weiteren Aufbereitung sein. Allerdings ist mir auch da der Formatierungsbefehl nicht klar mit dem Bezug aus dem Wert aus einer Zelle auf einem anderen Blatt ...

Danke,
Tobias


  

Betrifft: AW: Alle Zellen mit bestimmtem Datum markieren von: Daniel
Geschrieben am: 02.10.2019 15:12:07

Hi
hängt von der Excelversion ab.
ab Excel 2010 kann man in der Bedingten Formatierung auch Zellbezüge auf andere Tabellenblätter direkt angeben.
in älteren Versionen muss man dann diese Zelle als Namen erstellen und diesen Namen in der Regelformel der bedingten Formatierung verwenden.
du siehst, deine Entscheidung bei der Version "ohne Relevanz" anzugeben war nicht besonders clever.
du solltest wissen, auf welcher Excelversions das ganze laufen muss (bei mehreren immer die älteste angeben)

Gruß Daniel


  

Betrifft: AW: Alle Zellen mit bestimmtem Datum markieren von: Tobias
Geschrieben am: 02.10.2019 15:28:09

... meine Entscheidung, bei der Version "ohne Relevanz" anzugeben beruht auf dem Fehlen der von mir verwendeten Version (Excel 2016) in der Auswahlliste. Mir schien es daher sinnvoller in meinem Post die Version in die erste Zeile über mein Anliegen zu schreiben, bevor ich eine ältere Version auswähle ...


  

Betrifft: AW: Alle Zellen mit bestimmtem Datum markieren von: Daniel
Geschrieben am: 02.10.2019 15:08:54

Hi
als Makro so:

dim Z as Long
z = Application.Match(Sheets("Blatt 1").Range("A1").Value - .5, Sheets("Blatt 2").Range("F:F"),  _
-1)
Sheets("Blatt 2").Range("A2:F" & Z).Font.Color = vbRed
das Makro muss nach der Eingabe des Datums in A1 ausgeführt werden.
Gruß Daniel


  

Betrifft: AW: Alle Zellen mit bestimmtem Datum markieren von: Tobias
Geschrieben am: 02.10.2019 15:24:45

Hallo,

erstmal Danke! Ich habe nun eine Testdatei nur für diesen Befehl angelegt, um Fehlerquellen durch das bestehende Makrop auszuschließen. Da ich die Logik des Befehls nicht verstehe, kann ich nur die Auswirkung beschreiben: Egal, wie die Tabelle sortiert ist und anscheined auch völlig unabhängig von der Eingabe in Zelle A1 auf Blatt 1 → es wird durch das Makro lediglich die Schrift in den ersten 6 Zellen der Überschrifts-Titelzeile sowie in den ersten 6 Zellen der ersten inhaltlichen Zeile (also Zeile 2) rot gefärbt ...

Grüße,
Tobias


  

Betrifft: AW: Alle Zellen mit bestimmtem Datum markieren von: Daniel
Geschrieben am: 02.10.2019 15:36:14

hi
solange du mir nicht zeigst, was du machst und wie deine Datei aussieht, kann ich dir auch nicht sagen was du falsch machst.
die Logik ist eigentlich recht einfach und verwendet die Excelfunktion VERGLEICH zur Ermittlung der Zeilennummer in absteigend sortieren Listen.
Gruß Daniel


  

Betrifft: AW: Alle Zellen mit bestimmtem Datum markieren von: Tobias
Geschrieben am: 02.10.2019 16:03:37

hier habe ich eine Beispieldatei erstellt. Das dritte Tabellenblatt ist das gewünschte, simulierte Ergebnis, wie das zweite Blatt durch das Makro und die Datums-Eingabe in Zelle A1 auf dem ersten Blatt bearbeitet werden soll. Ich hoffe, auch wenn es keine Lösung geben sollte, dass zumindest das Problem nun gut nachvollzogen werden kann!

Grüße,
Tobias

https://www.herber.de/bbs/user/132333.xlsm


  

Betrifft: AW: Alle Zellen mit bestimmtem Datum markieren von: Tobias
Geschrieben am: 02.10.2019 16:28:43

hm, ich sehe gerade, dass ich vergessen habe, das Kontrollkästchen für die weiter offenen Fragen zu aktivieren ...


  

Betrifft: AW: Alle Zellen mit bestimmtem Datum markieren von: Daniel
Geschrieben am: 02.10.2019 16:40:42

Hi
ok, da stört jetzt die Implizite Typumwandlung von VBA mit Datumswerten.

setze mal in der Match-Funktion ein CLNG() um den Zellbezug auf die Eingabezelle:

z = Application.Match(CLng(Sheets(...).Range("A1").Value) - .5, Sheets(...).Range("F:F), -1)
Gruß Daniel


  

Betrifft: AW: Alle Zellen mit bestimmtem Datum markieren von: Tobias
Geschrieben am: 02.10.2019 17:00:04

Ich habe mal das ganze Makro auf die Testdatei bezogen, hier muss aber irgendwo noch eine Klammer fehlen (s. meine leider zutreffende Angabe „VBA bescheiden“): es kommt im Editor die Fehlermeldung „Fehler beim Kompilieren: Erwartet: Listentrennzeichen oder )“

Sub Test()
Dim Z As Long
z = Application.Match(CLng(Sheets("Datum eintragen in Zelle A1").Range("A1").Value) - .5,  _
Sheets("Tabelle vor Makro").Range("F:F), -1)
Sheets("Tabelle vor Makro").Range("A2:F" & Z).Font.Color = vbRed
End Sub



  

Betrifft: AW: Alle Zellen mit bestimmtem Datum markieren von: Tobias
Geschrieben am: 02.10.2019 17:12:45

... es fehlte ein Anführungszeichen (und ich habe es selbst entdeckt!). Ich verstehe zwar nicht warum, aber es funktioniert fantastisch! 1000 Dank! Tobiuas

Sub Test()
Dim Z As Long
Z = Application.Match(CLng(Sheets("Datum eintragen in Zelle A1").Range("A1").Value) - 0.5,  _
Sheets("Tabelle vor Makro").Range("F:F"), -1)
Sheets("Tabelle vor Makro").Range("A2:F" & Z).Font.Color = vbRed
End Sub



  

Betrifft: AW: Alle Zellen mit bestimmtem Datum markieren von: Daniel
Geschrieben am: 02.10.2019 17:26:31

HI
naja, was ist daran schwer zu verstehen?
bei Excel-Gut solltest du die Funktion VERGLEICH kennen, diese liefert dir die Zielennummer, in welcher sich ein bestimmter Wert befindet.
damit suche ich nach der letzten Zeilennummer mit dem gesuchten Datum und färbe ab da alle Zellen.
eigentlich sehr simpel, wenn man die Funktion VERGLEICH mit ihren Varianten kennt.

einziges Problem ist hier in VBA, dass eben nicht der Zellwert so wie er unformatiert in der Zelle steht übernommen wird (also der Zahlenwert des Datums), sondern das Datum in Textform "1.5.2009" und dann nach diesem Text im Zellbereich gesucht wird.
Daher die explizite Umwandlung in den Zahlenwert mit CLNG

Gurß Daniel


Beiträge aus dem Excel-Forum zum Thema "Alle Zellen mit bestimmtem Datum markieren"