Positiva och negativa Färger i ett diagram

February 21

Merril frågade om det fanns ett sätt att skapa ett linjediagram så att när en linje representerade ett negativt värde, skulle färgen på linjen ändras vid den punkt då det gick negativt. Till exempel i en viss dataserier, så länge linjen representerade positiva värden, det skulle vara blå, men när linjen representerade negativa värden, skulle det ändra till rött.

Tyvärr finns det inget sätt att enkelt göra detta i Excel. Det finns dock ett par lösningar som du kan prova. Den första är att använda ett makro för att ändra färgerna linje av diagram linjer som representerar negativa värden. Följande makro är ett exempel på en sådan strategi:

Sub PosNegLine ()
Dim chtSeries As Series
Dim SeriesNum As Integer
Dim SeriesColor As Integer
Dim MyChart Som diagram
Dim R Som 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 'Grön
NegColor = 3 'red
SeriesNum = 1

Ställ MyChart = ActiveSheet.ChartObjects (1) .Chart
Ställ chtSeries = MyChart.SeriesCollection (SeriesNum)
Ställ R = GetChartRange (MyChart, 1, "Värden")

För i = 2 Till R.Cells.Count
LastPtColor = Ilf (R.Cells (i - 1) .Value <0, NegColor, PosColor)
CurrPtColor = IIf (R.Cells (i) .Value Abs (R.Cells (i) .Value) Då
Linecolor = LastPtColor
Else
Linecolor = CurrPtColor
End If
End If
chtSeries.Points (i) .Border.ColorIndex = Linecolor
Nästa jag
End Sub

Funktion GetChartRange (Ch Som diagram, Ser As Integer, _
ValXorY As String) Som 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

Ställ GetChartRange = Ingenting

On Error Resume Nästa
SeriesFormula = Ch.SeriesCollection (Ser) .Formula
ListSep = ","
För i = 1 Till Len (SeriesFormula)
Om Mitt $ (SeriesFormula, i, 1) = ListSep Sedan
Pos = Pos + 1
ReDim Bevara LSeps (Pos)
LSeps (POS) = i
End If
Nästa jag

Om ucase (ValXorY) = "XVALUES" Då
Txt = Mid $ (SeriesFormula, LSeps (1) + 1, LSeps (2) - LSeps (1) - 1)

Ställ GetChartRange = Range (Txt)
End If

Om ucase (ValXorY) = "VÄRDEN" Då
Txt = Mid $ (SeriesFormula, LSeps (2) + 1, LSeps (3) - LSeps (2) - 1)

Ställ GetChartRange = Range (Txt)
End If
End Function

När du väljer ett diagram och sedan köra PosNegLine makro, ser det genom diagram och, för linjesegment mellan negativ datapunktvärden, ändrar linjefärg till rött. För linjesegment som förbinder positiva datapunkter, är linjefärg inställd till grönt.

Problemet med denna lösning är att den ger endast en uppskattning; det fungerar bara med linjer som förbinder två datapunkter, och det kan antingen ändra hela linjesegmentet eller inte. Om början datapunkten är positiv och den slutar datapunkten är negativ, kan den inte ändra färgen på en linje rätt när den passerar in negativa värden.

ExcelTips är din källa för kostnadseffektiv Microsoft Excel utbildning. Detta tips (1796) gäller för Microsoft Excel 2007 och 2010. Du kan hitta en version av detta tips för den äldre menygränssnittet i Excel här: Positiva och negativa färger i ett diagram.