Setzen von Symbolsätzen per Makro

Bild

Betrifft: Setzen von Symbolsätzen per Makro
von: TerPursche
Geschrieben am: 10.06.2015 13:56:15

Hallo zusammen,
ich bin ziemlicher Excel-Neuling und habe zu einem respektiven Makro eine Frage. Da ich mir das Makro selber zusammengebastelt habe und mich in VBA praktisch nicht auskenne bitte ich um Verständnis für meine Unwissenheit.
Ich habe mich für folgende Variante entschieden, da Symbolsätze ja leider nicht einfach auf mehrere Zellen angewandt werden können, da nur absolute Zellbezüge erlaubt sind.
Das Makro soll zuerst bestehende bedingte Formatierungen löschen und dann den Symbolsatz "Ampeln" entsprechend eines Vergleichs zweier Zellen setzen. Hierzu wird die aktive Zelle mit der linken Nachbarzelle verglichen und die Ampel grün geschaltet, wenn der Wert größergleich, gelb geschaltet, wenn der Wert um bis zu 10 Prozent nach unten abweicht und rot geschaltet, wenn der Wert noch kleiner ist. Soviel zur Theorie, hier mein Makro:


Sub GruenWennGroesserLinkesTarget()
'
' GruenWennGroesserLinkesTarget Makro
'
'
    ActiveCell.Select
    Selection.FormatConditions.Delete
    Selection.FormatConditions.AddIconSetCondition
    Selection.FormatConditions(Selection.FormatConditions.Count).SetFirstPriority
    With Selection.FormatConditions(1)
        .ReverseOrder = False
        .ShowIconOnly = False
        .IconSet = ActiveWorkbook.IconSets(xl3TrafficLights1)
    End With
    With Selection.FormatConditions(1).IconCriteria(2)
        .Type = xlConditionValueNumber
        .Value = ActiveCell.Offset(0, -1) * "0,9"
        .Operator = 7
    End With
    With Selection.FormatConditions(1).IconCriteria(3)
        .Type = xlConditionValueNumber
        .Value = ActiveCell.Offset(0, -1)
        .Operator = 7
    End With
End Sub
Das ganze klappt soweit auch wie es soll, jedoch würde ich gerne mehrere Zellen auf einmal bearbeiten, welche ich vorher markiere/auswähle. Also: Ich markiere einen unbestimmt großen Zellbereich einer bestimmten Spalte und wende das Makro an, sodass obenstehendes Makro auf alle ausgewählten Zellen angewandt wird.
ist dies ohne großen Aufwand möglich? Oder gibt es sonst noch Vorschläge?
Grüße, Jan

Bild

Betrifft: AW: Setzen von Symbolsätzen per Makro
von: Michael
Geschrieben am: 10.06.2015 14:10:47
Hallo Jan,
was es nicht alles in Excel gibt! Danke für was Neues...
Die Erweiterung ist nicht besonders aufwendig: eine foreach-Schleife tut's; insgesamt sieht es dann so aus:

Sub GruenWennGroesserLinkesTarget()
'
Dim c As Range
For Each c In Selection
    c.FormatConditions.Delete
    c.FormatConditions.AddIconSetCondition
    c.FormatConditions(c.FormatConditions.Count).SetFirstPriority
    With c.FormatConditions(1)
        .ReverseOrder = False
        .ShowIconOnly = False
        .IconSet = ActiveWorkbook.IconSets(xl3TrafficLights1)
    End With
    With c.FormatConditions(1).IconCriteria(2)
        .Type = xlConditionValueNumber
        .Value = c.Offset(0, -1) * "0,9"
        .Operator = 7
    End With
    With c.FormatConditions(1).IconCriteria(3)
        .Type = xlConditionValueNumber
        .Value = c.Offset(0, -1)
        .Operator = 7
    End With
Next
End Sub
Happy Exceling,
Michael

Bild

Betrifft: AW: Setzen von Symbolsätzen per Makro
von: Kenny
Geschrieben am: 10.06.2015 14:13:34
Hi Jan,
einfach das "Activecell.select" weglassen.
Dann benutzt das Programm, die von dir ausgewählten Zellen :)


    Selection.FormatConditions.Delete
    Selection.FormatConditions.AddIconSetCondition
    Selection.FormatConditions(Selection.FormatConditions.Count).SetFirstPriority
    With Selection.FormatConditions(1)
        .ReverseOrder = False
        .ShowIconOnly = False
        .IconSet = ActiveWorkbook.IconSets(xl3TrafficLights1)
    End With
    With Selection.FormatConditions(1).IconCriteria(2)
        .Type = xlConditionValueNumber
        .Value = ActiveCell.Offset(0, -1) * "0,9"
        .Operator = 7
    End With
    With Selection.FormatConditions(1).IconCriteria(3)
        .Type = xlConditionValueNumber
        .Value = ActiveCell.Offset(0, -1)
        .Operator = 7
    End With
End Sub


Bild

Betrifft: AW: Setzen von Symbolsätzen per Makro
von: TerPursche
Geschrieben am: 10.06.2015 14:20:30
Danke vielmals euch beiden!
Wie nicht anders zu erwarten, funktionieren beide Lösungen exakt wie ich es gerne hätte.
Und ein besonderes Danke für die extrem schnellen Antworten!
Gruß, Jan

Bild

Betrifft: AW: Setzen von Symbolsätzen per Makro
von: TerPursche
Geschrieben am: 10.06.2015 14:43:11
Sorry, nach ausgiebigerem Testen:
Die Lösung von Kenny setzt die Vergleichswerte immer nur auf die der linken Nachbarzelle der ersten Zell, welche ausgewählt ist. Deutlicher: Wenn ich in einer Spalte 10 Zellen markiere und das Makro ausführe, wird bei allen 10 Zellen nur mit der linken Nachbarzelle der ersten Zelle verglichen.
Die Lösung von Michael funktioniert ohne Probleme.
Danke nochmals!
Jan

Bild

Betrifft: gerne, vielen Dank für die Rückmeldung
von: Michael
Geschrieben am: 12.06.2015 19:12:44
@kenny: bin auch beim ersten Test darübergestolpert, daß in den beiden WITHs (noch) activecell drinstand - das kann net gehen.
Gruß,
Michael

 Bild

Beiträge aus den Excel-Beispielen zum Thema "Setzen von Symbolsätzen per Makro"