Colori positivi e negativi in un grafico (Microsoft Excel)
Merril ha chiesto se c’era un modo per creare un grafico a linee in modo che quando una linea rappresentava un valore negativo, il colore della linea cambiasse nel punto in cui diventava negativo. Ad esempio, in una particolare serie di dati, fintanto che la linea rappresentava valori positivi, sarebbe stata blu, ma quando la linea rappresentava valori negativi, sarebbe diventata rossa.
Sfortunatamente non c’è modo di farlo facilmente in Excel. Esistono, tuttavia, un paio di soluzioni alternative che puoi provare. Il primo consiste nell’usare una macro per modificare i colori delle linee del grafico che rappresentano valori negativi. La seguente macro è un esempio di tale approccio:
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
Quando si seleziona un grafico e quindi si esegue la macro PosNegLine, esso esamina il grafico e, per i segmenti di linea tra valori di punti dati negativi, cambia il colore della linea in rosso. Per i segmenti di linea che collegano punti dati positivi, il colore della linea è impostato su verde.
Il problema con questa soluzione è che fornisce solo un’approssimazione; funziona solo con linee che collegano due punti dati e può modificare o meno l’intero segmento di linea. Se il punto dati iniziale è positivo e il punto dati finale è negativo, non può cambiare il colore di una linea a destra mentre passa a valori negativi.
Un altro approccio consiste nel formattare i punti dati come colori o forme diversi, a seconda che siano positivi o negativi. Un modo per ottenere ciò è descritto in dettaglio nel sito Web di Jon Peltier, che si trova qui:
http://www.peltiertech.com/Excel/Charts/ConditionalChart1.html
_Nota: _
Se desideri sapere come utilizzare le macro descritte in questa pagina (o in qualsiasi altra pagina dei siti ExcelTips), ho preparato una pagina speciale che include informazioni utili.
ExcelTips è la tua fonte di formazione economica su Microsoft Excel.
Questo suggerimento (1999) si applica a Microsoft Excel 97, 2000, 2002 e 2003. Puoi trovare una versione di questo suggerimento per l’interfaccia a nastro di Excel (Excel 2007 e versioni successive) qui: