Positive und negative Farben in einem Diagramm (Microsoft Excel)
Merril fragte, ob es eine Möglichkeit gebe, ein Liniendiagramm zu erstellen, damit sich die Farbe der Linie an dem Punkt ändert, an dem sie negativ wird, wenn eine Linie einen negativen Wert darstellt. Beispielsweise wäre in einer bestimmten Datenreihe, solange die Linie positive Werte darstellt, sie blau, aber wenn die Linie negative Werte darstellt, würde sie sich in rot ändern.
Leider ist dies in Excel nicht einfach möglich. Es gibt jedoch einige Problemumgehungen, die Sie ausprobieren können. Die erste besteht darin, ein Makro zu verwenden, um die Linienfarben von Diagrammlinien zu ändern, die negative Werte darstellen. Das folgende Makro ist ein Beispiel für einen solchen Ansatz:
Sub PosNegLine() Dim chtSeries As Series Dim SeriesNum As Integer Dim SeriesColor As Integer Dim MyChart As Chart Dim R As Range Dim i As Integer Dim LineColor As Integer Dim PosColor As Integer Dim NegColor As Integer Dim LastPtColor As Integer Dim CurrPtColor As Integer PosColor = 4 'Green NegColor = 3 'red SeriesNum = 1 Set MyChart = ActiveSheet.ChartObjects(1).Chart Set chtSeries = MyChart.SeriesCollection(SeriesNum) Set R = GetChartRange(MyChart, 1, "Values") For i = 2 To R.Cells.Count LastPtColor = IIf(R.Cells(i - 1).Value < 0, NegColor, PosColor) CurrPtColor = IIf(R.Cells(i).Value < 0, NegColor, PosColor) If LastPtColor = CurrPtColor Then LineColor = LastPtColor Else If Abs(R.Cells(i - 1).Value) > Abs(R.Cells(i).Value) Then LineColor = LastPtColor Else LineColor = CurrPtColor End If End If chtSeries.Points(i).Border.ColorIndex = LineColor Next i End Sub
Function GetChartRange(Ch As Chart, Ser As Integer, _ ValXorY As String) As Range Dim SeriesFormula As String Dim ListSep As String * 1 Dim Pos As Integer Dim LSeps() As Integer Dim Txt As String Dim i As Integer Set GetChartRange = Nothing On Error Resume Next SeriesFormula = Ch.SeriesCollection(Ser).Formula ListSep = "," For i = 1 To Len(SeriesFormula) If Mid$(SeriesFormula, i, 1) = ListSep Then Pos = Pos + 1 ReDim Preserve LSeps(Pos) LSeps(Pos) = i End If Next i If UCase(ValXorY) = "XVALUES" Then Txt = Mid$(SeriesFormula, LSeps(1) + 1, LSeps(2) - LSeps(1) - 1) Set GetChartRange = Range(Txt) End If If UCase(ValXorY) = "VALUES" Then Txt = Mid$(SeriesFormula, LSeps(2) + 1, LSeps(3) - LSeps(2) - 1) Set GetChartRange = Range(Txt) End If End Function
Wenn Sie ein Diagramm auswählen und dann das PosNegLine-Makro ausführen, durchsucht es das Diagramm und ändert für Liniensegmente zwischen negativen Datenpunktwerten die Linienfarbe in Rot. Bei Liniensegmenten, die positive Datenpunkte verbinden, wird die Linienfarbe auf Grün gesetzt.
Das Problem bei dieser Lösung ist, dass sie nur eine Annäherung liefert; Es funktioniert nur mit Linien, die zwei Datenpunkte verbinden, und es kann entweder das gesamte Liniensegment ändern oder nicht. Wenn der Anfangsdatenpunkt positiv und der Enddatenpunkt negativ ist, kann er die Farbe einer Linie nicht ändern, wenn sie in negative Werte übergeht.
Ein anderer Ansatz besteht darin, Datenpunkte als unterschiedliche Farben oder Formen zu formatieren, je nachdem, ob sie positiv oder negativ sind. Eine Möglichkeit, dies zu erreichen, finden Sie auf der Website von Jon Peltier, die sich hier befindet:
http://www.peltiertech.com/Excel/Charts/ConditionalChart1.html
_Hinweis: _
Wenn Sie wissen möchten, wie die auf dieser Seite (oder auf einer anderen Seite der ExcelTips-Websites) beschriebenen Makros verwendet werden, habe ich eine spezielle Seite vorbereitet, die hilfreiche Informationen enthält.
ExcelTips ist Ihre Quelle für kostengünstige Microsoft Excel-Schulungen.
Dieser Tipp (1999) gilt für Microsoft Excel 97, 2000, 2002 und 2003. Eine Version dieses Tipps für die Multifunktionsleistenschnittstelle von Excel (Excel 2007 und höher) finden Sie hier: