Merril hỏi liệu có cách nào để tạo biểu đồ đường để khi một đường biểu diễn một giá trị âm, thì màu của đường đó sẽ thay đổi tại điểm khi nó chuyển sang âm. Ví dụ: trong một chuỗi dữ liệu cụ thể, miễn là dòng biểu thị các giá trị dương, nó sẽ có màu xanh lam, nhưng khi dòng biểu thị các giá trị âm, nó sẽ chuyển thành màu đỏ.

Thật không may, không có cách nào để dễ dàng thực hiện việc này trong Excel. Tuy nhiên, có một số cách giải quyết bạn có thể thử. Đầu tiên là sử dụng macro để thay đổi màu đường của các đường biểu đồ đại diện cho các giá trị âm. Macro sau đây là một ví dụ về cách tiếp cận như vậy:

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

Khi bạn chọn một biểu đồ và sau đó chạy macro PosNegLine, nó sẽ nhìn qua biểu đồ và đối với các đoạn đường thẳng giữa các giá trị điểm dữ liệu âm, sẽ thay đổi màu đường thành màu đỏ. Đối với các đoạn đường kết nối các điểm dữ liệu tích cực, màu đường được đặt thành màu xanh lục.

Vấn đề với giải pháp này là nó chỉ cung cấp một giá trị gần đúng; nó chỉ hoạt động với các đường nối hai điểm dữ liệu và nó có thể thay đổi toàn bộ đoạn thẳng hoặc không. Nếu điểm dữ liệu đầu là dương và điểm dữ liệu kết thúc là âm, nó không thể thay đổi màu của một đường ngay khi nó chuyển sang các giá trị âm.

Một cách tiếp cận khác là định dạng các điểm dữ liệu dưới dạng các màu sắc hoặc hình dạng khác nhau, dựa trên việc chúng là tích cực hay tiêu cực. Cách thực hiện điều này được trình bày chi tiết trên trang web của Jon Peltier, nằm ở đây:

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

_Lưu ý: _

Nếu bạn muốn biết cách sử dụng các macro được mô tả trên trang này (hoặc trên bất kỳ trang nào khác trên trang ExcelTips), tôi đã chuẩn bị một trang đặc biệt bao gồm thông tin hữu ích.

ExcelTips là nguồn của bạn để đào tạo Microsoft Excel hiệu quả về chi phí.

Mẹo này (1999) áp dụng cho Microsoft Excel 97, 2000, 2002 và 2003. Bạn có thể tìm thấy phiên bản của mẹo này cho giao diện ribbon của Excel (Excel 2007 trở lên) tại đây: