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: