Buscar Celda Vacía y Aplicar formato a un rango según indice encontrado

Necesito una macro en VB que sea capaz de buscar una celda vacía en la columna C, al momento de encontrarla, aplicar un formato de bordes de celda a un rango según su indice... Si la Celda es vacía aplicar formato a celdas del rango de filas de la B a la G:

Ese el el formato .. Si C es vació que aplique ese valor y necesito que lo haga automático y no he podido lograr hacerlo.

Favor les piso de su gran ayuda.

1 Respuesta

Respuesta
2

Solo confirma si las celdas en col C 'realmente' están vacías o pueden contener una fórmula que de como resultado 'vacío'.

Si te parece sería de utilidad que me envies una muestra y así tomar mejor idea del tipo de formato a aplicar. Mis correos aparecen en mi sitio que dejo al pie,.

Viendo que las celdas no tienen fórmulas y los bordes son de líneas simples aquí va la macro que la tendrás que colocar insertando un módulo en el Editor. Luego podrás asignarle un atajo de teclado, un botón o llamarla directamente desde el menú Macros.

Todos estos detalles los tengo explicados en la sección Macros de mi sitio.

Sub MacroBordes()
'x Elsamatilde
'se recorre la col C agregando bordes a B:G si la celda = ""
'se establecen filas de inicio y fin de rango
    ini = 9
    fini = Range("G" & Rows.Count).End(xlUp).Row    'la col G marca el fin de rango
'se quitan todos los bordes aplicados anteriormente
    With Range("B" & ini & ":G" & fini)
        .Borders(xlEdgeTop).LineStyle = xlNone
        .Borders(xlEdgeBottom).LineStyle = xlNone
        .Borders(xlInsideHorizontal).LineStyle = xlNone
    End With
'se recorre el rango
    For i = ini To fini
        If Cells(i, "C") = "" Then
            With Range("B" & i & ":G" & i).Borders(xlEdgeTop)
                .LineStyle = xlContinuous
                .ColorIndex = 0
                .TintAndShade = 0
                .Weight = xlThin
            End With
            With Range("B" & i & ":G" & i).Borders(xlEdgeBottom)
                .LineStyle = xlContinuous
                .ColorIndex = 0
                .TintAndShade = 0
                .Weight = xlThin
            End With
        End If
    Next i
'opcional: posicionarse en la primer fila
    Range("C" & ini).Select
End Sub

Luego de colocar la macro en tu libro tendrás que guardarlo con extensión 'xlsm', es decir como libro con macros.

Sdos!

Estimada Elsa:

Muchas Gracias por tu ayuda¡¡¡¡¡ lo hace perfecto .... Gracias por tu tiempo y a la vez por entregar tu conocimiento de gran manera ;), me gustaría poder llegar a ese nivel pero me cuesta mucho poder entender algunas sentencias y lógicas. 

Si tuvieras alguna recomendación de como poder aumentar el entendimiento de los códigos y a programar de esta manera, te lo agradecería mucho ¡¡¡¡

Estimada Elsa:

Junto con saludarla nuevamente y agradeciendo su ayuda, solo me falta poder incluir en el código darle negrita a las filas con formato en los bordes.

¿Cómo lo tendría que hacer?

Estimada :

Logre introducir el Código y me funciono en base a su Programación: Lo que están en Negrita es lo nuevo ...

'x Elsamatilde
'se recorre la col C agregando bordes a B:G si la celda = ""
'se establecen filas de inicio y fin de rango
ini = 9
fini = Range("G" & Rows.Count).End(xlUp).Row 'la col G marca el fin de rango
'se quitan todos los bordes aplicados anteriormente
With Range("B" & ini & ":G" & fini)
.Borders(xlEdgeTop).LineStyle = xlNone
.Borders(xlEdgeBottom).LineStyle = xlNone
.Borders(xlInsideHorizontal).LineStyle = xlNone
End With
With Range("B" & ini & ":G" & fini)
Selection.Font.Bold = False
End With
'se recorre el rango
For i = ini To fini
If Cells(i, "C") = "" Then
With Range("B" & i & ":G" & i).Borders(xlEdgeTop)
.LineStyle = xlContinuous
.ColorIndex = 0
.TintAndShade = 0
.Weight = xlThin
End With
With Range("B" & i & ":G" & i).Borders(xlEdgeBottom)
.LineStyle = xlContinuous
.ColorIndex = 0
.TintAndShade = 0
.Weight = xlThin
End With
Range("B" & i & ":G" & i).Select
Selection.Font.Bold = True
End If
Next i
'opcional: posicionarse en la primer fila
Range("C" & ini).Select


End Sub

MUY BIEN !

Un detalle solo para optimizar un poco: no es necesario que selecciones celda o rango para aplicarle algún formato. Podrías utilizar solo esta línea:

Range("B" & i & ":G" & i).Font.Bold = True

Sdos!

No había visto la parte en negrita. Allí también merece un ajuste:

With Range("B" & ini & ":G" & fini)
.Font.Bold = False
End

o mejor:

Range("B" & ini & ":G" & fini).Font.Bold = False

Sdos!

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas