Màu âm dương và âm bản trong biểu đồ (Microsoft Excel)
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: