Excel VBA Zellen färben, wenn best. Wert in anderer Zelle

2 Antworten

Als Problem könnte noch auftauchen, dass Du

=HEXINDEZ("FF59625")

brauchst, da xl nur Dezumalzahlen nach Größe vergleicht.
Formel ohne Makro (bedingte Formatierung, Formel verwenden, Formel ist (ifür A1):

=und(HEXINDEZ(A1)<Hexindez("FF59625");HEXINDEZ(A1)>Hexindez("FF58200"))

Format: Gelber HiGr

entspr. für grün als erster (zuletzt eingegebener?) Bedingung (engeres Intervall, ich glaube mit "Anhalten", musst du ausprobieren)
Das Format kannst du per Formatpinsel von Blattkopf zu Blattkopf übertragen (Blattkopf = Schnittecke Spaltenbuchstaben-Zeilennummer links oben)


Iamiam  19.02.2015, 01:32

ich bin da einem Irrtum aufgesessen: das sind gar keine Hexadezimalzahlen, sondern eine Zahl mit vorangestelltem FF?
Dann
=und(Teil(A1;3;99)*1<59625;Teil(A1;3;99)*1>58200)

0
SamyMetal 
Beitragsersteller
 19.02.2015, 07:03
@Iamiam

Ja das sind keine Hexadezimalen, es sind nur Zahlen mit "FF" vorne dran. Leider muss ich es aber via Makro machen, das ist so vorgegeben. Aber danke für deine Hilfe :D

0

Im Prinzip lässt sich deine Anforderung auch ohne VBA erfüllen und zwar mit der Bedingten Formatierung. Schaue dir mal den angehängten Screenshot an.

Du kannst mit UND und WENN oder weiteren Bedingungen die Bedingung beliebig erweitern.

Woher ich das weiß:Berufserfahrung – Programmierer
Bereiche einfärben - (programmieren, Microsoft Excel, VBA)

SamyMetal 
Beitragsersteller
 18.02.2015, 14:36

Da hast du recht, das Problem ist, dass es ein generelles Makro zur Umwandlung sein soll, es muss also via VBA passieren.

0
SamyMetal 
Beitragsersteller
 18.02.2015, 14:45
@Suboptimierer

Generell im Sinne von, dass es jeden Monat ein File gibt, mit selben Aufbau, das mit dem Makro fertiggestellt werden soll. Die Werte von Spalte A variieren, die Werte in den Spalten D bis H variieren ebenso, je nach dem Wert in sagen wir A22 sollen E und F gefärbt werden.

0
Suboptimierer  18.02.2015, 14:47
@SamyMetal

Also mal A22 als Basis, mal A5, mal Ax, verstehe ich das richtig?

Dann ist dein Problem, dass du eine Regel finden musst, wie du die Formatierungsbasis identifizieren kannst. Das hat zunächst einmal nichts mit der Frage zu tun, ob du das in VBA oder Excel lösen kannst.

in VBA ist die Hintergrundfarbe InteriorColor. Die deutschen Funktionen programmierst du auf Englisch. Zum Beispiel ist WENN = IF.

Der Makrorekorder kann dir bei der Arbeit helfen.

0
SamyMetal 
Beitragsersteller
 18.02.2015, 15:02
@Suboptimierer

Okay, danke, dann schau ich mal was ich rausbekomme, bei weiteren Fragen meld ich mich wieder. Und danke nochmals :D

0
Suboptimierer  18.02.2015, 15:09
@SamyMetal

Ich gebe zu, dass ich mich ein bisschen quer stelle, hoffe aber, dir zumindest die richtigen Impulse gegeben zu haben.

Meine Faustregel: Löse nichts in VBA, wenn du es mit Excelfunktionalität (relativ unkompliziert) lösen könntest.

2
SamyMetal 
Beitragsersteller
 18.02.2015, 15:13
@Suboptimierer
 Range("A" & c, "A" & b).Select
Selection.FormatConditions.Delete
Selection.FormatConditions.Add Type:=xlCellValue, Operator:=xlBetween, _
    Formula1:="=""FF58200""", Formula2:="=""FF58425"""
Selection.FormatConditions(1).Interior.ColorIndex = 36
Selection.FormatConditions.Add Type:=xlCellValue, Operator:=xlBetween, _
    Formula1:="=""FF58430""", Formula2:="=""FF58650"""
Selection.FormatConditions(2).Interior.ColorIndex = 35

Selection.Find(What:="FF59", After:=ActiveCell, LookIn:=xlFormulas, _
    LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, _
    MatchCase:=False, SearchFormat:=False).Activate
    
d = ActiveCell.Row


Range("A" & d, "A" & b).Select
Selection.FormatConditions.Delete
Selection.FormatConditions.Add Type:=xlCellValue, Operator:=xlBetween, _
    Formula1:="=""FF59210""", Formula2:="=""FF59430"""
Selection.FormatConditions(1).Interior.ColorIndex = 36
Selection.FormatConditions.Add Type:=xlCellValue, Operator:=xlBetween, _
    Formula1:="=""FF59610""", Formula2:="=""FF59640"""
Selection.FormatConditions(2).Interior.ColorIndex = 35
Selection.FormatConditions.Add Type:=xlCellValue, Operator:=xlBetween, _
    Formula1:="=""FF59810""", Formula2:="=""FF59825"""
Selection.FormatConditions(3).Interior.ColorIndex = 36

So sind die Regeln für die bedingte Formatierung von der Spalte A, jetzt muss ich dieselben Zellen in Spalte E,F,K und M genauso färben, daran haperts.

0
Suboptimierer  18.02.2015, 15:40
@SamyMetal

Eine Möglichkeit wäre, als Type für die FormatCondition xlExpression wählen.
Dann baust du die Formel wie folgt auf:

Selection.FormatConditions.Add Type:=xlExpression, Operator:=xlNone, Formula1:="=UND(" & Selection.Address & ">=""FF59210"";" & Selection.Address & "<=""FF59430"")"
Selection.FormatConditions(1).Interior.ColorIndex = 36

Das Format kopierst du mit

Selection.Copy
Range("XXXXX").PasteSpecial Paste:=xlPasteFormats, Operation:=xlNone, _
    SkipBlanks:=False, Transpose:=False

Nimmst du als Typ xlCellValue, wird die gleiche bedingte Formatierung auf den Kopierzielbereich angewendet. Die Formatbedingung würde dann sozusagen kopiert werden, nicht das Format(-resultat) der Quelle.

1
SamyMetal 
Beitragsersteller
 19.02.2015, 08:02
@Suboptimierer
Range("A" & c, "A" & a - 1).Select
Selection.FormatConditions.Add Type:=xlExpression, Operator:=xlNone, Formula1:="=UND(" & Selection.Address & ">=""FF59210"";" & Selection.Address & "<=""FF59430"")"
Selection.FormatConditions(1).Interior.ColorIndex = 36

Range("A" & c, "A" & a - 1).Select
Selection.Copy
Range("E" & c, "E" & a - 1).PasteSpecial Paste:=xlPasteFormats, Operation:=xlNone, _
SkipBlanks:=False, Transpose:=False

So hab ichs mal auf meine Tabelle angewendet, aber diese werden nicht eingefärbt. Hab ich was vergessen, oder stell ich mich nur dumm an ?

0
Suboptimierer  19.02.2015, 10:58
@SamyMetal

In meinem Test habe ich nur eine Zelle behandelt.

Versuche mal, Selection.Address zu ersetzen durch "$A" & c, also der Adresse der obersten Zelle.

1
SamyMetal 
Beitragsersteller
 20.02.2015, 08:13
@Suboptimierer

So habe leider einen kleinen Rückschlag erlitten, denn auf einmal werden die Zielzellen genau in der falschen Farbe markiert

Do
Range("A" & c).Select
Selection.FormatConditions.Add Type:=xlExpression, Operator:=xlNone, Formula1:="=UND(" & "$A" & c & ">=""FF58200"";" & "$A" & c & "<=""FF58430"")"
Selection.FormatConditions(1).Interior.ColorIndex = 36
Selection.FormatConditions.Add Type:=xlExpression, Operator:=xlNone, Formula1:="=UND(" & "$A" & c & ">=""FF58610"";" & "$A" & c & "<=""FF58642"")"
Selection.FormatConditions(2).Interior.ColorIndex = 35
Selection.FormatConditions.Add Type:=xlExpression, Operator:=xlNone, Formula1:="=UND(" & "$A" & c & ">=""FF58809"";" & "$A" & c & "<=""FF58811"")"
Selection.FormatConditions(3).Interior.ColorIndex = 35
Selection.FormatConditions.Add Type:=xlExpression, Operator:=xlNone, Formula1:="=UND(" & "$A" & c & ">=""FF59429"";" & "$A" & c & "<=""FF59431"")"
Selection.FormatConditions(4).Interior.ColorIndex = 36
Selection.FormatConditions.Add Type:=xlExpression, Operator:=xlNone, Formula1:="=UND(" & "$A" & c & ">=""FF59610"";" & "$A" & c & "<=""FF59643"")"
Selection.FormatConditions(5).Interior.ColorIndex = 35
Selection.FormatConditions.Add Type:=xlExpression, Operator:=xlNone, Formula1:="=UND(" & "$A" & c & ">=""FF59819"";" & "$A" & c & "<=""FF59821"")"
Selection.FormatConditions(6).Interior.ColorIndex = 36
c = c + 1
Loop Until c = a

Columns("A:A").Select
Selection.Find(What:="FF58200", After:=ActiveCell, LookIn:=xlFormulas, _
    LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, _
    MatchCase:=False, SearchFormat:=False).Activate
Selection.FindNext(After:=ActiveCell).Activate
c = ActiveCell.Row

Do
Range("A" & c).Select
Selection.Copy
Range("E" & c).PasteSpecial Paste:=xlPasteFormats, Operation:=xlNone, _
SkipBlanks:=False, Transpose:=False
c = c + 1
Loop Until c = b
0
Suboptimierer  20.02.2015, 09:36
@SamyMetal

Ich habe das so vestanden, dass wenn die Zelle in Ax gelb eingefärbt wird, dass dann Ex auch gelb werden soll.

Wenn du nur die Bedingung zur Formatierung auf Ex übertragen willst, d. h. auch Ex überprüfen willst, in welchem Berech der Wert liegt, dann warst du mit deiner Lösung schon nah dran. Dann kannst du die Between-Variante nehmen und einfach das Format kopieren.

Versuche aber als Erstes, mit dem Dollarzeichen in der FormatCondition zu spielen.

0