Dieses Forum nutzt Cookies
Dieses Forum verwendet Cookies, um deine Login-Informationen zu speichern, wenn du registriert bist, und deinen letzten Besuch, wenn du es nicht bist. Cookies sind kleine Textdokumente, die auf deinem Computer gespeichert werden. Die von diesem Forum gesetzten Cookies werden nur auf dieser Website verwendet und stellen kein Sicherheitsrisiko dar. Cookies aus diesem Forum speichern auch die spezifischen Themen, die du gelesen hast und wann du zum letzten Mal gelesen hast. Bitte bestätige, ob du diese Cookies akzeptierst oder ablehnst.

Ein Cookie wird in deinem Browser unabhängig von der Wahl gespeichert, um zu verhindern, dass dir diese Frage erneut gestellt wird. Du kannst deine Cookie-Einstellungen jederzeit über den Link in der Fußzeile ändern.

Überlappende Balken bei gestapelten und gruppierten Diagrammen
#1
Hallo zusammen,

kann mir jemand sagen, wie ich die Balken von 2022 leicht hinter die Balken von 2023 setzen kann. Über die Funktion Reihenachsenüberlappung klappt es nicht (steht schon bei 100%). Gibt es noch andere Möglichkeiten?

Bin für jede Hilfe dankbar!


Angehängte Dateien Thumbnail(s)
   
Antworten Top
#2
Hallo,

ich habe so etwas auch einmal benötigt und habe 2 Diagramme erstellt.
Bei dem Diagramm im Vordergrund habe ich Achsen, Beschriftungen,... ausgeblendet und den Hintergrund auf 100% Transparent gestellt, dass nur noch die Balken sichtbar waren.

Das ganze lässt sich dann beliebig weit überlappen.
Allerdings ist die Kunst dabei, dass die Größen und Skalierungen in Beiden Diagrammen übereinstimmen.
Kann man manuell machen, oder mit dieses Makro, dass jedesmal läuft, wenn sich Werte im Diagramm ändern.
(Diagramm Namen müssen entsprechend angepasst werden)

LG
Norbert

Code:
Sub ChartGroessen()

    Set wb = ThisWorkbook
    Set blatt = wb.Sheets("Dein Blattname")
           
    Set diag1 = blatt.ChartObjects("Diagramm 6")
    Set diag2 = blatt.ChartObjects("Diagramm 7")
   
    diag1.ShapeRange.Chart.Axes(xlValue).MaximumScaleIsAuto = True
    diag2.ShapeRange.Chart.Axes(xlValue).MaximumScaleIsAuto = True
    c1 = diag1.ShapeRange.Chart.Axes(xlValue).MaximumScale
    c2 = diag2.ShapeRange.Chart.Axes(xlValue).MaximumScale
    c = c1
    If c2 > c Then c = c2
    diag1.ShapeRange.Chart.Axes(xlValue).MaximumScale = c
    diag2.ShapeRange.Chart.Axes(xlValue).MaximumScale = c
   
   
   
   
     
    a_cw = diag1.ShapeRange.Chart.ChartArea.Width
    a_ch = diag1.ShapeRange.Chart.ChartArea.Height
    a_cl = diag1.ShapeRange.Chart.ChartArea.Left
    a_ct = diag1.ShapeRange.Chart.ChartArea.Top
   
    a_pw = diag1.ShapeRange.Chart.PlotArea.Width
    a_ph = diag1.ShapeRange.Chart.PlotArea.Height
    a_pl = diag1.ShapeRange.Chart.PlotArea.Left
    a_pt = diag1.ShapeRange.Chart.PlotArea.Top
   
    a_a1h = diag1.ShapeRange.Chart.Axes(xlValue).Height
    a_a1w = diag1.ShapeRange.Chart.Axes(xlValue).Width
    a_a1l = diag1.ShapeRange.Chart.Axes(xlValue).Left
    a_a2h = diag1.ShapeRange.Chart.Axes(xlCategory).Height
    a_a2w = diag1.ShapeRange.Chart.Axes(xlCategory).Width
    a_a2l = diag1.ShapeRange.Chart.Axes(xlCategory).Left

   
    b_cw = diag2.ShapeRange.Chart.ChartArea.Width
    b_ch = diag2.ShapeRange.Chart.ChartArea.Height
    b_cl = diag2.ShapeRange.Chart.ChartArea.Left
    b_ct = diag2.ShapeRange.Chart.ChartArea.Top
   
    b_pw = diag2.ShapeRange.Chart.PlotArea.Width
    b_ph = diag2.ShapeRange.Chart.PlotArea.Height
    b_pl = diag2.ShapeRange.Chart.PlotArea.Left
    b_pt = diag2.ShapeRange.Chart.PlotArea.Top
   
    b_a1h = diag2.ShapeRange.Chart.Axes(xlValue).Height
    b_a1w = diag2.ShapeRange.Chart.Axes(xlValue).Width
    b_a1l = diag2.ShapeRange.Chart.Axes(xlValue).Left
    b_a2h = diag2.ShapeRange.Chart.Axes(xlCategory).Height
    b_a2w = diag2.ShapeRange.Chart.Axes(xlCategory).Width
   
     
   
    diag2.ShapeRange.Chart.ChartArea.Width = a_cw
    diag2.ShapeRange.Chart.ChartArea.Height = a_ch
    diag2.ShapeRange.Chart.ChartArea.Left = a_cl
    diag2.ShapeRange.Chart.ChartArea.Top = a_ct
   
    diag2.ShapeRange.Chart.PlotArea.Width = a_a2w
    diag2.ShapeRange.Chart.PlotArea.Height = a_a1h
    diag2.ShapeRange.Chart.PlotArea.Left = a_a2l
    diag2.ShapeRange.Chart.PlotArea.Top = a_pt
       
    diag1.ShapeRange.Chart.ChartGroups(1).GapWidth = 200
    diag2.ShapeRange.Chart.ChartGroups(1).GapWidth = 200
   
   
   
    dp_pr = a_a2w / (anz_z - 1)
    'Hier einstellen, wieviel Überlappung
    diag2.ShapeRange.Chart.ChartArea.Left = a_cl - (dp_pr / 3)


End Sub
Antworten Top
#3
Hallo b...,

alternativ kann diese Darstellung auch mit gestapelten Flächen erreicht werden (Anlage).

Hierfür müssen die Werte für die einzelnen Flächen berechnet werden.

Noch einige Bemerkungen:

1. Die Y-Achse ist als Datumsachse eingerichtet ( > alle X-Werte müssen ganzzahlig sein)
2. Die Beschriftung der X-Achse wurde durch die Beschriftung einer zusätzlichen Datenreihe vom Typ "Punkt XY" ersetzt (Markierungen wurden ausgeschaltet).
3. Die absoluten Werte der Parameter Breite, Überlappung und Lücke sind nicht wichtig, sie sollten aber durch 2 teilbar sein, damit die Beschriftung zentral unter den Säulen steht.


Angehängte Dateien
.xlsx   SäulenGestapeltGruppiertÜberlappend.xlsx (Größe: 32,29 KB / Downloads: 3)
helmut

Für mich ist die Möglichkeit in Excel an Zellen und Bereichen Namen zu vergeben die wichtigste Funktionalität.
Sie macht Formeln und den VBA-code verständlicher. Für Makros gilt die Regel: "Nur über benannte Bereiche auf den Inhalt der Zellen zugreifen."
Und wofür sind Regeln da? Um nachzudenken bevor man sie bricht.





Antworten Top


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste