Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1856to1860
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

Farbe einer Zelle je nach Bedingung

Farbe einer Zelle je nach Bedingung
25.11.2021 14:46:21
Mo
Hallo,
ich möchte in einer Tabelle ein Feld farblich je nach Fall ändern:
Es werden jeweils in einer anderen Tabelle jeder Tag als Datum verwiesen und jede Abteilung mit rot, gelb grün markiert. Ich habe acht Abteilungen in den Zeilen (7-14) und 31 Tage in den Spalten (C - AG).
Dabei sollen folgende Bedingungen beachtet werden:
Jede Abteilung grün -> Ausgabe grün
Sobald eine Abteilung gelb -> Ausgabe gelb
Sobald eine Abteilung rot -> Ausgabe rot
Hier ist mein bisheriger Code:
'Betriebsbereitschaft

Sub BetrB()
Dim x As Integer, n As Integer, i As Integer 'i für Zeilen, n für Spalten, x als counter
For n = 3 To 31
If Worksheets("0_480").Cells(1, 8).value = Worksheets("3_BetrB").Cells(6, n).value Then
x = Worksheets("3_BetrB").Cells(7, n).Interior.Color
End If
For i = 8 To 14
If Worksheets("3_BetrB").Cells(i, n).Interior.Color 
Hier soll soll eine doppelte For-Schleife einmal das Datum der Tabelle 0_480 mit dem Datum der Tabelle 3_BetrB vergleichen und dann die richtige Spalte wählen.
Danach sollen die Zeilen durch geganen werden. Hierbei wird der Farbcode der obersten Zelle an x übergeben. Grün: 10, gelb: 6, rot: 3.
Aufgrund der Abstufung, vergleiche ich die oberste Zeile immer mit der nächst tieferen. Falls der Farbcode Wert kleiner ist, wird x überschrieben.
Das heißt sobald ich einmal rot habe, wird x = 3 sein.
Am Ende sage ich, dass das gewünschte Feld dann die Farbe mit dem Farbcode x übernehmen soll.
Leider klappt das leider nicht so wie gewollt. Ich bekomme einen Überlauffehler in Zeile 5 bei x = ...
Hat jemand eine Idee und sieht vielleicht noch andere Fehler im Code?
LG

5
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Farbe einer Zelle je nach Bedingung
25.11.2021 15:07:26
Stefan
Servus Mo,

x = Worksheets("3_BetrB").Cells(7, n).Interior.ColorIndex
Du willst ja den Zahlenindex der Farbe herausfinden bzw vergleichen.
Das "Index" musst du natürlich bei allen 4 Codezeilen anfügen.
Gruß
Stefan
Vorsicht mit Colorindex
25.11.2021 15:15:45
Rudi
Hallo,
spätestens seit XL2007 sollte man den ColorIndex vergessen.
.Interior.Color ist sicherer, da eindeutig.
Bei mir ergeben z.b. die Colors 14857357 und 16764057 (2 ähnliche Blautöne) jeweils den ColorIndex 37
Gruß
Rudi
AW: Vorsicht mit Colorindex
25.11.2021 15:23:40
Stefan
Hallo Rudi,
Das stimmt schon, wenn man es natürlich so genau getrennt haben will, dann ist Integer allerdings der falsche Variablentyp.
Gruß
Stefan
Anzeige
Variablentyp
25.11.2021 15:32:20
Rudi
natürlich Long.
Aber das war nicht das Thema
Gruß
Rudi
AW: Farbe einer Zelle je nach Bedingung
25.11.2021 23:05:48
Yal
Hallo MO,
Überlauf bekommst Du, wie Rudi es gesagt hat, weil Color ein zu hohen Zahl für eine Variable vom Typ Integer liefert. Du musst Long verwenden.
Das Datum ist ein Zahl, damit lässt sich den Nummer der gesuchte Spalte direkt ableiten. For ist nicht nötig.
Wenn kleiner, dann kleiner nehmen, also Min. Da es nicht die Zellenwert sondern die Farbe-Color, muss man hier mit einem For vorgehen
Achte auf deine Indentierung: die typische Fehlerquelle bei Anfänger ist der Mangel an Übersicht auf dem eigenen Code.
Hier auch:
_ der erste "End If" ist zu viel (sollte sogar eine Kompilierungfehler aufrufen!)
_ der "x = ..." eine Zeile davor gehört ein Tab-zeichen nach recht eingerückt. Dann wäre Dir dieses "End If" deutlicher aufgefallen.
Bei einem so kurzen Code, verwende sprechende Variablenamen. Kein Grund sich das Leben schwer zu machen. Aber trotzdem nicht zu lang. Ich benutze Namen auf Deutsch, um die Abgrenzung zu VBA deutlicher zu machen.
Ich komme auf folgenden Ergebnis (Kontrolliere den Spaltenversatz. Es könnte auch sein, dass im '0_480'!H1 kein Datum steht, woraus den Tag sich lesen lässt):

Sub BetrB()
Dim Farbe As Long
Dim Sp As Integer
Dim Ze As Integer
Const SpaltenVersatz = 2
'Richtige Spalte ermitteln
Sp = Day(Worksheets("0_480").Cells(1, 8).Value) + SpaltenVersatz
With Worksheets("3_BetrB")
'Startwert ermitteln
Farbe = .Cells(7, Sp).Interior.Color
For Ze = 8 To 14
'wenn kleiner, kleinere nehmen
Farbe = WorksheetFunction.Min(Farbe, .Cells(Ze, Sp).Interior.Color)
Next
End With
'Ergebnis einsetzen
Worksheets("0_480").Range("L4").Interior.Color = Farbe
End Sub
VG
Yal
Anzeige

302 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige