Live-Forum - Die aktuellen Beiträge
Datum
Titel
17.04.2024 18:57:33
17.04.2024 16:56:58
Anzeige
Archiv - Navigation
1476to1480
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

Diagramm färben

Diagramm färben
25.02.2016 13:07:54
stef26
Hallo Zusammen,
ich hab da mal ne Frage.
Ich habe Daten die ich in einem Diagramm darstellen soll.
In Spalte B steht die Beschreibung in Spalte C der Wert.
Dabei ist es jedoch wichtig, dass die Balkenfarben nach der Beschreibung
in Spalte B eingefärbt werden.
Die Beschreibung in Spalte B kann öfters vorkommen, soll somit immer die selbe Farbe haben.
Ein Beispiel liegt bei...
https://www.herber.de/bbs/user/103874.xlsx
Kann mir jemand sagen wie ich das machen kann?
LG
:-)
Stef26

4
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Diagramm färben
25.02.2016 15:08:27
Steve
Hallo Stef,
da hast du dir aber was interessantes ausgesucht, zumindest für jemanden mit Basiskenntnissen ist das sicher eine Nummer zu groß.
Das erste was du tun musst ist aus den Diagrammen die Werte ermitteln. Dies bedarf schon etwas Aufwand, denn in deinem Balkendiagramm ist jeder Wert eine eigene SeriesCollection. Wo wir einmal dabei sind, unter Office 2010 heist der Befehl nur 'SeriesCollectionn' und nicht 'FullSeriesCollection', das solltest für dich noch anpassen da ich es mit O.2013 getestet habe.
Das Problem mit diesen Serien ist jedoch, dass die Werte nicht direkt gespeichert sind, sondern nur eine Formel wo die Zelle bezeichnet ist. Bsp.:
"=SERIES(Tabelle1!$B$3,,Tabelle1!$C$3,1)"
In dem Fall brauche ich die erste Adresse "$B$3" und muss das aus der Formel mittels der Funktion 'Teil' (=MID) erst dort rausholen. Dies muss ich für jede Serie tun und in einem Datenfeld (Array) speichern. Dann kann ich die Werte der Zellen deren Adressen ich nun habe miteinander vergleichen. Kam der Wert bereits vor, so bekommt er die Farbe des Vergleichswertes, wenn nicht bekommt er eine neue Farbe.
Diese habe ich wie schön zu sehen in einem SelectCase-Befehl angeordnet, sodass du dir mit dem Makrorecorder die Farben selber zurechtfummeln kannst. Eventuell musst du noch ein paar mehr Farben hinzufügen, das hängt von deinen Diagrammen ab. Für dein erstes Beispieldiagramm haben halt sechs Stück ausgereicht.
Sub Test()
Dim oShape As Shape, oCol
Dim dAddress()
Dim i As Long, j As Long, x As Long, y As Long, z As Long
For Each oShape In Tabelle1.Shapes
If oShape.Name Like "Diagramm*" Or oShape.Name Like "Chart*" Then
For Each oCol In oShape.Chart.FullSeriesCollection
ReDim Preserve dAddress(4, i)
dAddress(0, i) = fAddress(oCol.Formula)
i = i + 1
Next oCol
For x = 0 To i - 1
If j = 0 Then GoTo NewColor
For y = 0 To j
If Tabelle1.Range(dAddress(0, x)) = Tabelle1.Range(dAddress(0, y)) And x  y  _
Then GoTo NoNewColor
Next y
NewColor:
Select Case z
' ThemeColor / TintAndShade / Brightness / Transparency
Case 0: dAddress(1, x) = msoThemeColorAccent6
dAddress(2, x) = 0
dAddress(3, x) = -0.25
dAddress(4, x) = 0
Case 1: dAddress(1, x) = msoThemeColorAccent5
dAddress(2, x) = 0
dAddress(3, x) = -0.25
dAddress(4, x) = 0
Case 2: dAddress(1, x) = msoThemeColorAccent4
dAddress(2, x) = 0
dAddress(3, x) = -0.25
dAddress(4, x) = 0
Case 3: dAddress(1, x) = msoThemeColorAccent3
dAddress(2, x) = 0
dAddress(3, x) = -0.25
dAddress(4, x) = 0
Case 4: dAddress(1, x) = msoThemeColorAccent2
dAddress(2, x) = 0
dAddress(3, x) = -0.25
dAddress(4, x) = 0
Case 5: dAddress(1, x) = msoThemeColorAccent1
dAddress(2, x) = 0
dAddress(3, x) = -0.25
dAddress(4, x) = 0
End Select
z = z + 1
GoTo Coloring
NoNewColor:
dAddress(1, x) = dAddress(1, y)
dAddress(2, x) = dAddress(2, y)
dAddress(3, x) = dAddress(3, y)
dAddress(4, x) = dAddress(4, y)
Coloring:
With oShape.Chart.FullSeriesCollection(x + 1).Format.Fill
.ForeColor.ObjectThemeColor = dAddress(1, x)
.ForeColor.TintAndShade = dAddress(2, x)
.ForeColor.Brightness = dAddress(3, x)
.Transparency = dAddress(4, x)
End With
j = j + 1
Next x
End If
Next oShape
End Sub
Private Function fAddress(sFormula As String)
fAddress = Mid(sFormula, InStr(sFormula, "!") + 1, InStr(sFormula, ",") - InStr(sFormula, "! _
") - 1)
End Function
lg Steve

Anzeige
AW: Diagramm färben
25.02.2016 15:20:45
Steve
Kaum habe ich den Post abgeschickt, so fällt mir auf, dass die Variable 'j' eigentlich immer genau x entspricht und überflüssig ist. Zudem habe ich das Makro noch an mehreren Diagrammen getestet und festgestellt, dass ich vergessen habe die Variablen nach Abarbeitung eines Diagrammes zu resetten. Daher hier der korrigierte Code:
Sub Test()
Dim oShape As Shape, oCol
Dim dAddress()
Dim i As Long, x As Long, y As Long, z As Long
For Each oShape In Tabelle1.Shapes
If oShape.Name Like "Diagramm*" Or oShape.Name Like "Chart*" Then
For Each oCol In oShape.Chart.FullSeriesCollection
ReDim Preserve dAddress(4, i)
dAddress(0, i) = fAddress(oCol.Formula)
Debug.Print oCol.Formula
i = i + 1
Next oCol
For x = 0 To i - 1
If x = 0 Then GoTo NewColor
For y = 0 To x - 1
If Tabelle1.Range(dAddress(0, x)) = Tabelle1.Range(dAddress(0, y)) And x  y  _
Then GoTo NoNewColor
Next y
NewColor:
Select Case z
' ThemeColor / TintAndShade / Brightness / Transparency
Case 0: dAddress(1, x) = msoThemeColorAccent6
dAddress(2, x) = 0
dAddress(3, x) = -0.25
dAddress(4, x) = 0
Case 1: dAddress(1, x) = msoThemeColorAccent5
dAddress(2, x) = 0
dAddress(3, x) = -0.25
dAddress(4, x) = 0
Case 2: dAddress(1, x) = msoThemeColorAccent4
dAddress(2, x) = 0
dAddress(3, x) = -0.25
dAddress(4, x) = 0
Case 3: dAddress(1, x) = msoThemeColorAccent3
dAddress(2, x) = 0
dAddress(3, x) = -0.25
dAddress(4, x) = 0
Case 4: dAddress(1, x) = msoThemeColorAccent2
dAddress(2, x) = 0
dAddress(3, x) = -0.25
dAddress(4, x) = 0
Case 5: dAddress(1, x) = msoThemeColorAccent1
dAddress(2, x) = 0
dAddress(3, x) = -0.25
dAddress(4, x) = 0
End Select
z = z + 1
GoTo Coloring
NoNewColor:
dAddress(1, x) = dAddress(1, y)
dAddress(2, x) = dAddress(2, y)
dAddress(3, x) = dAddress(3, y)
dAddress(4, x) = dAddress(4, y)
Coloring:
With oShape.Chart.FullSeriesCollection(x + 1).Format.Fill
.ForeColor.ObjectThemeColor = dAddress(1, x)
.ForeColor.TintAndShade = dAddress(2, x)
.ForeColor.Brightness = dAddress(3, x)
.Transparency = dAddress(4, x)
End With
Next x
End If
ReDim dAddress(4, 0)
i = 0
z = 0
Next oShape
End Sub
Private Function fAddress(sFormula As String)
fAddress = Mid(sFormula, InStr(sFormula, "!") + 1, InStr(sFormula, ",") - InStr(sFormula, "! _
") - 1)
End Function
lg Steve

Anzeige
AW: Diagramm färben
25.02.2016 15:31:38
stef26
Hallo Steve,
super das ist genau das was ich brauche. Vielen vielen Dank !!!
Der Code läuft super und die Anpassungen der Farben ist ja kein Problem.
D A N K E
:-)
Stefan

Balken färben nach Bedingung
25.02.2016 15:51:02
Beverly
Hi,
wenn du die Balken mit einer bestimmten Farbe und nicht willkürlich färben willst, dann schreibe jeden Begriff aus Spalte B einmalig in eine extra Spalte (z.B. E1:E5) und färbe die Zelle mit der gewünschten Farbe. Mit folgendem Makro kannst du dann deine Diagramme färben:
Sub DiaFormatieren()
Dim chrDia As ChartObject
Dim serReihe As Series
Dim rngFarbe As Range
For Each chrDia In ActiveSheet.ChartObjects
With chrDia
For Each serReihe In .Chart.SeriesCollection
Set rngFarbe = ActiveSheet.Range("E1:E5").Find(serReihe.Name, lookat:=xlWhole)
If Not rngFarbe Is Nothing Then serReihe.Interior.Color = rngFarbe.Interior. _
Color
Next serReihe
End With
Next chrDia
End Sub


Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige