Please Note: This article is written for users of the following Microsoft Excel versions: 2007 and 2010. If you are using an earlier version (Excel 2003 or earlier), this tip may not work for you. For a version of this tip written specifically for earlier versions of Excel, click here: Positive and Negative Colors in a Chart.
by Allen Wyatt
(last updated February 23, 2021)
Merril asked if there was a way to create a line chart so that when a line represented a negative value, the color of the line would change at the point when it went negative. For instance, in a particular data series, as long as the line represented positive values, it would be blue, but when the line represented negative values, it would change to red.
Unfortunately there is no way to easily do this in Excel. There are, however, a couple of workarounds you can try. The first is to use a macro to change the line colors of chart lines that represent negative values. The following macro is an example of such an approach:
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
When you select a chart and then run the PosNegLine macro, it looks through the chart and, for line segments between negative data point values, changes the line color to red. For line segments connecting positive data points, the line color is set to green.
The problem with this solution is that it provides only an approximation; it only works with lines connecting two data points, and it can either change the entire line segment or not. If the beginning data point is positive and the ending data point is negative, it cannot change the color of a line right as it passes into negative values.
ExcelTips is your source for cost-effective Microsoft Excel training. This tip (1796) applies to Microsoft Excel 2007 and 2010. You can find a version of this tip for the older menu interface of Excel here: Positive and Negative Colors in a Chart.
Save Time and Supercharge Excel! Automate virtually any routine task and save yourself hours, days, maybe even weeks. Then, learn how to make Excel do things you thought were simply impossible! Mastering advanced Excel macros has never been easier. Check out Excel 2010 VBA and Macros today!
Got a bunch of charts that you need to make formatting changes in? You can use a macro (or two) to apply the formatting ...Discover More
Macros allow you to make changes to virtually anything you can see in Excel. This tip examines how to make changes (even ...Discover More
When sending a chart to someone else, it can be frustrating for the other person to open the workbook and see errors ...Discover More
FREE SERVICE: Get tips like this every week in ExcelTips, a free productivity newsletter. Enter your address and click "Subscribe."
Got a version of Excel that uses the ribbon interface (Excel 2007 or later)? This site is for you! If you use an earlier version of Excel, visit our ExcelTips site focusing on the menu interface.