Formattazione condizionale in Excel VBA
Possiamo applicare la formattazione condizionale a una cella o a un intervallo di celle in Excel. Un formato condizionale è un formato che viene applicato solo a celle che soddisfano determinati criteri, ad esempio valori sopra un valore particolare, valori positivi o negativi o valori con una formula particolare, ecc. Questa formattazione condizionale può essere eseguita anche nella programmazione VBA di Excel utilizzando la " Raccolta delle condizioni di formato " nella macro / procedura.
La condizione di formato viene utilizzata per rappresentare un formato condizionale che può essere impostato chiamando un metodo che restituisce una variabile di quel tipo. Contiene tutti i formati condizionali per un singolo intervallo e può contenere solo tre condizioni di formato.
FormatConditions.Add / Modify / Delete viene utilizzato in VBA per aggiungere / modificare / eliminare oggetti FormatCondition alla raccolta. Ogni formato è rappresentato da un oggetto FormatCondition. FormatConditions è una proprietà dell'oggetto Range e Add ha i seguenti parametri con la sintassi seguente:
FormatConditions.Add (Tipo, Operatore, Formula1, Formula2)
Gli argomenti della sintassi della formula Aggiungi sono i seguenti:
- Tipo: obbligatorio, rappresenta se il formato condizionale è basato sul valore presente nella cella o in un'espressione
- Operatore: facoltativo, rappresenta l'operatore da utilizzare con un valore quando "Tipo" è basato sul valore della cella
- Formula1: facoltativo, rappresenta il valore o l'espressione associata al formato condizionale.
- Formula2: facoltativa, rappresenta il valore o l'espressione associata alla seconda parte del formato condizionale quando il parametro: "Operator" è "xlBetween" o "xlNotBetween"
FormatConditions.Modify ha anche la stessa sintassi di FormatConditions.Add.
Di seguito è riportato l'elenco di alcuni valori / enumerazioni che possono essere presi da alcuni parametri di "Aggiungi" / "Modifica":
Esempi di formattazione condizionale VBA
Di seguito sono riportati gli esempi di formattazione condizionale in excel vba.
Puoi scaricare questo modello di formattazione condizionale VBA qui - Modello di formattazione condizionale VBAEsempio 1
Supponiamo di avere un file Excel contenente il nome e i voti di alcuni studenti e desideriamo determinare / evidenziare i voti come grassetto e di colore blu che è maggiore di 80, e come grassetto e rosso a colori che è inferiore a 50. Vediamo i dati contenuti nel file:
Usiamo la funzione FormatConditions.Add come di seguito per ottenere ciò:
- Vai a Sviluppatore -> Visual Basic Editor:
- Fare clic con il pulsante destro del mouse sul nome della cartella di lavoro nel riquadro "Progetto-VBAProject "->" Inserisci "->" Modulo ".
- Ora scrivi il codice / procedura in questo modulo:
Codice:
Sub formatting () End Sub
- Definisci la variabile rng, condition1, condition2:
Codice:
Sub formatting () Dim rng As Range Dim condition1 As FormatCondition, condition2 As FormatCondition End Sub
- Imposta / correggi l'intervallo su cui si desidera la formattazione condizionale utilizzando la funzione 'Intervallo' VBA:
Codice:
Sub formatting () Dim rng As Range Dim condition1 As FormatCondition, condition2 As FormatCondition Set rng = Range ("B2", "B11") End Sub
- Elimina / cancella qualsiasi formattazione condizionale esistente (se presente) dall'intervallo, utilizzando "FormatConditions.Delete":
Codice:
Sub formatting () Dim rng As Range Dim condition1 As FormatCondition, condition2 As FormatCondition Set rng = Range ("B2", "B11") rng.FormatConditions.Delete End Sub
- Ora definisci e imposta i criteri per ogni formato condizionale, utilizzando 'FormatConditions.Add':
Codice:
Sub formatting () Dim rng As Range Dim condition1 As FormatCondition, condition2 As FormatCondition Set rng = Range ("B2", "B11") rng.FormatConditions.Delete Imposta condizione1 = rng.FormatConditions.Add (xlCellValue, xlGorgeous, "= 80 ") Imposta condizione2 = rng.FormatConditions.Add (xlCellValue, xlLess," = 50 ") End Sub
- Definisci e imposta il formato da applicare per ciascuna condizione
Copia e incolla questo codice nel tuo modulo di classe VBA.
Codice:
Sub formatting () 'Definizione delle variabili: Dim rng As Range Dim condition1 As FormatCondition, condition2 As FormatCondition' Correzione / impostazione dell'intervallo su cui si desidera la formattazione condizionale Set rng = Range ("B2", "B11") ' elimina / cancella qualsiasi formattazione condizionale esistente dall'intervallo rng.FormatConditions.Delete 'Definizione e impostazione dei criteri per ogni formato condizionale Set condition1 = rng.FormatConditions.Add (xlCellValue, xlGuesday, "= 80") Set condition2 = rng.FormatConditions. Aggiungi (xlCellValue, xlLess, "= 50") 'Definizione e impostazione del formato da applicare per ogni condizione With condition1 .Font.Color = vbBlue .Font.Bold = True End With With condition2 .Font.Color = vbRed .Font. Grassetto = True End With End Sub
Ora, quando eseguiamo questo codice utilizzando il tasto F5 o manualmente, vediamo che i segni inferiori a 50 vengono evidenziati in grassetto e rosso, mentre quelli maggiori di 80 vengono evidenziati in grassetto e blu come segue:
Nota: alcune delle proprietà per l'aspetto delle celle formattate che possono essere utilizzate con FormatCondition sono:Esempio n. 2
Diciamo che nell'esempio precedente abbiamo anche un'altra colonna che afferma che lo studente è un "Topper" se ottiene più di 80 punti, altrimenti viene scritto Pass / Fail. Ora desideriamo evidenziare i valori indicati come "Topper" in grassetto e blu. Vediamo i dati contenuti nel file:
In questo caso, il codice / procedura funzionerebbe come segue:
Codice:
Sub TextFormatting () End Sub
Definisci e imposta il formato da applicare per ciascuna condizione
Codice:
Sub TextFormatting () With Range ("c2: c11"). FormatConditions.Add (xlTextString, TextOperator: = xlContains, String: = "topper") With .Font .Bold = True .Color = vbBlue End With End With End Sub
Possiamo vedere nel codice sopra che vogliamo testare se l'intervallo: 'C2: C11 "contiene la stringa:" Topper ", quindi il parametro:" Operator "di" Format.Add "prende l'enumerazione:" xlContains ", per testare questa condizione nell'intervallo fisso (ad esempio C2: C11), quindi eseguire la formattazione condizionale richiesta (modifiche dei caratteri) su questo intervallo.
Ora, quando eseguiamo questo codice manualmente o premendo il tasto F5, vediamo che i valori delle celle con "Topper" vengono evidenziati in blu e in grassetto:
Nota: quindi, abbiamo visto nei due esempi precedenti come funziona il metodo "Aggiungi" in caso di criteri di valore di cella (stringa numerica o di testo).Di seguito sono riportate alcune altre istanze / criteri che possono essere utilizzati per testare e quindi applicare la formattazione condizionale VBA su:
- Formato per periodo di tempo
- Condizione media
- Condizione della scala dei colori
- IconSet condizione
- Stato della Databar
- Valori unici
- Valori duplicati
- Valori Top10
- Condizione percentile
- Condizione degli spazi vuoti, ecc.
Con diverse condizioni da testare, diversi valori / enumerazioni vengono presi dai parametri di "Aggiungi".
Cose da ricordare sulla formattazione condizionale VBA
- Il metodo "Aggiungi" con "FormatConditions" viene utilizzato per creare un nuovo formato condizionale, il metodo "Elimina" per eliminare qualsiasi formato condizionale e il metodo "Modifica" per modificare qualsiasi formato condizionale esistente.
- Il metodo "Aggiungi" con "Raccolta FormatConditions" non riesce se vengono creati più di tre formati condizionali per un singolo intervallo.
- To apply more than three conditional formats to a range using the ‘Add’ method, we can use ‘If’ or ‘select case’.
- If the ‘Add’ method has its ‘Type’ parameter as: ‘xlExpression’, then the parameter ‘Operator’ is ignored.
- The parameters: ‘Formula1’ and ‘Formula2’ in the ‘Add’ method can be a cell reference, constant value, string value, or even a formula.
- The parameter: ‘Formula2’ is used only when the parameter: ‘Operator’ is either ‘xlBetween’ or ‘xlNotBetween’, else it is ignored.
- To remove all the conditional formatting from any worksheet, we can use the ‘Delete’ method as follows:
Cells.FormatConditions.Delete