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: