Como poner bordes a celdas con macro para separar valores

Tengo varias hojas en un mismo libro con listados y me gustaría encontrar una macro que me pusiese una línea gorda tras cada valor diferente según la columna que yo le marque. Me explico: Si tenemos por ejemplo una lista con nombres de perros, color de pelo, ojos, tamaño, raza etc. Necesito que de una raza a otra (ya que elijo raza como separador) haya una línea negra de separación visual. ¿Es esto posible? Para hacerlo en un mismo libro con todas las hojas.

2 respuestas

Respuesta
1

Esta macro revisa de la fila 1 hasta la ultima fila con datos en la columna A, en la macro omití si es mayúsculas o minúsculas porque agregue "LCASE" para pasar todo a minúscula ... prueba la macro y me dices que te parecido

Sub LineaG()
uFila = Range("A" & Rows.Count).End(xlUp).Row
For x = 1 To uFila
    y = x + 1
    If Cells(y, 1) = "" Then Exit Sub
    If LCase(Cells(x, 1)) <> LCase(Cells(y, 1)) Then
        With Rows(x)
            .Borders(xlBottom).LineStyle = xlContinuous
            .Borders(xlBottom).Weight = xlThick
        End With
    End If
Next x
End Sub

Me pinta todas las líneas inferiores, sin distinción. Lo que necesitaría es que hiciese la separación de cambio de valor  cuando la hubiese según una columna determinada. 

Pinta todos los bordes inferiores si el dato es diferente al de arriba...

Ósea es un for que recorre toda la columna A fila por fila

Ejemplo si A1 es igual a A2 entonces pasa a la siguiente fila, si A2 es diferente a A3 entonces pinta el borde negro entre A2 y A3 y así hasta llegar al último dato en Columna A

¿No era eso lo que querías hacer? Si quieres que pinte cada Columna de diferente color tienes que aplicar la macro a cada columna, ósea repetirla por la cantidad de columnas que uses y hacer el for por celda y no por fila

Disculpa, no la había ejecutado bien. Muchísimas gracias. Y si quiero que se aplique a varias hojas o a todo el libro ¿qué debería poner?

Aquí la modifique un poco para que se ejecute desde la hoja1 hasta la ultima hoja

Sub LineaG()
'
'Buscamos el numero de la ultima hoja
Nhojas = Sheets.Count
'
'Deshabilitamos el Scren para evitar el pantallazo al cambiar de hoja
Application.ScreenUpdating = False
'
'Realizamos un For desde la Hoja1 hasta la ultima hoja
For i = 1 To Nhojas
    Sheets(i).Select
    uFila = Range("A" & Rows.Count).End(xlUp).Row
    '    
    'Realizamos un For sobre la hoja activa buscando diferencias de contenido en filas
    For x = 1 To uFila
        y = x + 1
        If Cells(y, 1) = "" Then GoTo OtraHoja
        If LCase(Cells(x, 1)) <> LCase(Cells(y, 1)) Then
            With Rows(x)
                .Borders(xlBottom).LineStyle = xlContinuous
                .Borders(xlBottom).Weight = xlThick
            End With
        End If
    Next x
OtraHoja:
Next i
'
'Habilitamos el Screen nuevamente
Application.ScreenUpdating = True
'
'Agregamos un mensaje de confirmación de que el trabajo a concluido.
MsgBox " El recorrido desde la hoja (" & Hoja1.Name & ") hasta la hoja (" & Sheets(Sheets.Count).Name & ") a concluido.", vbInformation, "Informacion para el usuario"
End Sub
Respuesta

[Hola Patricia.

Te pregunto. ¿Y si lo separas por color? Quizás sea más cómodo para visualizar las diferentes razas. Eso lo puedes hacer con formato condicional.

Es que los colores los uso para clasificar de otra manera.

Prueba con esta opción. Tienes que ponerla en un módulo, aunque también en un botón. Recuerda modificar el rango que quieres y el número de hoja.

Sub BordeInferior()
Worksheets("Hoja1").Range("A2:D2").Select 
With Selection.Borders(xlEdgeBottom)
    .LineStyle = xlContinuous
    .ColorIndex = 3
    .Weight = xlThick
End With
End Sub

Salu2 Carlos Arrocha

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas