Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Aprende Formateo con VBA | Trabajando con datos de Excel
Excel VBA para Automatización Empresarial

Formateo con VBA

Desliza para mostrar el menú

Todo lo que puedes formatear manualmente en Excel, puedes formatearlo desde el código.

Fuentes

With es una abreviatura para referirse al mismo objeto varias veces seguidas sin tener que escribir su nombre completo en cada línea. With obj ... End With simplemente significa que cada línea dentro de ese bloque que comienza con un punto (como .Property = X) es una abreviatura de obj.Property = X — VBA completa automáticamente obj en cada una. Es solo una conveniencia para la legibilidad; no cambia lo que hace el código.

' 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

Ambas versiones hacen exactamente lo mismo — With solo evita repetir ws.Range("A1:I1").Font tres veces.

Colores

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

Bordes

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

Alineación

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

Conceptos básicos de formato condicional

VBA puede aplicar las mismas reglas que se crean a través de la cinta de opciones:

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

Ejecuta esto y cada pedido "Cancelled" se resaltará automáticamente con un tono rojo; a diferencia del formato manual, la regla permanece activa si el valor de Status cambia posteriormente.

Tarea

  1. Negrita para la fila de encabezado (A1:I1), relleno verde oscuro (RGB(24, 106, 60)) y fuente blanca (RGB(255, 255, 255)) — todo mediante código, no manualmente.
  2. Bordes finos grises (RGB(200, 200, 200)) alrededor de toda la tabla usando CurrentRegion.
  3. Formato condicional que resalte en amarillo (Discount % >= 10) cualquier pedido con RGB(255, 235, 156).
Pista
expand arrow

1. Formato de la fila de encabezado

  • Font.Bold, Interior.Color y Font.Color pueden establecerse en el mismo rango.
  • El relleno verde oscuro requiere un triplete RGB; la fuente blanca es el valor RGB más sencillo.
  • Un bloque With...End With evita repetir ws.Range("A1:I1") tres veces.

2. Agregar bordes con CurrentRegion

  • CurrentRegion en A1 selecciona toda la tabla sin necesidad de saber o codificar cuántas filas existen.
  • Los bordes tienen tres propiedades que se configuran juntas: LineStyle, Weight y Color — gris fino significa xlThin y un valor RGB gris claro.

3. Formato condicional para Discount % >= 10

  • Es una comparación numérica, no de texto, por lo que el tipo de condición es xlCellValue con xlGreaterEqual — diferente al ejemplo de texto “Cancelled” mostrado antes en el capítulo.
  • El detalle: Discount % se almacena como decimal (10% = 0.1), así que el valor de comparación en Formula1 debe escribirse como "0.1", no "10".
  • Siempre borra los formatos condicionales existentes en ese rango primero, o las ejecuciones repetidas de la macro acumularán reglas duplicadas.
Solución
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
¿Todo estuvo claro?

¿Cómo podemos mejorarlo?

¡Gracias por tus comentarios!

Sección 3. Capítulo 4

Pregunte a AI

expand

Pregunte a AI

ChatGPT

Pregunte lo que quiera o pruebe una de las preguntas sugeridas para comenzar nuestra charla

Formateo con VBA

Todo lo que puedes formatear manualmente en Excel, puedes formatearlo desde el código.

Fuentes

With es una abreviatura para referirse al mismo objeto varias veces seguidas sin tener que escribir su nombre completo en cada línea. With obj ... End With simplemente significa que cada línea dentro de ese bloque que comienza con un punto (como .Property = X) es una abreviatura de obj.Property = X — VBA completa automáticamente obj en cada una. Es solo una conveniencia para la legibilidad; no cambia lo que hace el código.

' 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

Ambas versiones hacen exactamente lo mismo — With solo evita repetir ws.Range("A1:I1").Font tres veces.

Colores

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

Bordes

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

Alineación

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

Conceptos básicos de formato condicional

VBA puede aplicar las mismas reglas que se crean a través de la cinta de opciones:

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

Ejecuta esto y cada pedido "Cancelled" se resaltará automáticamente con un tono rojo; a diferencia del formato manual, la regla permanece activa si el valor de Status cambia posteriormente.

Tarea

  1. Negrita para la fila de encabezado (A1:I1), relleno verde oscuro (RGB(24, 106, 60)) y fuente blanca (RGB(255, 255, 255)) — todo mediante código, no manualmente.
  2. Bordes finos grises (RGB(200, 200, 200)) alrededor de toda la tabla usando CurrentRegion.
  3. Formato condicional que resalte en amarillo (Discount % >= 10) cualquier pedido con RGB(255, 235, 156).
Pista
expand arrow

1. Formato de la fila de encabezado

  • Font.Bold, Interior.Color y Font.Color pueden establecerse en el mismo rango.
  • El relleno verde oscuro requiere un triplete RGB; la fuente blanca es el valor RGB más sencillo.
  • Un bloque With...End With evita repetir ws.Range("A1:I1") tres veces.

2. Agregar bordes con CurrentRegion

  • CurrentRegion en A1 selecciona toda la tabla sin necesidad de saber o codificar cuántas filas existen.
  • Los bordes tienen tres propiedades que se configuran juntas: LineStyle, Weight y Color — gris fino significa xlThin y un valor RGB gris claro.

3. Formato condicional para Discount % >= 10

  • Es una comparación numérica, no de texto, por lo que el tipo de condición es xlCellValue con xlGreaterEqual — diferente al ejemplo de texto “Cancelled” mostrado antes en el capítulo.
  • El detalle: Discount % se almacena como decimal (10% = 0.1), así que el valor de comparación en Formula1 debe escribirse como "0.1", no "10".
  • Siempre borra los formatos condicionales existentes en ese rango primero, o las ejecuciones repetidas de la macro acumularán reglas duplicadas.
Solución
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
¿Todo estuvo claro?

¿Cómo podemos mejorarlo?

¡Gracias por tus comentarios!

Sección 3. Capítulo 4
some-alt