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
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 |
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
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
Über die Seite bin ich auch gestolpert (Merci für den Link), aber mit der Methode bleiben alle Zellfarben weiß...
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! :)
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.