Loading
Excel.Tips.Net ExcelTips (Menu Interface)

Positive and Negative Colors in a Chart

Please Note: This article is written for users of the following Microsoft Excel versions: 97, 2000, 2002, and 2003. If you are using a later version (Excel 2007 or later), this tip may not work for you. For a version of this tip written specifically for later versions of Excel, click here: Positive and Negative Colors in a Chart.

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.

Another approach is to format data points as different colors or shapes, based on whether they are positive or negative. A way to accomplish this is detailed at Jon Peltier's Web site, located here:

http://www.peltiertech.com/Excel/Charts/ConditionalChart1.html

ExcelTips is your source for cost-effective Microsoft Excel training. This tip (1999) applies to Microsoft Excel 97, 2000, 2002, and 2003. You can find a version of this tip for the ribbon interface of Excel (Excel 2007 and later) here: Positive and Negative Colors in a Chart.

Related Tips:

Your Data, Your Way! Want the greatest control possible over how your data appears on the page? Excel's custom formats can provide that control, and ExcelTips: Custom Formats can unlock the secrets to creating your own custom formats. Check out ExcelTips: Custom Formats today!

 

Comments for this tip:

Joe DiSabato    12 Oct 2012, 14:41
Hi, Had the same issue with an income vs expense chart when I wanted to show the "cash flow", that is income minus expenses for each month. I have a line chart by month showing the income and expense lines.

My solution was to add 2 vertical bar charts, a green for positive cash flow numbers(or blank) and red for negative cash flow. These 2 bar series overlap but do not interfer with each other. Very neat graphical illustration. Wish I could include a picture of the chart here.

Leave your own comment:

*Name:
Email:
  Notify me about new comments ONLY FOR THIS TIP
Notify me about new comments ANYWHERE ON THIS SITE
Hide my email address
*Text:
*What is 3+4? (To prevent automated submissions and spam.)
 
          Commenting Terms
 
 

Our Company

Sharon Parq Associates, Inc.

About Tips.Net

Contact Us

 

Advertise with Us

Our Privacy Policy

Our Sites

Tips.Net

Beauty and Style

Cars

Cleaning

Cooking

DriveTips (Google Drive)

ExcelTips (Excel 97–2003)

ExcelTips (Excel 2007–2013)

Gardening

Health

Home Improvement

Money and Finances

Organizing

Pests and Bugs

Pets and Animals

WindowsTips (Microsoft Windows)

WordTips (Word 97–2003)

WordTips (Word 2007–2013)

Our Products

Premium Newsletters

Helpful E-books

Newsletter Archives

 

Excel Products

Word Products

Our Authors

Author Index

Write for Tips.Net

Copyright © 2014 Sharon Parq Associates, Inc.