Положительные и отрицательные цвета на диаграмме (Microsoft Excel)
Меррил спросил, есть ли способ создать линейную диаграмму, чтобы, когда линия представляла отрицательное значение, цвет линии изменялся в точке, когда он становился отрицательным. Например, в определенной серии данных, если линия представляет положительные значения, она будет синей, но когда линия представляет отрицательные значения, она изменится на красный цвет.
К сожалению, в 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 [Положительные и отрицательные цвета в диаграмме]
.