VBA Zellfarbe abhängig von Inhalt

Gast #3713644
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
Gast
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
Gast
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
Gast
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! :)

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 12 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.