Formattazione condizionale VBA - Applica il formato condizionale utilizzando VBA Excel

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 al di sopra di un determinato valore, valori positivi o negativi o valori con una particolare formula, 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 aggiungi 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: opzionale, 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.

Esempio 1

Supponiamo di avere un file Excel contenente il nome e i voti di alcuni studenti e desideriamo determinare / evidenziare i segni 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 FormatConditions.Aggiungi la funzione 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() 'Definining the variables: Dim rng As Range Dim condition1 As FormatCondition, condition2 As FormatCondition 'Fixing/Setting the range on which conditional formatting is to be desired Set rng = Range("B2", "B11") 'To delete/clear any existing conditional formatting from the range rng.FormatConditions.Delete 'Defining and setting the criteria for each conditional format Set condition1 = rng.FormatConditions.Add(xlCellValue, xlGreater, "=80") Set condition2 = rng.FormatConditions.Add(xlCellValue, xlLess, "=50") 'Defining and setting the format to be applied for each condition With condition1 .Font.Color = vbBlue .Font.Bold = True End With With condition2 .Font.Color = vbRed .Font.Bold = 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 sopra abbiamo anche un'altra colonna che afferma che lo studente è un "Topper" se ottiene più di 80 punti, altrimenti passa / fallisce scritto contro di loro. 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 precedente che desideriamo verificare se l'intervallo: "C2: C11" contiene la stringa: "Topper", quindi il parametro: "Onamestor" di "Format.Add" accetta l'enumerazione: "Xcontains" a 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).

Below are some other instances/criteria that can be used to test and thus apply VBA conditional formatting on:

  • Format by Time Period
  • Average condition
  • Colour Scale condition
  • IconSet condition
  • Databar condition
  • Unique Values
  • Duplicate Values
  • Top10 values
  • Percentile Condition
  • Blanks Condition, etc.

With different conditions to be tested, different values/enumeration are taken by parameters of ‘Add.’

Things to Remember About VBA Conditional Formatting

  • ‘Add’ method with ‘FormatConditions’ is used to create a new conditional format, ’Delete’ method to delete any conditional format, and ‘Modify’ method to alter any existing conditional format.
  • The ‘Add’ method with ‘FormatConditions Collection’ fails if more than three conditional formats are created for a single range.
  • Per applicare più di tre formati condizionali a un intervallo utilizzando il metodo "Aggiungi", possiamo utilizzare "Se" o "Seleziona maiuscole e minuscole".
  • Se il metodo "Aggiungi" ha il parametro "Tipo" come: "xlExpression", il parametro "Operatore" viene ignorato.
  • I parametri: "Formula1" e "Formula2" nel metodo "Aggiungi" possono essere un riferimento di cella, un valore costante, un valore stringa o anche una formula.
  • Il parametro: "Formula2" viene utilizzato solo quando il parametro: "Operator" è "xlBetween" o "xlNotBetween", altrimenti viene ignorato.
  • Per rimuovere tutta la formattazione condizionale da qualsiasi foglio di lavoro, possiamo utilizzare il metodo "Elimina" come segue:
Cells.FormatConditions.Delete

Articoli interessanti...