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)
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
- 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. - Bordes finos grises (
RGB(200, 200, 200)) alrededor de toda la tabla usandoCurrentRegion. - Formato condicional que resalte en amarillo (
Discount % >= 10) cualquier pedido conRGB(255, 235, 156).
1. Formato de la fila de encabezado
Font.Bold,Interior.ColoryFont.Colorpueden 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 Withevita repetirws.Range("A1:I1")tres veces.
2. Agregar bordes con CurrentRegion
CurrentRegionen 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,WeightyColor— gris fino significaxlThiny 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.
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
¡Gracias por tus comentarios!
Pregunte a AI
Pregunte a AI
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)
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
- 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. - Bordes finos grises (
RGB(200, 200, 200)) alrededor de toda la tabla usandoCurrentRegion. - Formato condicional que resalte en amarillo (
Discount % >= 10) cualquier pedido conRGB(255, 235, 156).
1. Formato de la fila de encabezado
Font.Bold,Interior.ColoryFont.Colorpueden 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 Withevita repetirws.Range("A1:I1")tres veces.
2. Agregar bordes con CurrentRegion
CurrentRegionen 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,WeightyColor— gris fino significaxlThiny 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.
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
¡Gracias por tus comentarios!