Formattazione condizionale in Excel 2007 e VBA in Excel 2003
La formattazione condizionale (nella scheda Home) rappresenta una grande novità di Excel 2007 poichè permette di assegnare uno sfondo colorato alle celle in base al valore contenuto, secondo criteri diversi.
Consideriamo un elenco di dati come quello rappresentato nella figura seguente e vediamo alcuni esempi.

1) Set di icone
Accanto al valore numerico viene visualizzato un simbolo (freccia, pallino, ecc.) con colore e dimensione che intuitivamente ne indicano il valore nella scala numerica costituita dai calori dell'intervallo stesso:

2) Barre dei dati
Lo sfondo della cella viene colorato con un unico colore di larghezza proporzionale al valore contenuto:

3) Regole Primi/Ultimi
Con questo tipo di formattazione si ottiene la colorazione delle celle che contengono i 10 valori numerici più elevati. E' possibile stabilire il colore dello sfondo e modificare il numero di valori da evidenziare (i primi 2, i primi 4, ecc)


4) Scala colori
Lo sfondo delle celle viene colorato con gradazioni di uno o più colori che ne indicano il valore: ad esempio, rosso più scuro per i numeri più bassi e giallo più chiaro per i numeri pù alti, passando dalle gradazioni intermedie:

Tali formattazioni si possono sovrapporre (senza esagerare, naturalmente!) e, se avete esagerato con le sovrapposizioni, è possibile fare piazza pulita di qualsiasi regola di formattazione condizionale (o solo di alcune), mediante la funzionalità "Cancella regole", visibile nell'immagine precedente.
Prendendo spunto da un post di Mighell di u pò di tempo fa, Rappresentazione grafica dei dati in Excel, ho pensato ad una possibilità analoga per gli utenti di Excel 2003, che non dispongono di tali meraviglie.
Allora ho preparato una routine che, in base ai valori contenuti nell'intervallo, assegna le (poche!!!) sfumature di colori disponibili (avete guardato le sfumature disponibili nella versione 2007!?!?!?!).
La routine è la seguente:
Sub ColoraPercentuale()
Dim myRg As Range
Dim mycell As Range
Dim maxValue As Double
Dim minValue As Double
Dim incr As Double
'individua la regione corrente a partire dalla cella attiva
Set myRg = ActiveCell.CurrentRegion
'stabilisce il valore minimo e massimo tra i valori contenuti nell'intervallo
maxValue = WorksheetFunction.Max(myRg)
minValue = WorksheetFunction.Min(myRg)
'stabilisce l'incremente pari ad un sesto del range di valori per
'assegnare le 6 sfumature che vanno dal rosso al giallo chiaro
incr = (maxValue - minValue) / 6
For Each mycell In myRg.Cells
Select Case mycell.Value
Case minValue To minValue + incr
mycell.Interior.ColorIndex = 3
Case minValue + incr To minValue + incr * 2
mycell.Interior.ColorIndex = 46
Case minValue + incr * 2 To minValue + incr * 3
mycell.Interior.ColorIndex = 45
Case minValue + incr * 3 To minValue + incr * 4
mycell.Interior.ColorIndex = 44
Case minValue + ncr * 4 To minValue + incr * 5
mycell.Interior.ColorIndex = 6
Case minValue + incr * 5 To maxValue
mycell.Interior.ColorIndex = 36
End Select
Next mycell
End Sub
Ho predisposto, sulla barra di formattazione, un comando personalizzato associato alla routine e, dopo aver posizionato il cursore in una cella dell'intervallo, ecco il risultato:

Certo, non è esattamente come la versione 2007, i colori non si aggiornano al variare dei dati (anche se si può pensare di farlo inserendo la routine sul ricalcolo del foglio e, se qualcuno è interessato, non deve fare altro che scrivere un commento al riguardo).
Ma, si sa, nella vita bisogna sapersi accontentare e il risultato non è poi così male, no?