Colorare celle se valore..... (aiuto col registratore di macro)

Ultima modifica: 21-06-2016

 

Questa che presento potrebbe essere la nostra prima Macro. Per crearla ci faremo aiutare dal Registratore di macro. Useremo Il Registratore di macro per imparare le proprietà da usare per colorare le celle

Potrebbe essere che dobbiamo risolvere questo semplice problema.

 

A B C D E F G H I J
1 17 41 71 78 5 16 82 74 48 90
2 84 46 34 87 70 5 70 75 17 88
3 72 66 82 80 8 89 85 53 77 32
4 13 26 2 30 9 12 65 74 9 86
5 89 4 52 28 64 59 57 69 75 13
6 75 30 72 43 34 29 25 89 29 28
7 7 46 21 38 37 68 90 76 26 90
8 79 51 22 85 78 41 27 75 22 42
9 15 80 37 14 59 83 1 46 40 22
10 15 80 90 72 14 29 70 46 15 3

Data questa tabella vogliamo che:

  • le celle che contrngono valori da 10 a 19 siano colorate di rosso
  • le celle che contengono valori da 20 a 29 siano colorate di verde
  • le celle che contendono valori da 30 a 39 siano colorate di blu
  • tutte le altre saranno colorate di giallo.

Ovviamente le intestazioni di riga e di colonna dovranno rimanere invariate.

 

Creazione della macro

Nella macro che scriveremo ci saranno delle operazioni preliminari:

  1. determiniamo il numero di righe e di colonne della tabella al netto delle intestazioni. La Proprietà CurrentRegion farà sì che saranno prese in considerazione tutte le righe e le colonne dell'intera tabella.
With Range("A1").CurrentRegion
Righe = .Rows.Count - 1 ' attenzione al punto messo davanti a Rows e a Columns
Colonne = .Columns.Count - 1
............................
End With
  1. denominare il nostro intervallo rendendolo portandolo alle dimensioni di righe e colonne precedentemente rilevate. Nella istruzione che usiamo per determinare l'intervallo usiamo:
With Range("A1").CurrentRegion
Righe = .Rows.Count - 1
Colonne = .Columns.Count - 1
Set Intervallo = .Offset(1, 1).Resize(Righe, Colonne) ' attenzione al punto messo davanti a Offset e a Resize
End With

Compiuta questa operazione possiamo chiedere l'aiuto al Registratore di macro per conoscere:

il metodo e le proprietà da usare per colorare una cella

il codice del colore che desideriamo.

Per attivare il registratore di macro possiamo usare uno dei seguenti metodi. Andati sul foglio di lavoro:

dal menù strumenti scegliemo Macro ---> registra nuova macro

col clik destro del mouse su una delle barre degli strumenti scegliere la barra Vsual Basic e da questa cliccare sul pulsante Registra macro

Fatta una delle scelte viene fuori questa finestra nella quale possiamo senz'altro cliccare su OK

compiamo sul foglio le operazioni che vogliamo

interrompiamo la registrazione cliccando sul pulsante Interrompi registrazione della nuova barra che nel frattempo era venuta fuori

 

La registrazione della nuova macro da implementare nella nostra routine

Abbiamo detto sopra che vogliamo colorare le nostre celle, a seconda delle circostanze, usando i colori: rosso, verde, blu, giallo.

Quindi attiviamo il registratore ed iniziamo a colorare le celle coi colori desiderati. Alla fine togliamo anche i colori perchè nella nostra routine ci servirà anche questo.

Finito di compiere queste azioni interrompiamo il registratore.

Andiamo in VBA (ALT + F11) e controlliamo quel che il nostro registratore ha scritto.

Sub Macro3()
'
' Macro3 Macro
' Macro registrata il 13/10/2008 da Mike
'

'

With Selection.Interior
.ColorIndex = 3
.Pattern = xlSolid
End With
Range("O8").Select
With Selection.Interior
.ColorIndex = 43
.Pattern = xlSolid
End With
Range("O10").Select
With Selection.Interior
.ColorIndex = 42
.Pattern = xlSolid
End With
Range("O12").Select
With Selection.Interior
.ColorIndex = 36
.Pattern = xlSolid
End With
Selection.Interior.ColorIndex = xlNone
End Sub

Ora sappiamo queste cose:

per colorare una cella dobbiamo usare la Proprietà Interior seguito dalla Proprietà ColorIndex a cui assegnare uno dei valori relativi ai colori (costanti di ColorIndex):

Nel nostro esempio:

3 per il rosso

43 per il verde

42 per il blu

36 per il giallo

xlNone per togliere qualsiasi colore

Di tutte le istruzioni a noi servirà solo questa:

Selection.Interior.ColorIndex = costante

Al posto si Selection useremo il riferimento alle singole celle come vedremo qui di segioto.

 

Quindi possiamo continuare a scrivere la nostra routine concludendo il nostro lavoro.

Nelle nuove istruzioni ne vediamo una che in questo contesto è il cuore della routine:

Dec = Int(Intervallo(R, C) / 10)

Con questa istruzione viene diviso per 10 il valore che si incontra in Intervallo(R, C) e dal risultato viene presa la sola parte intera. Questo valore servirà poi per determinare il colore della cella.

Sub coloraIntervallo()
Dim Righe, Colonne, R, C, Dec
Dim Intervallo As Range
With Range("A1").CurrentRegion
Righe = .Rows.Count - 1
Colonne = .Columns.Count - 1
Set Intervallo = .Offset(1, 1).Resize(Righe, Colonne)
End With

Intervallo.Interior.ColorIndex = xlNone ' questo per togliere eventuali colori già presenti nella tabella
For R = 1 To Righe
For C = 1 To Colonne
Dec = Int(Intervallo(R, C) / 10)
If Dec = 1 Then
Intervallo(R, C).Interior.ColorIndex = 3 ' rosso
ElseIf Dec = 2 Then
Intervallo(R, C).Interior.ColorIndex = 43 ' verde
ElseIf Dec = 3 Then
Intervallo(R, C).Interior.ColorIndex = 42 ' blu
Else
Intervallo(R, C).Interior.ColorIndex = 36 ' giallo
End If
Next
Next
End Sub

Mandando in esecuzione questa routine, con una tabella come quella visualizzata all'inizio avremo questa situazione dove: