Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1308to1312
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Farbskala // Bedingte Formatierung

Farbskala // Bedingte Formatierung
19.04.2013 21:43:35
Björn
Moin zusammen,
vielleicht kann mir jemand bei meinem kleinen Problem, etwas unter die Arme greifen. Ich verzweifel so ein bissl grade.
Thematik:
Ich möchte eine Farbskala auch auf eine Zelle mit Textinhalt legen.
Leider funktiert dies anscheinend nur mit Wertformaten.
Ergo, habe ich mir eine Farbskala von 1-15 erstellt.
Um dann die einzelnen Farben, separat als bedingte Formatierung zu hinterlegen.
Sprich, sozusagen 15 bedingte Formatierungen, farblich abgestuft. Vorlage vorgenannte Farbskala.
1. Frage gibt es evtl. eine einfachere Lösung auf eine Zelle mit Textinhalt eine Farbskala zu legen.
2. Wie kann ich die einzelnen Farbwerte (Rot,Grün,Blau) einer Farbskala auslesen.
Anfangs, Mittel, und Endwert lassen sich noch in dem Dialog der Farbskala ablesen.
Alles dazwischen leider nicht.
bsp Datei ist beigefügt.
https://www.herber.de/bbs/user/84958.xlsx
Ich hoffe mal auf eure Ideen.
Vielen lieben Dank
Grüße
Björn

8
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Farbskala // Bedingte Formatierung
20.04.2013 00:52:48
fcs
Hallo Björn,
2 mal schlechte Nachricten.
Die bedingten Formatierungen mit Farskala, Ampel und Symbolen funktionieren nur mit Zellen, die Zahlenwerte enthalten.
Die Farbwerte kann man nicht auslesen.
Man kann die Zwischenwerte für die 3 Einzelfarben aber durch lineare Interpolation zwischen den Fixwerten ermitteln.
Farben sehen dann etwa wie folgt aus.
Userbild
Gruß
Franz
Beisiel für Berechnung
E     F      G     H   I       J        K
5  rot   grün   blau
6  248    105    107           20.04.2013    0
7  249    121    110           21.04.2013    1
8  250    138    113           22.04.2013    2
9  251    154    116           23.04.2013    3
10  252    170    120           24.04.2013    4
11  252    186    123           25.04.2013    5
12  253    203    126           26.04.2013    6
13  254    219    129           27.04.2013    7
14  255    235    132           28.04.2013    8
15  233    229    132           29.04.2013    9
16  210    222    132           30.04.2013   10
17  188    216    132           01.05.2013   11
18  166    209    132           02.05.2013   12
19  144    203    132           03.05.2013   13
20  121    196    132           04.05.2013   14
21   99    190    132           05.05.2013   15
Benutzte Formeln:
E7:  =RUNDEN(E$6+($K7-$K$6)*(E$14-E$6)/($K$14-$K$6);0)
E8:  =RUNDEN(E$6+($K8-$K$6)*(E$14-E$6)/($K$14-$K$6);0)
E9:  =RUNDEN(E$6+($K9-$K$6)*(E$14-E$6)/($K$14-$K$6);0)
E10:  =RUNDEN(E$6+($K10-$K$6)*(E$14-E$6)/($K$14-$K$6);0)
E11:  =RUNDEN(E$6+($K11-$K$6)*(E$14-E$6)/($K$14-$K$6);0)
E12:  =RUNDEN(E$6+($K12-$K$6)*(E$14-E$6)/($K$14-$K$6);0)
E13:  =RUNDEN(E$6+($K13-$K$6)*(E$14-E$6)/($K$14-$K$6);0)
E15:  =RUNDEN(E$14+($K15-$K$14)*(E$21-E$14)/($K$21-$K$14);0)
E16:  =RUNDEN(E$14+($K16-$K$14)*(E$21-E$14)/($K$21-$K$14);0)
E17:  =RUNDEN(E$14+($K17-$K$14)*(E$21-E$14)/($K$21-$K$14);0)
E18:  =RUNDEN(E$14+($K18-$K$14)*(E$21-E$14)/($K$21-$K$14);0)
E19:  =RUNDEN(E$14+($K19-$K$14)*(E$21-E$14)/($K$21-$K$14);0)
E20:  =RUNDEN(E$14+($K20-$K$14)*(E$21-E$14)/($K$21-$K$14);0)
Die Formeln für Rot kann man dann nach rechts kopieren

Anzeige
AW: Farbskala // Bedingte Formatierung
20.04.2013 19:13:57
Björn
hehe Vielen dank euch beiden,
hab die gestern abend noch gegrübelt wie Excel die Farbwerte ausrechnet.
Aber auf Interpolation bin ich net gekommen. Aber ich wahr in Mathe ja eh schon immer eine niete.
*lach*
Okay nochmals danke
und wünsch euch beiden ein erholsames Wochenende
Grüße
Björn

Die schlechten Nachrichten will ich ...
20.04.2013 02:21:35
Luc:-?
…mal Franz überlassen, Björn,
aber …
1. handelt es sich hier ja gar nicht um Texte und
2. kann man die Farben genau berechnen
…und zwar auch durch Auswertung der BedingtFormatierung wie ich dir in deiner Mappe demonstriere, denn ich arbeite gerade an dieser Problematik.
Zwar musste ich Quantil durch die genaue Zahl ersetzen, denn bisher habe ich nur niedrigsten/höchsten Wert, Zahl und primitive Formeln (Zahlen mit Operatoren) nahezu fertig, aber dieser 1.Menüpunkt der BedingtFormatierung ab Xl12 ist auch schon mein letzter (nach dem ColorScale-Objekt kommen dann nur noch die Objekte Databar und IconSets an die Reihe). Die anderen Menüpktt sind bereits fertiggestellt (muss dann noch die endgültige Ausgabeform überdenken, denn der 1.Menüpkt weicht von den anderen 5, die letztlich nur Erweiterungen der alten Typen 1 u.2 sind, erheblich ab)! Was du siehst, ist also noch nicht der letzte Stand! ;-)
Bis zur Fertigstellung kann's also noch etwas dauern, vor allem als Ergänzungstool für meinen HTML-Generator für xlTabb.
Bisher habe ich das als UDF mit 4 Ausgabeformen (je 2 Engl u.Dt) vorgesehen. Mit dieser UDF habe ich auch die Werte ermittelt (im Prinzip so wie es Franz beschreibt → erkennbar an den FarbAnteilIndizes der einen Variante).
Gruß Luc :-?

Anzeige
AW: Die schlechten Nachrichten will ich ...
20.04.2013 19:14:24
Björn
siehe Mail an Franz :)

