AW: Im Dia Fläche zwischen zwei geglätteten Linien einfärben @Be
01.02.2026 20:34:36
xlKing
Hallo Kulo,
was willst du mit geglätteten Linien? Die verzerren nur das Ergebnis und stellen Datenpunkte dar, wo gar keine sind. Ja im gestapelten Flächendiagramm gibt es keine Möglichkeit, das zu glätten. Außerdem addiert das gestapelte Flächendiagramm die Datenreihen A + B zusammen, sodass bei einem Punkt 1 der Serie A vom Y-Wert 5 und Punkt 1 der Serie B vom Wert 20 letzter bei 25 angezeigt wird. Kann auch verwirrend sein, wenn man das nicht sofort sieht.
Bleibt dir also nur das normale Liniendiagramm. wenn du dort bereits Datenpunkte angezeigt hast und diese unbedingt geglättet haben willst. Dann markiere den Diagrammbereich und zeichne eine Freihandform mit geglätteten Eckpunkten. z.b. indem du folgendes Makro ausführst:
Sub Freeform_Zeichnen()
'Es muss ein Diagrammbereich markiert sein.
Dim s1 As Series, s2 As Series, i As Long
Set s1 = ActiveChart.FullSeriesCollection(1)
Set s2 = ActiveChart.FullSeriesCollection(2)
With ActiveChart.Shapes.BuildFreeform(msoEditingAuto, s2.Points(1).Left, s2.Points(1).Top)
For i = 2 To s2.Points.Count - 1
.AddNodes msoSegmentCurve, msoEditingSmooth, s2.Points(i).Left, s2.Points(i).Top
Next i
.AddNodes msoSegmentLine, msoEditingAuto, s2.Points(s2.Points.Count).Left, s2.Points(s2.Points.Count).Top
.AddNodes msoSegmentLine, msoEditingAuto, s1.Points(s1.Points.Count).Left, s1.Points(s1.Points.Count).Top
For i = s1.Points.Count - 1 To 2 Step -1
.AddNodes msoSegmentCurve, msoEditingSmooth, s1.Points(i).Left, s1.Points(i).Top
Next i
.AddNodes msoSegmentLine, msoEditingAuto, s1.Points(1).Left, s1.Points(1).Top
.AddNodes msoSegmentLine, msoEditingAuto, s2.Points(1).Left, s2.Points(1).Top
.ConvertToShape
End With
End Sub
Leider passen die geglätteten Linien nicht absolut exakt zu den geglätteten Diagrammpunkten. Aber sind extrem nah dran. Wenn du die Linien zwischen den Datenpunkten auf Keine setzt, fällt das gar nicht auf. die Datenpunkte selbst werden in jedem Fall abgedeckt.
Sobald du deine Daten änderst musst du die Form natürlich löschen und das Makro neu ausführen, da sie über dem Zeichenbereich liegt. Wenn das automatisch gehen soll, kannst du den Code auch an das SeriesChange Event oder das Chart.Calculate-Event binden. Das erklär ich dir aber in einem anderen Post, nur bei Interesse.
Gruß Mr. K.