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.

_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 (1796) gilt für Microsoft Excel 2007 und 2010. Eine Version dieses Tipps für die ältere Menüoberfläche von Excel finden Sie hier: