TL;DR — Un borde es una propiedad de una arista, no de una celda. Un rango tiene ocho bordes direccionables: las cuatro aristas exteriores (
xlEdgeLeft,xlEdgeRight,xlEdgeTop,xlEdgeBottom), los dos juegos de líneas de cuadrícula interiores (xlInsideVertical,xlInsideHorizontal) y dos diagonales. La colecciónRange("A1:D10").Bordersa secas significa todas ellas, así que.Borders.LineStyle = xlContinuousencuadra cada celda del bloque, no solo el contorno. UsaRange("A1:D10").BorderAround LineStyle:=xlContinuous, Weight:=xlThincuando quieras solo el marco exterior.
Dim ws As Worksheet: Set ws = ThisWorkbook.Worksheets("Report")
' Contornea el bloque, luego una linea fina bajo la fila de encabezado - dos tareas distintas.
ws.Range("A1:D10").BorderAround LineStyle:=xlContinuous, Weight:=xlMedium
ws.Range("A1:D1").Borders(xlEdgeBottom).LineStyle = xlContinuous
Añadir bordes es una de las primeras cosas que la gente automatiza, y es también donde un pequeño
malentendido produce el resultado más desconcertante de todo el kit de formato: pediste «un borde» y
Excel dibujó una cuadrícula alrededor de cada celda. Esta guía se construye sobre una sola idea que
vuelve predecible todo lo demás: Borders es una colección de aristas, y tocar la colección toca
cada arista. En cuanto ves los bordes como algo por-arista, la confusión entre contorno y cuadrícula
desaparece.
Lo que aprenderás
- El modelo mental — un borde pertenece a una arista, y
Borderses el conjunto entero de ellas - La regla más importante —
.Bordersencuadra cada celda,.BorderArounddibuja solo el marco - Las tres propiedades que hacen visible una línea —
LineStyle,WeightyColor - Dirigir una arista cada vez con
xlEdgeBottom,xlInsideVerticaly las demás - Borrar los bordes limpiamente con
xlLineStyleNone - Por qué los bordes son decoración, no estructura — y a qué echar mano en su lugar
El modelo mental: un borde es una propiedad de una arista
Este es el hermano del grupo de apariencia — Font da estilo al texto,
Interior rellena por detrás, y los bordes dibujan las líneas alrededor.
Pero los bordes se diferencian de esos en algo importante: una celda no tiene «un borde», tiene hasta
ocho, y VBA alcanza cada uno a través de la colección Borders indexada por una constante
XlBordersIndex:
' Las ocho aristas direccionables de cualquier rango:
' xlEdgeLeft, xlEdgeRight, xlEdgeTop, xlEdgeBottom - los cuatro lados exteriores
' xlInsideVertical, xlInsideHorizontal - lineas de cuadricula ENTRE celdas
' xlDiagonalDown, xlDiagonalUp - de esquina a esquina
ws.Range("B2").Borders(xlEdgeBottom).LineStyle = xlContinuous ' solo el borde inferior de B2
Quédate con esa imagen — ocho aristas, cada una direccionable de forma independiente — y cada regla
posterior es una consecuencia de ella. Los bordes interiores solo existen cuando el rango abarca más
de una celda (una sola celda no tiene «entre medias»), que es exactamente por qué la misma línea de
código se comporta distinto en B2 que en B2:E20.
La regla más importante: .Borders es cada arista, .BorderAround es solo el marco
Aquí está la línea que pilla a todo el mundo. En un rango de varias celdas, fijar la colección se aplica a todas las aristas a la vez — los lados exteriores y las líneas de cuadrícula entre celdas:
' Encuadra CADA celda del bloque - contorno mas todas las lineas interiores.
ws.Range("A1:D10").Borders.LineStyle = xlContinuous
Eso rara vez es lo que la gente quiere decir cuando dice «ponle un borde». Si quieres un solo
rectángulo alrededor de todo el bloque y nada dentro, usa el método BorderAround, que solo toca
las cuatro aristas exteriores:
' Solo el marco exterior - sin lineas interiores.
ws.Range("A1:D10").BorderAround LineStyle:=xlContinuous, Weight:=xlThick
La distinción es el meollo del tema: .Borders = la cuadrícula, .BorderAround = el contorno. Si
de verdad quieres ambas cosas — un bloque encuadrado con líneas interiores más suaves — hazlo en dos
pasadas: fija .Borders.LineStyle para el interior, y luego BorderAround para un marco más grueso
encima. Echar mano de .Borders cuando querías .BorderAround es la razón número uno de que un
«borde único» salga como una jaula completa.
Las tres propiedades que hacen una línea: LineStyle, Weight, Color
Una arista de borde es invisible hasta que tiene un LineStyle. Esa es la propiedad que enciende la
línea; las otras dos la refinan. Como normalmente fijas las tres a la vez, With
lo mantiene legible:
With ws.Range("A1:D10").Borders(xlEdgeBottom)
.LineStyle = xlContinuous ' ENCIENDE la linea - sin esto no se ve nada
.Weight = xlMedium ' xlHairline, xlThin, xlMedium, xlThick
.Color = RGB(0, 32, 96) ' RGB de 24 bits, igual que Font.Color
End With
Tres cosas que conviene saber. LineStyle es el interruptor de encendido/apagado — xlContinuous,
xlDash, xlDot, xlDashDot, xlDouble, xlSlantDashDot, etc. — y fijarlo es lo que hace aparecer
el borde. Weight es una de cuatro constantes (xlHairline, xlThin, xlMedium, xlThick), no un
número de puntos. Y no toda pareja LineStyle/Weight es legal: xlHairline implica una línea
continua y fina, y xlDouble ignora Weight por completo — así que si un grosor parece no tener
efecto, es el estilo de línea el que lo anula. Para el color, usa .Color = RGB(r, g, b) (el mismo
espacio de 24 bits que Font.Color, tratado en VBA Font); evita .ColorIndex
salvo que estés igualando una paleta heredada.
Una arista cada vez
La mayoría de los bordes reales no son de «todo o nada». Una línea bajo un encabezado, un divisor entre dos secciones, un margen izquierdo grueso — cada uno es una sola arista:
' Una linea gruesa bajo el encabezado, un divisor ligero entre las columnas B y C.
ws.Range("A1:D1").Borders(xlEdgeBottom).Weight = xlThick
ws.Range("A1:D1").Borders(xlEdgeBottom).LineStyle = xlContinuous
ws.Range("C2:C20").Borders(xlEdgeLeft).LineStyle = xlDot
xlInsideVertical y xlInsideHorizontal te dan las líneas de cuadrícula entre celdas sin el marco
exterior — lo inverso de BorderAround. Dirige las aristas que quieras y deja el resto intactas; cada
Borders(index) es independiente, así que fijar la de abajo nunca altera la de arriba.
Borrar los bordes
Para quitar bordes, pon el estilo de línea a ninguno. En la colección lo borra todo; en un índice borra solo esa arista:
ws.Range("A1:D10").Borders.LineStyle = xlLineStyleNone ' quita todos los bordes del bloque
ws.Range("A1:D1").Borders(xlEdgeBottom).LineStyle = xlLineStyleNone ' quita solo la linea del encabezado
xlLineStyleNone y xlNone son intercambiables aquí. Ojo: borrar los bordes de un rango no toca
los bordes que Excel dibuja como parte de un estilo de Tabla o del Formato condicional — esos
pertenecen al objeto que los creó, no a la celda, así que si una línea se niega a desaparecer, busca
una Tabla o una regla de formato en vez de una llamada perdida a Borders.
Los bordes son decoración, no estructura
Vale la pena decirlo con claridad, porque ahorra rehacer trabajo: un borde es puramente visual. No
agrupa filas, no define un rango y es invisible para toda fórmula. Si dibujas bordes para que un
bloque parezca una tabla y poder referirte a él más tarde, conviértelo mejor en una Tabla de Excel
de verdad (ListObject) — obtienes el aspecto encuadrado y además un rango con nombre,
referencias estructuradas y bandas automáticas. Usa bordes dibujados a mano para los toques finales de
un informe que estás a punto de imprimir o exportar, no como forma de dar a los datos una figura que
tu código pueda leer. La figura tiene que vivir en los datos, como ocurre en
VBA Range; el borde es solo la pintura de encima.
Cómo ayuda ExcelMaster
Los bordes esconden más decisiones de las que parece: colección frente a BorderAround, cuál de las
ocho aristas querías de verdad, un Weight que un LineStyle anula sin avisar, y una línea que no se
borra porque una Tabla es su dueña. Cada giro equivocado es silencioso — una cuadrícula donde querías
un contorno, o ningún cambio en absoluto.
ExcelMaster te deja describir el
resultado en su lugar. Di «encuadra el bloque de resumen con un contorno grueso y una línea fina bajo
el encabezado», y usa BorderAround para el marco y Borders(xlEdgeBottom) para la línea — fijando
LineStyle primero para que la línea se vea de verdad, y eligiendo Weight y Color a juego. Te
quedas con el libro y con el código; te ahorras la pasada en la que .Borders enjauló cada celda que
solo querías contornear.
Preguntas frecuentes
¿Cómo añado un borde a un rango en Excel VBA?
Para un solo contorno alrededor de todo el rango, usa Range("A1:D10").BorderAround LineStyle:=xlContinuous, Weight:=xlThin — dibuja solo el marco exterior. Para una arista concreta,
fíjala en el índice de la colección, por ejemplo Range("A1:D1").Borders(xlEdgeBottom).LineStyle = xlContinuous. Fija siempre LineStyle (no solo Weight), porque el estilo de línea es lo que hace
visible un borde.
¿Por qué Range.Borders.LineStyle encuadra cada celda en vez de dibujar un solo contorno?
Porque Range.Borders es la colección entera de aristas — los cuatro lados exteriores y las líneas
de cuadrícula interiores entre celdas. Fijar LineStyle en la colección se aplica a todas ellas, así
que un rango de varias celdas recibe un borde alrededor de cada celda. Usa BorderAround para tocar
solo el marco exterior, o dirige aristas individuales como Borders(xlEdgeTop) para un lado cada vez.
¿Cuál es la diferencia entre Borders y BorderAround en VBA?
Borders(index) es una colección que indexas por arista (xlEdgeLeft, xlInsideVertical, etc.), y
fijar la colección a secas afecta a cada arista. BorderAround es un método que dibuja solo las
cuatro aristas exteriores del rango en una sola llamada, dejando en paz las líneas de cuadrícula
interiores. Usa BorderAround para un contorno y la colección Borders cuando necesites líneas
interiores o una sola arista.
¿Cómo quito los bordes de un rango en VBA?
Pon el estilo de línea a ninguno: Range("A1:D10").Borders.LineStyle = xlLineStyleNone borra cada
borde del bloque, y Range("A1:D1").Borders(xlEdgeBottom).LineStyle = xlLineStyleNone borra solo una
arista. Si un borde se niega a desaparecer, probablemente lo dibuja un estilo de Tabla de Excel o una
regla de Formato condicional, que son dueñas de sus propios bordes.
¿Qué valores de LineStyle y Weight puedo usar para los bordes en VBA?
LineStyle acepta xlContinuous, xlDash, xlDot, xlDashDot, xlDashDotDot, xlDouble,
xlSlantDashDot y xlLineStyleNone. Weight es una de cuatro constantes — xlHairline, xlThin,
xlMedium, xlThick — no un tamaño en puntos. Algunas combinaciones están restringidas: xlDouble
ignora Weight, así que si un grosor parece no tener efecto, el estilo de línea es la razón.
Probado en
Probado en: Excel 365 (Windows 11), VBA 7.1 — última verificación el 14/08/2026.
Guías relacionadas: VBA Merge Cells · VBA Color de celda · VBA Font · VBA With · VBA Range
