Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: Farbe in Balkendiagramm dynamisch ändern

Farbe in Balkendiagramm dynamisch ändern
23.04.2021 11:30:34
Christian
Hallo liebe Excel-Gemeinde.
Als erstes muss ich mich schonmal bedanken, da ich schon soooo oft hier in diesem Forum und im Archiv Hilfe gefunden habe.
Nun hoffe ich, dass ihr mir bei meinem aktuellen Problem auch weiterhelfen könnt, selbst wenn meine Suche nichts gebracht hat.
Ich habe eine Excel-Liste mit einem gestapelten Balkendiagramm, in dem Laufzeiten angezeigt werden, nach Datum.
Und zwar geht es da um den Fortschritt in einem Arbeitsablauf, wobei durch das Diagramm übersichtlich erkennbar sein soll, in welchem zeitlichen Ablauf welche Schritte fällig sind.
Die Tabelle steht, das Diagramm funktioniert, die dynamische Anpassung der x-Achse nach Start und Ende-Datum klappt (hier ein Dank ans Forum) ...
Alles schön und gut.
Nun soll aber anhand des in der Tabelle ausgewählten Status der Balken im Diagramm dynamisch die Farbe ändern.
Wenn ich z.B. den Status umstelle von "In Vorbereitung" auf "Überfällig" soll sich auch die Farbe des entsprechenden Balkens von blau nach rot verändern.
Ich habe den entsprechenden Teil der Datei mal hier:
https://www.herber.de/bbs/user/145743.xlsm
Ich hoffe das ist überhaupt möglich was ich möchte.
Anzeige

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

Betreff
Datum
Anwender
Anzeige
AW: Farbe in Balkendiagramm dynamisch ändern
23.04.2021 12:11:18
Nepumuk
Hallo Christian,
im Modul der Tabelle1:

Option Explicit
Sub Worksheet_Change(ByVal Target As Excel.Range)
If Target.Address = "$B$1" Or Target.Address = "$B$2" Then
Call y_achse_skalieren(Me)
ElseIf Not Intersect(Target, Range("E6:E16")) Is Nothing Then
Call SetColor(Me)
End If
End Sub
Im Modu1l:

Option Explicit
Sub y_achse_skalieren(ByRef probjWorksheet As Worksheet)
With probjWorksheet.ChartObjects(1).Chart.Axes(xlValue)
.MaximumScale = WorksheetFunction.Max(Sheets("Tabelle1").Range("B1:B2"))
.MinimumScale = WorksheetFunction.Min(Sheets("Tabelle1").Range("B1:B2"))
End With
'   ActiveWindow.Visible = False
End Sub
Public Sub SetColor(ByRef probjWorksheet As Worksheet)
Dim objPoint As Point
Dim lngRow As Long
lngRow = 6
With probjWorksheet
For Each objPoint In .ChartObjects(1).Chart.SeriesCollection(2).Points
objPoint.Format.Fill.BackColor.RGB = .Cells(lngRow, 5).DisplayFormat.Font.Color
objPoint.Format.Fill.ForeColor.RGB = .Cells(lngRow, 5).DisplayFormat.Font.Color
lngRow = lngRow + 1
Next
End With
End Sub
Gruß
Nepumuk
Anzeige
AW: Farbe in Balkendiagramm dynamisch ändern
23.04.2021 12:40:16
Christian
Hallo.
Danke für die schnelle Antwort.
Wenn ich das Makro ausführe, kommt die Meldung
"Argument ist nicht optional"
und die Farben aller Balken wird schwarz.
Kann es daran liegen, dass die Farben der Spalte Status durch eine bedingte Formatierung verändert wird?
AW: Farbe in Balkendiagramm dynamisch ändern
23.04.2021 12:46:38
Nepumuk
Hallo Christian,
nein, die bedingte Farbe lese ich per DisplayFormat Eigenschaft aus. Bei mir sieht das Chart so aus:

Gruß
Nepumuk
Anzeige
AW: Farbe in Balkendiagramm dynamisch ändern
23.04.2021 13:38:11
Christian
Perfekt...
Ich hab den Fehler gefunden.
Wenn man kurz nachdenkt und nicht nur blind kopiert, dann klappt das auch :-)
Ich hatte ja nur die relevanten Daten in die Beispieldatei kopiert.
In der Originaldatei musste ich den Code bei:
lngRow = 15
von 6 auf 15 ändern.
Und schon klappt es auch mit dem Nachbarn ;-)
Vielen vielen Dank.
Anzeige
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige
Anzeige

Infobox / Tutorial

Dynamische Farbänderung in Balkendiagrammen in Excel


Schritt-für-Schritt-Anleitung

Um die Farben einzelner Balken in einem Excel-Balkendiagramm dynamisch zu ändern, befolge die folgenden Schritte:

  1. Vorbereitung: Stelle sicher, dass Du ein gestapeltes Balkendiagramm erstellt hast, in dem die Statusdaten in einer Tabelle eingetragen sind.

  2. VBA-Editor öffnen:

    • Drücke ALT + F11, um den VBA-Editor zu öffnen.
  3. Modul für Arbeitsblatt hinzufügen:

    • Doppelklicke auf das Arbeitsblatt, in dem sich Dein Diagramm befindet (z. B. Tabelle1).
  4. Code einfügen: Füge den folgenden Code in das Modul ein:

    Option Explicit
    Sub Worksheet_Change(ByVal Target As Excel.Range)
       If Target.Address = "$B$1" Or Target.Address = "$B$2" Then
           Call y_achse_skalieren(Me)
       ElseIf Not Intersect(Target, Range("E6:E16")) Is Nothing Then
           Call SetColor(Me)
       End If
    End Sub
  5. Zusätzlichen Code einfügen: Füge in einem neuen Modul den folgenden Code ein:

    Option Explicit
    Sub y_achse_skalieren(ByRef probjWorksheet As Worksheet)
       With probjWorksheet.ChartObjects(1).Chart.Axes(xlValue)
           .MaximumScale = WorksheetFunction.Max(Sheets("Tabelle1").Range("B1:B2"))
           .MinimumScale = WorksheetFunction.Min(Sheets("Tabelle1").Range("B1:B2"))
       End With
    End Sub
    
    Public Sub SetColor(ByRef probjWorksheet As Worksheet)
       Dim objPoint As Point
       Dim lngRow As Long
       lngRow = 6
       With probjWorksheet
           For Each objPoint In .ChartObjects(1).Chart.SeriesCollection(2).Points
               objPoint.Format.Fill.BackColor.RGB = .Cells(lngRow, 5).DisplayFormat.Font.Color
               objPoint.Format.Fill.ForeColor.RGB = .Cells(lngRow, 5).DisplayFormat.Font.Color
               lngRow = lngRow + 1
           Next
       End With
    End Sub
  6. Makro testen: Ändere den Status in der entsprechenden Zelle, und beobachte, wie sich die Farbe des Balkens im Diagramm ändert.


Häufige Fehler und Lösungen

  • Fehler: "Argument ist nicht optional"
    Dieser Fehler tritt auf, wenn eine Variable nicht korrekt übergeben wird. Stelle sicher, dass Du die richtigen Zelladressen im Code verwendest.

  • Farben ändern sich nicht
    Wenn die Farben der Balken nicht wie erwartet geändert werden, könnte es daran liegen, dass die Zellen, die die Statusinformationen enthalten, durch bedingte Formatierungen beeinflusst werden. Überprüfe die Formatierungen.


Alternative Methoden

Eine alternative Methode zur Farbänderung von Balken in einem Excel-Diagramm ist die Verwendung von bedingten Formatierungen. Anstatt VBA zu verwenden, kannst Du die Farben direkt in den Zellen definieren, und die Diagrammfarben werden automatisch angepasst.


Praktische Beispiele

Hier ist ein Beispiel, wie Du die Farben in einem Balkendiagramm ändern kannst:

  1. Statusliste erstellen:

    • Erstelle eine Liste mit Status wie "In Vorbereitung", "Überfällig" und "Abgeschlossen".
  2. Balkendiagramm erstellen:

    • Erstelle ein Balkendiagramm in Excel basierend auf dieser Liste.
  3. Dynamische Farbänderung:

    • Verwende den oben angegebenen VBA-Code, um die Farben der Balken basierend auf dem Status zu ändern.

Tipps für Profis

  • Color Codes verwenden: Du kannst RGB-Werte für spezifische Farben verwenden, um die Farbänderung präziser zu steuern.
  • Diagramm linienfarbe ändern: Um die Linienfarbe in einem Diagramm zu ändern, kannst Du ebenfalls den VBA-Code anpassen, um objPoint.Format.Line.ForeColor.RGB zu verwenden.

FAQ: Häufige Fragen

1. Wie kann ich die Farbe eines einzelnen Balkens ändern?
Du kannst die Farbe eines einzelnen Balkens ändern, indem Du die entsprechende Bedingung im VBA-Code anpasst.

2. Funktioniert das auch in Excel Online?
Leider funktioniert der VBA-Code nicht in Excel Online, da VBA nur in Desktop-Versionen von Excel unterstützt wird.

3. Kann ich mehrere Diagramme gleichzeitig ändern?
Ja, Du kannst den VBA-Code anpassen, um durch mehrere Diagrammobjekte zu iterieren und die Farben entsprechend zu ändern.

4. Was mache ich, wenn die Farben nicht richtig angezeigt werden?
Überprüfe die Referenzen im VBA-Code, um sicherzustellen, dass sie mit den Zelladressen in Deiner Excel-Tabelle übereinstimmen.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige