Excel - Zeile abhängig einfärben

Hallo,
kann mir jemand bei Excel-VB helfen?

Ich möchte in einer Tabelle eine bestimmte Funktion einfügen die folgende Bedingungen erfüllen soll:
wenn der Wert einer Zelle = „1…“ ist, soll die ganze betreffende Zeile mit der Farbe „42“ hinterlegt werden.

Für eine einzelne Zelle mit dem entsprechenden Inhalt funktioniert es mit folgender Funktion

-----------------------------------------------------------------------Private Sub Worksheet_SelectionChange(ByVal Target As Excel.Range)

Dim cell As Range

For Each cell In Range(„B2:B2000“)

If cell.Value = „1…“ Then cell.Interior.ColorIndex = 42
If cell.Value = „.2…“ Then cell.Interior.ColorIndex = 43
If cell.Value = „…3…“ Then cell.Interior.ColorIndex = 45
If cell.Value = „…4.“ Then cell.Interior.ColorIndex = 44
If cell.Value = „…5“ Then cell.Interior.ColorIndex = 36

If cell.Value = „“ Then cell.Clear

Next

End Sub

Hi Geedoo,

kann mir jemand bei Excel-VB helfen?

Excel-vbA bietet nur eine Teilmenge des Funktionsumfangs von
VB plus MS Zusatzfunktionen.
Du meinst also Excel-Vba.

Ich möchte in einer Tabelle eine bestimmte Funktion einfügen
die folgende Bedingungen erfüllen soll:
wenn der Wert einer Zelle = „1…“ ist, soll die ganze
betreffende Zeile mit der Farbe „42“ hinterlegt werden.

Soll das bedeuten, in den Zellen steht „1…“ bzw. „.2…“
oder aber
es soll geprüft werden ob an erster Stelle eine 1 steht, an
zweiter Stelle eine 2 usw.?

Was soll geschehen wenn mehreres zutrifft im zweiten Fall?

Für eine einzelne Zelle mit dem entsprechenden Inhalt
funktioniert es mit folgender Funktion

Private Sub Worksheet_SelectionChange(ByVal Target As Excel.Range)
Dim cell As Range
For Each cell In Range(„B2:B2000“)
If cell.Value = „1…“ Then cell.Interior.ColorIndex = 42
If cell.Value = „.2…“ Then cell.Interior.ColorIndex = 43
If cell.Value = „…3…“ Then cell.Interior.ColorIndex = 45
If cell.Value = „…4.“ Then cell.Interior.ColorIndex = 44
If cell.Value = „…5“ Then cell.Interior.ColorIndex = 36
If cell.Value = „“ Then cell.Clear
Next
End Sub

Der Code wird immer gestartet wenn du eine beliebige Zelle
betrittst. Ist das so beabsichtigt?

Ich würde das Changeereignis nehmen :

Private Sub Worksheet\_Change(ByVal Target As Excel.Range)
Dim Cell as range, Farbe,N
if intersect(Target,range("B2:B2000") is nothing then exit sub
if target.cells.count 1 then exit sub
Farbe=Array(xlnone,42,43,45,44,36)
range("A2:IV2000").Interior.colorindex=Farbe(0)
for N=1 to ubound(Farbe)
 if mid(Target,N,1)=cstr(n) then
Target.entirerow.interior.colorindex=farbe(n)
next n
end sub

Sorry, hab hier kein Excel, also nicht getestet.

Gruß
Reinhard

Für eine einzelne Zelle mit dem entsprechenden Inhalt
funktioniert es mit folgender Funktion

-----------------------------------------------------------------------Private
Sub Worksheet_SelectionChange(ByVal Target As Excel.Range)

Dim cell As Range

For Each cell In Range(„B2:B2000“)

If cell.Value = „1…“ Then cell.Interior.ColorIndex = 42
If cell.Value = „.2…“ Then cell.Interior.ColorIndex = 43
If cell.Value = „…3…“ Then cell.Interior.ColorIndex = 45
If cell.Value = „…4.“ Then cell.Interior.ColorIndex = 44
If cell.Value = „…5“ Then cell.Interior.ColorIndex = 36

If cell.Value = „“ Then cell.Clear

Next

End Sub

und was soll passieren, wenn der Zellinhalt = „12345“ ist?

Lieben Gruß
Marion

Hallo Reinhard,

also der Inhalt der Zellen ist tatsächlich so, wie er zwischen den Anführungszeichen steht bei der 1 mit 4 Punkten dahinter, bei der 2 1 Punkt vor und 3 Punkte hinter der Zahl, usw. bis zur 5.

Diese Inhalte stammen aus einem anderen Programm, stellen Strukturebenen dar und sind durcheinander verteilt in der Spalte B.
Die farbliche hervorhebung der ganzen Zeile soll der besseren Unterscheidung der Hauptebene „1…“ dienen. Bei den anderen Zeilen mit den Inhalten „.2…“ bis „…5“ genügt die farbliche Unterscheidung der einzelnen Zellen.
Ob die Tabelle nur einmal beim Öffnen oder bei jeder Änderung in einer Zelle durchlaufen wird spielt für mich hierbei keine Rolle, da sich die Daten nachträglich nicht ändern.

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Grüezi Geedoo,

also der Inhalt der Zellen ist tatsächlich so, wie er zwischen
den Anführungszeichen steht bei der 1 mit 4 Punkten dahinter,
bei der 2 1 Punkt vor und 3 Punkte hinter der Zahl, usw. bis
zur 5.

Diese Inhalte stammen aus einem anderen Programm, stellen
Strukturebenen dar und sind durcheinander verteilt in der
Spalte B.
Die farbliche hervorhebung der ganzen Zeile soll der besseren
Unterscheidung der Hauptebene „1…“ dienen. Bei den anderen
Zeilen mit den Inhalten „.2…“ bis „…5“ genügt die
farbliche Unterscheidung der einzelnen Zellen.

OK, dann verbinde den Code mit dem Workbook_Open() und passe die erste Vergleichs-Zeile wie folgt an:

If cell.Value = "1...." Then cell.EntireRow.Interior.ColorIndex = 42


Mit freundlichen Grüssen

Thomas Ramel

  • MVP für MS-Excel -

Die farbliche hervorhebung der ganzen Zeile soll der besseren
Unterscheidung der Hauptebene „1…“ dienen. Bei den anderen
Zeilen mit den Inhalten „.2…“ bis „…5“ genügt die
farbliche Unterscheidung der einzelnen Zellen.
Ob die Tabelle nur einmal beim Öffnen oder bei jeder Änderung
in einer Zelle durchlaufen wird spielt für mich hierbei keine
Rolle, da sich die Daten nachträglich nicht ändern.

Hi Geedoo,
ich habe da was gebastelt, läuft hier auf XL2002 auch wunderbar, naja leider nur für „1…“, „.2…“, „…3…“.
Bei „…4.“ und „…5“ wird nix gefärbt :frowning:

Bei Tests ergab sich für
Mid(.Cells(Zei, 2), N, 1)
bei N=4, das der Term „…“ ergibt, was wegen der 1 nicht sein darf.
Muß irgendwie an den Punkten liegen, denn mit xxx4x xxxx5 klappt es perfekt mit dem Färben.

Die Spalte als Text zu formatieren brachte nichts, diese Punkte bringen Excel dazu seltsame Dinge zu tun.

Gut, man kann sie vor der Überprüfung in X’se umwandeln, danach wieder zurück, so dachte ich, aber Substitute klappt nicht.
Ich sehe grad den Wald vor lauter Bäumen nicht *glaub*

Gruß
Reinhard

Option Explicit
'
Sub WorkbookOpen()
Dim Zei As Long, Farbe, N
Farbe = Array(xlNone, 42, 43, 47, 44, 36)
On Error GoTo Fehler
Application.ScreenUpdating = False
With Worksheets("Tabelle1")
 .Range("A2:IV2000").Interior.ColorIndex = Farbe(0)
 For Zei = 2 To 2000
 For N = 1 To UBound(Farbe)
 If Mid(.Cells(Zei, 2), N, 1) = CStr(N) Then
 If N \> 1 Then
 .Cells(Zei, 2).Interior.ColorIndex = Farbe(N)
 Else
 .Cells(Zei, 2).EntireRow.Interior.ColorIndex = Farbe(N)
 End If
 End If
 Next N
 Next Zei
End With
Fehler:
Application.ScreenUpdating = True
End Sub

OT Ländereinstellungen
Grüezie Thomas,
sorry, habe die Beitragsfolge nich gefunden wo du was von International sagtest.

Sicher, ich könnte jetzt den Code posten:

Sub tt()
Dim maxL, L, K
For Each L In Application.International
 maxL = maxL + 1 'Anzahl ermitteln
Next L
For L = 1 To maxL
 Cells(L, 1) = Application.International(L)
Next L
End Sub

Das könnte man z.B. laufen lassen wenn ein Code mit Datumsangaben auf einem Rechner läuft, auf dem anderen nicht, und dann die ERgebnisse des Codes vergleichen.

Weißt du zufällig einen Weg um den Namen von
Application.International(L)
auszulesen?
Genau wie bei
For each X in applications.dialogs
Msgbox X.Name 'geht halt nicht

Der Hintergrund ist, jetzt bei International, kann ich die alle auslesen, aber eine Liste von
2
Wahr
7
C
usw.
ist halt nicht sehr aufschlussreich.

Hier hab ich manuell aus der Hilfe dann Erläuterungen dazugemixt zum Codeergebnis.

http://www.hostarea.de/server-01/Januar-9e6ab86c05.xls

Da sind auch Gedanken zu anderen Anfragen hier, nicht beachten bitte.
Es geht nur um Tabelle3, das makro tt() was gut versteckt im Dokumentmodul von Tabelle3 steckt.

Meine Frage ist nun, wie kann ich Tabelle3 erstellen, ohne manuell da einzugreifen.

Okay, die Vba-Hilfe auszulesen wird zu schwierig sein, aber zumindest den (englischen) Namen von …International(1) rauszufinden wäre sehr schick.

Danke ^ Gruß
Reinhard

Ci@o Reinhard

sorry, habe die Beitragsfolge nich gefunden wo du was von
International sagtest.

…schlecht organisiert, oder bloss zu faul zum Suchen…? :wink:

Weißt du zufällig einen Weg um den Namen von
Application.International(L)
auszulesen?

Der Hintergrund ist, jetzt bei International, kann ich die
alle auslesen, aber eine Liste von
2
Wahr
7
C
usw.
ist halt nicht sehr aufschlussreich.

Hier hab ich manuell aus der Hilfe dann Erläuterungen
dazugemixt zum Codeergebnis.

http://www.hostarea.de/server-01/Januar-9e6ab86c05.xls

Meine Frage ist nun, wie kann ich Tabelle3 erstellen, ohne
manuell da einzugreifen.

Vermutlich geht das nicht.
Die Long-Werte sind die internen Entsprechungen der ‚sprechenden‘ Konstanten - ob man da mit Excel Bordmitteln rankommt wage ich zu bezweifeln.
Es gibt noch den Objekt-Katalog im VBA-Editor mit F2 aufzurufen.
Wenn du dort nach ‚International‘ suchst und dir dann die Klasse ‚XlApplicationInternational‘ ansiehst findest Du diese Liste wieder; der Long-Wert wird dir beim anklicken einer Konstanten unten unter ‚Enum‘ ausgegeben.

Eventuell kann diese Klassenauflistung auch ausgelesen werden, das ist mir aber unbekannt.


Mit freundlichen Grüssen

Thomas Ramel

  • MVP für MS-Excel -

Hola Thomas,

sorry, habe die Beitragsfolge nich gefunden wo du was von
International sagtest.

…schlecht organisiert, oder bloss zu faul zum Suchen…? :wink:

Das Erstere, jepp :smile: Es heißt zwar das Genie beherrscht das Chaos und braucht seine Dinge nicht ordnen, aber gelegentlich bin ich mit dem Chaos überfordert, dann geht das Over-looking auf Null.

Zum Zweiten, das ist bei mir sehr seltsam *find*, suche ich was für mich, habe ich schon beim 3ten Scrollen keine Lust mehr, wenn ich es in der Suchliste nicht finde, egal jetzt Google oder hier die Suche.

Suche ich aber aufgrund einer Anfrage für jmd. anderen, dann finde ich da eher was, bin dann irgendwie sehr viel zäher und konzentrierter und erfindungsreicher beim Wählen der Suchwörter beim Suchen.

Es gibt noch den Objekt-Katalog im VBA-Editor mit F2
aufzurufen.

Den habe ich schon gelegentlich mal aufgerufen, weil ich schon mehrmals las, aus dem könnte man wichtige Informationen herauslesen.
Ich denke ich habe den Aufbau des Objektkatalogs einigermaßen verstanden, aber hilfreich war er mir noch nie :frowning:

Aber ich weiß, das wäre änderbar, ich müßte mich nur mal genauer mit dem Objektkatalog auseinandersetzen, naja, wie sang mal Doris Day oder wer auch immer,
que sera, sera …Somewhere, sometimes,
so sehe ich das auch, Irgendwann… *gg*

Eventuell kann diese Klassenauflistung auch ausgelesen werden,
das ist mir aber unbekannt.

Ja, Excel-Vba hat noch viele fehlende Features.

Gruß
Reinhard