OK! Nachtrag: Falls es sich mal tatsächl ...
21.04.2013 14:30:07
Luc:-?
…um Texte handeln sollte, Björn & Interessenten,
die, warum auch immer, per Farbskala bedingt formatiert wdn sollen, kann das ebenfalls realisiert wdn, indem ein Referenzbereich mit Zahlen passender Relation angelegt wird. Der muss dann im Prinzip nicht einmal formatiert wdn, kann also auch als benannte Matrixkonstante definiert wdn, (der/)die dann einem Pgm (ggf auch UDF) zur Ermittlung der Werterelationen und damit letztlich der Farbwerte übergeben wird. Über den TexteBereich wird dann eine simple Bedingtformatierung gelegt (idR vom „klassischen“ Typ1 → Menüpkt2), die normalerweise erfüllt ist (wenn bspw bestimmte Texte eingetragen wurden). Gegen die Farbwerte aus der Relationsberechnung der Referenzzahlen wird dann die Farbe des BedingtFormats des TexteBereichs per VBA-(Ereignis-)Prozedur getauscht, d.h., die ggf für den gesamten TexteBereich gültige BedingtFormatierung wird auf seine Zellen vereinzelt. Das ist ein bisschen knifflig, weil man nicht einfach den Geltungsbereich ändern kann ohne die Formatierung der anderen Zellen zu verlieren. Deshalb muss pro FolgeZelle das gleiche simple BedingtFormat mit geänderter Farbe hinzugefügt und erst zum Schluss das BedingtFormat der 1.Zelle nur auf diese beschränkt wdn.
Mit den Farbwerten kann dann je nach Vorgabe nicht nur die Zellfarbe des BedingtFormats des TexteBereichs, sondern auch wahlweise Muster-, Text- u/o Rahmenfarbe geändert wdn. Dafür nachfolgend ein Bsp auf Basis einer Ereignisprozedur…
Rem Übernimmt BedingtFormatFarben eines Referenzbereichs (speziell aus Farbskala)
'   auf BedingtFormat-(Zell-, Muster- bzw Text-)Farben des Zielbereichs (Target -
'   vorzugsweise m.Textinhalt); dabei muss b.Einsatz eigener Berechnungen anstatt
'   d.UDF GetFConForm d.Referenzbereich nicht zwingend bedingt formatiert werden,
'   da es nur auf d.Relation seiner Werte zu d.Eckwerten für d.GrdFarben ankommt.
'   Achtung! Konstanten anpass u.GetFConForm ersetz (anteilige RGB-PotenzSummen)!
'   Für weitgehende Automatik ist Umstellung auf Worksheet_Calculation erforderl!
'   Vs1.0 -LSr -cd:20130421 -1pub:20130421herber -lupd:20130421t
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Const FTyp As Integer = 1, inZBedNr As Integer = 1, QBedNr As Integer = 1, _
adQBez$ = "E119:E125", adZBez$ = "G119:G125"      'Anm: --> ersetzen!
Dim tcix As Long, trix As Long, ZBedNr As Long, FWerte As Variant, _
QBez As Range, ZBez As Range, Ziel As Range, fcBer As FormatCondition
On Error Resume Next
Set ZBez = Me.Range(adZBez)
If Not Intersect(Target(1), ZBez(1)) Is Nothing And Target.Count = ZBez.Count Then
Set QBez = Me.Range(adQBez): ZBedNr = inZBedNr
FWerte = GetFConForm(QBez, QBedNr)                  'Anm: --> ersetzen!
For trix = 1 To Target.Rows.Count
For tcix = 1 To Target.Columns.Count
Set Ziel = Target(trix, tcix): Set fcBer = Ziel.FormatConditions(ZBedNr)
If trix > 1 Or tcix > 1 Then
With fcBer                              'Anm: f.Type=1 --> ggf korr!
Ziel.FormatConditions.Add .Type, .Operator, .Formula1, .Formula2
End With
Set fcBer = Ziel.FormatConditions(ZBedNr + 1)
fcBer.ModifyAppliesToRange Ziel
End If
With fcBer
.StopIfTrue = False                     'Anm: nur bei Bedarf!
Select Case FTyp
Case 1: .Interior.Color = FWerte(trix - 1, tcix - 1)
Case 2: .Interior.PatternColor = FWerte(trix - 1, tcix - 1)
Case 3: .Font.Color = FWerte(trix - 1, tcix - 1)
Case 4: .Borders.Color = FWerte(trix - 1, tcix - 1)
Case Else: GoTo ex
End Select
End With
Next tcix
Next trix
Target(1).FormatConditions(inZBedNr).ModifyAppliesToRange Target(1)
End If
ex: Set QBez = Nothing: Set ZBez = Nothing: Set fcBer = Nothing: Set Ziel = Nothing
End Sub
Wenn hier die Konstante FTyp=3 gesetzt wird, könnte man auch folgd Ergebnis erhalten:
Userbild
Auf ähnliche Weise (nur unkomplizierter) kann man übrigens auch die Farben von BedingtFormaten vor Xl12 austauschen und so dynamisch (scheinbar) beliebig viele Bedingtformate pro Zelle simulieren.
Gruß + schöSo, Luc :-?

Anzeige
Habe wohl Rechnung ohne MS-Skurrilitäten ...
21.04.2013 21:22:34
Luc:-?
…gemacht, Folks;
ModifyAppliesToRange scheint die Verbindung zur Referenz zu lösen, weshalb Vs1.0 unbefriedigend läuft. Deshalb besser diese einfachere, aber auch rigorosere Version verwenden:
Rem Übernimmt BedingtFormatFarben eines Referenzbereichs (speziell aus Farbskala)
'   auf BedingtFormat-(Zell-, Muster- bzw Text-)Farben des Zielbereichs (Target -
'   vorzugsweise m.Textinhalt); dabei muss b.Einsatz eigener Berechnungen anstatt
'   d.UDF GetFConForm d.Referenzbereich nicht zwingend bedingt formatiert werden,
'   da es nur auf d.Relation seiner Werte zu d.Eckwerten für d.GrdFarben ankommt.
'   Achtung! Konstanten anpass u.GetFConForm ersetz (anteilige RGB-PotenzSummen)!
'   Für weitgehende Automatik ist Umstellung auf Worksheet_Calculation erforderl!
'   Vs1.1 -LSr -cd:20130421 -1pub:20130421herber -lupd:20130421t
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Const FTyp As Integer = 3, QBedNr As Integer = 1, ZBedNr As Integer = 1, _
adQBez$ = "A127:A133", adZBez$ = "C127:C133"      'Anm: --> ersetzen!
Dim tcix As Long, trix As Long, FWerte As Variant, QBez As Range, ZBez As Range, _
fcZBer As FormatConditions, fcZiel As FormatCondition
On Error Resume Next
Set ZBez = Me.Range(adZBez)
If Not Intersect(Target(1), ZBez(1)) Is Nothing And Target.Count = ZBez.Count Then
Set QBez = Me.Range(adQBez): Set fcZBer = Target.FormatConditions
FWerte = GetFConForm(QBez, QBedNr)                  'Anm: --> ersetzen!
For trix = 0 To Target.Rows.Count - 1               'Anm: VarLauf ggf anpassen!
For tcix = 0 To Target.Columns.Count - 1        'Anm: VarLauf ggf anpassen!
With fcZBer(ZBedNr)                         'Anm: f.Type=1 --> ggf korr!
Set fcZiel = fcZBer.Add(.Type, .Operator, .Formula1, .Formula2)
End With
With fcZiel
Select Case FTyp
Case 1: .Interior.Color = FWerte(trix, tcix)
Case 2: .Interior.PatternColor = FWerte(trix, tcix)
Case 3: .Font.Color = FWerte(trix, tcix)
Case 4: .Borders.Color = FWerte(trix, tcix)
Case Else: GoTo ex
End Select
.StopIfTrue = False                     'Anm: nur bei Bedarf!
.ModifyAppliesToRange Target(trix + 1, tcix + 1)
End With
Next tcix
Next trix
fcZBer(ZBedNr).Delete
End If
ex: Set fcZBer = Nothing: Set fcZiel = Nothing: Set QBez = Nothing: Set ZBez = Nothing
End Sub
Userbild
Luc :-?

Anzeige
AW: Habe wohl Rechnung ohne MS-Skurrilitäten ...
22.04.2013 08:32:02
Björn
Moin,
so ganz steige ich da noch nicht durch. Ist wohl zu früh am Montag morgen.
Oder was wahrscheinlicher ist...meine als mit gut bewerteten VBA Kenntnisse, sind vielleicht etwas überbewertet.
Ich werd mit Deinem Code aber nachher ein wenig rumspielen. :)
Und vielen Dank Dir für Deine Mühen
Grüße
Björn

Viel Spaß dabei! Meine Mühen waren ...
22.04.2013 16:30:34
Luc:-?
…ohnehin nicht umsonst, Björn,
da ich auf diese Weise noch einiges entdeckt habe, das ich bei einem anderen Projekt unbedingt noch berücksichtigen muss. Insofern kann ich mich auch bei dir bedanken… ;-)
Übrigens, sicher kann man mit dieser Methode nicht nur „farbskalige“ Datenbalken simulieren, sondern wahrscheinlich auch die entsprd Objekte der BedingtFormatierung umfärben, so dass sich ganz neue Möglichkeiten ergeben. Das mal als zusätzliche Probier-Idee… ;-)
Gruß Luc :-?
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige