Macro que busque celdas vacías en una columna determinada y si encuentra borre el contenido de la fila correspondiente

Tengo una tabla de datos desde la fila 2 en adelante y desde la columna "A" hasta la columna "Q". La columna "B" son fechas, tanto anteriores a hoy como posteriores a hoy y la columna "C" son horas. Necesito una macro que revise las filas con fecha posterior a la actual (Es decir la columna "B" a partir del siguiente día) y que cumplan la condición que la celda de la columna "T" de esa misma fila esté vacía (""). Cuando se cumplan esas dos condiciones, que la fecha es posterior a la actual y que el contenido de la columna "T" es vacío (""), entonces la macro borre el contenido de las celdas de esa fila desde la columna "A" hasta la columna "Q". Luego de ello, como es una tabla filtrada organizada cronológicamente en base a la columna "B" y "C" y con el borrado quedo una fila vacía, entonces se filtre nuevamente la tabla teniendo como primera prioridad de manera ascendente la columna "B" y segunda prioridad de manera ascendente la columna "C".

1 Respuesta

Respuesta
1

Fíjate si te funciona bien así.

Sub BorrarVaciosT()
'borra los valores futuros sin valor en columna T y reordena
    Range("B2").Activate
    Do Until ActiveCell > Date
        ActiveCell.Offset(1, 0).Activate
    Loop
    Do Until ActiveCell = ""
        If ActiveCell.Offset(0, 18) = "" Then
            Range(Cells(ActiveCell.Row, 1), Cells(ActiveCell.Row, 17)).ClearContents
        End If
        ActiveCell.Offset(1, 0).Activate
    Loop
    ultima = ActiveCell.Row
    Range("A1:T" & ultima - 1).Select
    ActiveSheet.Sort.SortFields.Clear
    ActiveSheet.Sort.SortFields.Add Key:=Range("B:B"), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
    ActiveSheet.Sort.SortFields.Add Key:=Range("C:C"), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
    With ActiveSheet.Sort
        .SetRange Selection
        .Header = xlYes
        .MatchCase = False
        .Orientation = xlTopToBottom
        .SortMethod = xlPinYin
        .Apply
    End With
End Sub

Me funcionó perfecto solo que yo cometí un error y fue que no pensé en algo hasta ahora me di cuenta, y es que algunas de las filas en la columna "M" contienen las palabras "Visitador Médico" entonces se me olvidó comentarte que si cumplen la condiciones anteriores de fecha en "B" y vacías en "T" hay una tercera condición para el borrado y es que en la columna "M" no pueden decir "Visitador Médico". Si dicen "Visitador Médico" no las borre, si dicen otra cosa, ahí si que las borre.

Que pena fue error mio.

Fíjate si así anda bien

Sub BorrarVaciosT()
'borra los valores futuros sin valor en columna T y reordena
    Range("B2").activate
    Do Until ActiveCell > Date
        ActiveCell.Offset(1, 0).activate
    Loop
    Do Until ActiveCell = ""
        'Vacias en columna T
        If ActiveCell.Offset(0, 18) = "" Then
            'Distinto de Visitador Medico columna M
            If ActiveCell.Offset(0, 11) = "Visitador Medico" Then
            Else
                Range(Cells(ActiveCell.Row, 1), Cells(ActiveCell.Row, 17)).ClearContents
            End If
        End If
        ActiveCell.Offset(1, 0).activate
    Loop
    ultima = ActiveCell.Row
    Range("A1:T" & ultima - 1).Select
    ActiveSheet.Sort.SortFields.Clear
    ActiveSheet.Sort.SortFields.Add Key:=Range("B:B"), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
    ActiveSheet.Sort.SortFields.Add Key:=Range("C:C"), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
    With ActiveSheet.Sort
        .SetRange Selection
        .Header = xlYes
        .MatchCase = False
        .Orientation = xlTopToBottom
        .SortMethod = xlPinYin
        .Apply
    End With
End Sub

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas