Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Impara Formattazione con VBA | Lavorare con i dati di Excel
Excel VBA per l'Automazione Aziendale

Formattazione con VBA

Scorri per mostrare il menu

Tutto ciò che puoi formattare manualmente in Excel, puoi formattarlo tramite codice.

Caratteri

With è una scorciatoia per riferirsi allo stesso oggetto più volte di seguito senza dover riscrivere il suo nome completo su ogni riga. With obj ... End With significa semplicemente che ogni riga all'interno di quel blocco che inizia con un punto (come .Property = X) è una scorciatoia per obj.Property = X — VBA inserisce automaticamente obj per ciascuna di esse. È solo una comodità per la leggibilità; non cambia il funzionamento del codice.

' Without With — obj repeated on every line
ws.Range("A1:I1").Font.Bold = True
ws.Range("A1:I1").Font.Size = 11
ws.Range("A1:I1").Font.Color = RGB(255, 255, 255)

' With With — the object is stated once, everything else is shorthand
With ws.Range("A1:I1").Font
    .Bold = True
    .Size = 11
    .Color = RGB(255, 255, 255)
    .Name = "Calibri"
End With

Entrambe le versioni fanno esattamente la stessa cosa — With serve solo a evitare di ripetere ws.Range("A1:I1").Font tre volte.

Colori

ws.Range("A1:I1").Interior.Color = RGB(24, 106, 60)   ' dark green header

Bordi

With ws.Range("A1:I6").Borders
    .LineStyle = xlContinuous
    .Weight = xlThin
    .Color = RGB(200, 200, 200)
End With

Allineamento

ws.Range("E2:E6").HorizontalAlignment = xlCenter
ws.Range("C2:C6").HorizontalAlignment = xlLeft

Basi della formattazione condizionale

VBA può applicare le stesse regole che si impostano tramite la barra multifunzione:

Dim rng As Range
Set rng = ws.Range("I2:I6")     ' Status column
 
rng.FormatConditions.Delete     ' clear any existing rules first
rng.FormatConditions.Add Type:=xlTextString, String:="Cancelled", _
    TextOperator:=xlContains
rng.FormatConditions(1).Interior.Color = RGB(255, 199, 206)
rng.FormatConditions(1).Font.Color = RGB(156, 0, 6)
Figura 3.4

Esegui questo codice e ogni ordine "Cancelled" verrà evidenziato automaticamente con una tonalità rossa — e, a differenza della formattazione manuale, la regola rimane attiva anche se il valore Status cambia successivamente.

Attività

  1. Grassetto per la riga di intestazione (A1:I1), riempimento verde scuro (RGB(24, 106, 60)) e carattere bianco (RGB(255, 255, 255)) — tutto tramite codice, non manualmente.
  2. Aggiunta di bordi sottili grigi (RGB(200, 200, 200)) attorno all'intera tabella utilizzando CurrentRegion.
  3. Aggiunta di una formattazione condizionale che evidenzia in giallo (Discount % >= 10) ogni ordine con RGB(255, 235, 156).
Suggerimento
expand arrow

1. Formattazione della riga di intestazione

  • Font.Bold, Interior.Color e Font.Color possono essere impostati sulla stessa area.
  • Il riempimento verde scuro richiede una terna RGB; il carattere bianco è il valore RGB più semplice.
  • Un blocco With...End With evita di ripetere ws.Range("A1:I1") tre volte.

2. Aggiunta di bordi con CurrentRegion

  • CurrentRegion su A1 seleziona l'intera tabella senza dover conoscere o impostare manualmente il numero di righe.
  • I bordi hanno tre proprietà da impostare insieme: LineStyle, Weight e Color — grigio sottile significa xlThin e un valore RGB grigio chiaro.

3. Formattazione condizionale per Discount % >= 10

  • Si tratta di un confronto numerico, non testuale, quindi il tipo di condizione è xlCellValue con xlGreaterEqual — diverso dall'esempio di testo “Cancelled” visto in precedenza nel capitolo.
  • La parte delicata: Discount % è memorizzato come decimale (10% = 0.1), quindi il valore di confronto in Formula1 deve essere scritto come "0.1", non "10".
  • È sempre necessario cancellare le formattazioni condizionali esistenti su quell'intervallo, altrimenti esecuzioni ripetute della macro sovrapporranno regole duplicate.
Soluzione
expand arrow
Sub FormatOrdersTable()
    Dim ws As Worksheet
    Set ws = ThisWorkbook.Worksheets("Orders")

    ' --- 1. Header row formatting ---
    With ws.Range("A1:I1")
        .Font.Bold = True
        .Interior.Color = RGB(24, 106, 60)
        .Font.Color = RGB(255, 255, 255)
    End With

    ' --- 2. Borders around the full table ---
    With ws.Range("A1").CurrentRegion.Borders
        .LineStyle = xlContinuous
        .Weight = xlThin
        .Color = RGB(200, 200, 200)
    End With

    ' --- 3. Conditional format for Discount % >= 10 ---
    Dim discountRange As Range
    Set discountRange = ws.Range("G2:G6")

    discountRange.FormatConditions.Delete
    discountRange.FormatConditions.Add Type:=xlCellValue, _
        Operator:=xlGreaterEqual, Formula1:="0.1"
    discountRange.FormatConditions(1).Interior.Color = RGB(255, 235, 156)
End Sub
Tutto è chiaro?

Come possiamo migliorarlo?

Grazie per i tuoi commenti!

Sezione 3. Capitolo 4

Chieda ad AI

