Меррил спросил, есть ли способ создать линейную диаграмму, чтобы, когда линия представляла отрицательное значение, цвет линии изменялся в точке, когда он становился отрицательным. Например, в определенной серии данных, если линия представляет положительные значения, она будет синей, но когда линия представляет отрицательные значения, она изменится на красный цвет.

К сожалению, в Excel нет простого способа сделать это. Однако есть несколько обходных путей, которые вы можете попробовать. Первый — использовать макрос для изменения цвета линий диаграммы, представляющих отрицательные значения. Следующий макрос является примером такого подхода:

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

Когда вы выбираете диаграмму и затем запускаете макрос PosNegLine, он просматривает диаграмму и для сегментов линии между отрицательными значениями точек данных меняет цвет линии на красный. Для сегментов линии, соединяющих положительные точки данных, устанавливается зеленый цвет линии.

Проблема с этим решением в том, что оно дает только приближение; он работает только с линиями, соединяющими две точки данных, и может либо изменить весь сегмент линии, либо нет. Если начальная точка данных положительна, а конечная точка данных отрицательна, она не может изменить цвет линии прямо при переходе в отрицательные значения.

Другой подход — отформатировать точки данных в разные цвета или формы в зависимости от того, положительные они или отрицательные. Способ достижения этой цели подробно описан на веб-сайте Джона Пелтье, расположенном здесь:

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

_Примечание: _

Если вы хотите узнать, как использовать макросы, описанные на этой странице (или на любой другой странице на сайтах ExcelTips), я подготовил специальную страницу, содержащую полезную информацию.

link: / excelribbon-ExcelTipsMacros [Щелкните здесь, чтобы открыть эту специальную страницу в новой вкладке браузера].

ExcelTips — ваш источник экономичного обучения Microsoft Excel.

Этот совет (1999 г.) применим к Microsoft Excel 97, 2000, 2002 и 2003. Вы можете найти версию этого совета для ленточного интерфейса Excel (Excel 2007 и более поздних версий) здесь:

link: / excelribbon-Positive_and_Negative_Colors_in_a_Chart [Положительные и отрицательные цвета в диаграмме].