Forum: PC-Programmierung VBA Zellfarbe abhängig von Inhalt


von Friedrich (Gast)


Lesenswert?

Hallo VBA-Experten,

ich habe eine Excel-Tabelle, in der ich Zellen der Größe ihres Inhaltes 
nach einfärben möchte. Die Werte sind dabei nur Teil des Zellinhaltes. 
Dabei sollen die Farben wie folgt verteilt werden:

1-9  Gelb
10-99  Orange
>100  Rot


Beispiel:

B(23)  Orange
M(1)  Gelb
D(125)  Rot
F(101)  Rot
M(95)  Orange
D(5)  Gelb


Folgende zwei Lösungsansätze habe ich mir überlegt:
1. Zahlenwert aus Zelle auslesen, aufgrund des Wertes Zelle einer Farbe 
zuordnen (optimale Methode, aber ich scheiter am Code für das Auslesen 
der Zahl)
2. Anzahl der Zeichen bestimmen, aufgrund der Zeichenanzahl in der Zelle 
eine Farbe zuordnen (ist möglich, weil hier unterschieden wird zwischen 
einstellig (1-9), zweistellig (10-99) und dreistellig (>100) )

Eigentlich dachte ich, dass das mit Methode 2 fix als VBA-Code 
einprogrammiert ganz leicht zu lösen ist, aber ich habe gerade nen 
Durchhänger. Folgender Code färbt mir dooferweise nur eine Zelle (die 
erste) auf gelb.

Sub ZeichenZählen()

Dim Laenge As Integer             ' Laenge = Anzahl der Zeichen

For Each Cell In Selection        'den vorher markierten Bereich 
durchgehen

CountLength = Laenge            'Anzahl der Zeichen bestimmen

Select Case Laenge    'Case-Anweisung für Farbzuordnung gelb(6) usw.

Case Laenge = 4          '4 Zeichen entsprechen einer Zahl: z.B.: "M(3)"
        ActiveCell.Interior.ColorIndex = 6
Case Laenge = 5
        ActiveCell.Interior.ColorIndex = 15
Case Laenge = 6
        ActiveCell.Interior.ColorIndex = 3

End Select

Next

Liebe Mädels und Jungs, klärt mich doch bitte auf, was ich als 
VBA-Frischling machen muss und warum das Makro nicht funktioniert. Ich 
wäre Euch immens dankbar.

Beste Grüße
Friedrich

von Drecksexcel (Gast)


Lesenswert?

ExcelVBA ist lang her,
aber Du muss die Collection-Variable Cell verwenden,
nicht ActiveCell.
Ungetestet:
1
Sub ZeichenZählen()
2
3
Dim Laenge As Integer             ' Laenge = Anzahl der Zeichen
4
5
For Each Cell In Selection        'den vorher markierten Bereich 
6
durchgehen
7
8
CountLength = Laenge            'Anzahl der Zeichen bestimmen
9
10
Select Case Laenge    'Case-Anweisung für Farbzuordnung gelb(6) usw.
11
12
Case Laenge = 4          '4 Zeichen entsprechen einer Zahl: z.B.: "M(3)"
13
        Cell.Interior.ColorIndex = 6
14
Case Laenge = 5
15
        Cell.Interior.ColorIndex = 15
16
Case Laenge = 6
17
        Cell.Interior.ColorIndex = 3
18
19
End Select
20
21
22
Next

von Friedrich (Gast)


Lesenswert?

Merci Dir für die schnelle Antwort :)

Tatsächlich bearbeitet das Makro jetzt alle Zellen im markierten 
Bereich, allerdings färbt es sie alle gelb, unabhängig vom Wert, der in 
der Zelle steht.

Da muss doch irgendwas falsch am "Select Case"-Dingens sein.

Gruß
Friedrich

von Schimanski (Gast)


Lesenswert?

Select Case Laenge    'Case-Anweisung für Farbzuordnung gelb(6) usw.

Case 4          '4 Zeichen entsprechen einer Zahl: z.B.: "M(3)"
        Cell.Interior.ColorIndex = 6
Case 5
        Cell.Interior.ColorIndex = 15
Case 6
        Cell.Interior.ColorIndex = 3

End Select

So stehts "zumindistens" ;) hier:
http://msdn.microsoft.com/de-de/library/cy37t14y.aspx

von Friedrich (Gast)


Lesenswert?

Über die Seite bin ich auch gestolpert (Merci für den Link), aber mit 
der Methode bleiben alle Zellfarben weiß...

von Friedrich (Gast)


Lesenswert?

So funktionierts (anstatt CountLength besser Len(Cell) benutzen:

Sub ZeichenZählen()

Dim Laenge As Integer
Dim word As String            ' Laenge = Anzahl der Zeichen

For Each Cell In Selection        'den vorher markierten Bereich 
durchgehen

Laenge = Len(Cell)

Select Case Laenge    'Case-Anweisung für Farbzuordnung gelb(6) usw.

Case 4          '4 Zeichen entsprechen einer Zahl: z.B.: "M(3)"
        Cell.Interior.ColorIndex = 6
Case 5
        Cell.Interior.ColorIndex = 15
Case 6
        Cell.Interior.ColorIndex = 3
'Case Else
'        Cell.Interior.ColorIndex = 0

End Select

Next

Merci Euch beiden! Wünsch ein super Wochenende! :)

von Rainer V. (rudi994)


Lesenswert?

Muß da nicht noch ein Doppelpunkt rein? Case x: Mach_dies_und_das

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.