expand

Chieda ad AI

ChatGPT

Chieda pure quello che desidera o provi una delle domande suggerite per iniziare la nostra conversazione

Formattazione con VBA

Tutto ciò che puoi formattare manualmente in Excel, puoi formattarlo tramite codice.

Caratteri

With è una scorciatoia per riferirsi allo stesso oggetto più volte di seguito senza dover riscrivere il suo nome completo su ogni riga. With obj ... End With significa semplicemente che ogni riga all'interno di quel blocco che inizia con un punto (come .Property = X) è una scorciatoia per obj.Property = X — VBA inserisce automaticamente obj per ciascuna di esse. È solo una comodità per la leggibilità; non cambia il funzionamento del codice.

' Without With — obj repeated on every line
ws.Range("A1:I1").Font.Bold = True
ws.Range("A1:I1").Font.Size = 11
ws.Range("A1:I1").Font.Color = RGB(255, 255, 255)

' With With — the object is stated once, everything else is shorthand
With ws.Range("A1:I1").Font
    .Bold = True
    .Size = 11
    .Color = RGB(255, 255, 255)
    .Name = "Calibri"
End With

Entrambe le versioni fanno esattamente la stessa cosa — With serve solo a evitare di ripetere ws.Range("A1:I1").Font tre volte.

Colori

ws.Range("A1:I1").Interior.Color = RGB(24, 106, 60)   ' dark green header

Bordi

With ws.Range("A1:I6").Borders
    .LineStyle = xlContinuous
    .Weight = xlThin
    .Color = RGB(200, 200, 200)
End With

Allineamento

ws.Range("E2:E6").HorizontalAlignment = xlCenter
ws.Range("C2:C6").HorizontalAlignment = xlLeft

Basi della formattazione condizionale

VBA può applicare le stesse regole che si impostano tramite la barra multifunzione:

Dim rng As Range
Set rng = ws.Range("I2:I6")     ' Status column
 
rng.FormatConditions.Delete     ' clear any existing rules first
rng.FormatConditions.Add Type:=xlTextString, String:="Cancelled", _
    TextOperator:=xlContains
rng.FormatConditions(1).Interior.Color = RGB(255, 199, 206)
rng.FormatConditions(1).Font.Color = RGB(156, 0, 6)
Figura 3.4

Esegui questo codice e ogni ordine "Cancelled" verrà evidenziato automaticamente con una tonalità rossa — e, a differenza della formattazione manuale, la regola rimane attiva anche se il valore Status cambia successivamente.

Attività

  1. Grassetto per la riga di intestazione (A1:I1), riempimento verde scuro (RGB(24, 106, 60)) e carattere bianco (RGB(255, 255, 255)) — tutto tramite codice, non manualmente.
  2. Aggiunta di bordi sottili grigi (RGB(200, 200, 200)) attorno all'intera tabella utilizzando CurrentRegion.
  3. Aggiunta di una formattazione condizionale che evidenzia in giallo (Discount % >= 10) ogni ordine con RGB(255, 235, 156).
Suggerimento
expand arrow

1. Formattazione della riga di intestazione

  • Font.Bold, Interior.Color e Font.Color possono essere impostati sulla stessa area.
  • Il riempimento verde scuro richiede una terna RGB; il carattere bianco è il valore RGB più semplice.
  • Un blocco With...End With evita di ripetere ws.Range("A1:I1") tre volte.

2. Aggiunta di bordi con CurrentRegion

  • CurrentRegion su A1 seleziona l'intera tabella senza dover conoscere o impostare manualmente il numero di righe.
  • I bordi hanno tre proprietà da impostare insieme: LineStyle, Weight e Color — grigio sottile significa xlThin e un valore RGB grigio chiaro.

3. Formattazione condizionale per Discount % >= 10

  • Si tratta di un confronto numerico, non testuale, quindi il tipo di condizione è xlCellValue con xlGreaterEqual — diverso dall'esempio di testo “Cancelled” visto in precedenza nel capitolo.
  • La parte delicata: Discount % è memorizzato come decimale (10% = 0.1), quindi il valore di confronto in Formula1 deve essere scritto come "0.1", non "10".
  • È sempre necessario cancellare le formattazioni condizionali esistenti su quell'intervallo, altrimenti esecuzioni ripetute della macro sovrapporranno regole duplicate.
Soluzione
expand arrow
Sub FormatOrdersTable()
    Dim ws As Worksheet
    Set ws = ThisWorkbook.Worksheets("Orders")

    ' --- 1. Header row formatting ---
    With ws.Range("A1:I1")
        .Font.Bold = True
        .Interior.Color = RGB(24, 106, 60)
        .Font.Color = RGB(255, 255, 255)
    End With

    ' --- 2. Borders around the full table ---
    With ws.Range("A1").CurrentRegion.Borders
        .LineStyle = xlContinuous
        .Weight = xlThin
        .Color = RGB(200, 200, 200)
    End With

    ' --- 3. Conditional format for Discount % >= 10 ---
    Dim discountRange As Range
    Set discountRange = ws.Range("G2:G6")

    discountRange.FormatConditions.Delete
    discountRange.FormatConditions.Add Type:=xlCellValue, _
        Operator:=xlGreaterEqual, Formula1:="0.1"
    discountRange.FormatConditions(1).Interior.Color = RGB(255, 235, 156)
End Sub
Tutto è chiaro?

Come possiamo migliorarlo?

Grazie per i tuoi commenti!

Sezione 3. Capitolo 4
some-alt