Comando que borra celdas al cumplirse una condición

Necesitaría un comando vba(para agregar a una macro)que al cumplirse una condición(las celdas de varias columnas en un rango(d10:x90), sean igual a 0(columnas color))borre las celdas de la misma fila en las 2 columnas a su izquierda(si f10=0, borrar d10 y e10)

1 respuesta

Respuesta
1

.

Buenas, Paisano!

Aquí va la rutina que hace esa tarea:

Sub Borracero()
'variables:
RangoBorr = "D10:X90" ' para cambiar rango
ColCrit = 3 ' numero de columna donde están los ceros
CeldaIni = Cells(Range(RangoBorr).Row, Range(RangoBorr).Column).Address
CantFilas = Range(RangoBorr).Rows.Count
Rep = 1
Repet = Range(RangoBorr).Columns.Count / 3
For Rep = 1 To Repet
    For LaFila = 0 To CantFilas - 1
        Valor = Range(CeldaIni).Offset(LaFila, Rep * ColCrit - 1).Value
        If Valor = 0 Then
            Range(CeldaIni).Offset(LaFila, Rep * ColCrit - 2).ClearContents
            Range(CeldaIni).Offset(LaFila, Rep * ColCrit - 3).ClearContents
            Cont = Cont + 1
        End If
    Next
Next
    ElMensaje = IIf(Cont = 0, "NO SE BORRÓ DATO ALGUNO", "Cantidad de ceros encontrados : " & Cont)
    ElTitulo = "TERMINADO!"
    MsgBox ElMensaje, vbInformation, ElTitulo
    Set RangoNum = Nothing
End Sub

Probalo y decime si hace lo que esparabas.

Abrazo

Fer

Hay un problema...acá no hay como en el whatsup para ponerte aplausos!! Genio! Espectacular la solucion;una consulta,¿ayudaría para que sea "un poco más rápida la macro"(ahora tarda 2 1/2 minutos(es hasta la columna cr que llega)si en vez de buscarsolo los ceros busque el 0 pero que haya también algún dato a su izquierda o no ayudaría en nada? Sino, no hay drama, tampoco es para tanto te repito, esta espectacular

.

Mmm, no creo.

Es una rutina eficiente: No tiene desplazamientos de pantalla, no se mueve a ninguna celda, y evaluando que sólo que haya un cero es más veloz que si tiene que evaluar si la celda a borrar tenga o no dato.

También hay que considerar si la sesión de MS Excel no está muy cargada. Probala cerrando Excel y volviendolo a abrir.

Por las dudas, prueba esta versión mejorada para ver si acelera algo (va con una yapa):

Sub Borracero()
'---- Variables modificables:  
RangoBorr = "D10:X90" ' para cambiar rango
ColCrit = 3 ' numero de columna donde están los cero
'---- fin Variables  
'
'---- inicio de rutina:  
Application.ScreenUpdating = False
IniTime = Now
CeldaIni = Cells(Range(RangoBorr).Row, Range(RangoBorr).Column).Address
CantFilas = Range(RangoBorr).Rows.Count
Rep = 1
Repet = Range(RangoBorr).Columns.Count / ColCrit
For Rep = 1 To Repet
    For LaFila = 0 To CantFilas - 1
        Valor = Range(CeldaIni).Offset(LaFila, Rep * ColCrit - 1).Value
'        Range(CeldaIni).Offset(LaFila, Rep * ColCrit - 1).Interior.ColorIndex = 44
        If Valor = 0 Then
            Range(CeldaIni).Offset(LaFila, Rep * ColCrit - 2).ClearContents
            Range(CeldaIni).Offset(LaFila, Rep * ColCrit - 3).ClearContents
            cont = cont + 1
        End If
    Next
Next
    FinTime = Now - IniTime
    FinTime = Format(FinTime, "hh:mm:ss")
Application.ScreenUpdating = True
    ElMensaje = IIf(cont = 0, "NO SE BORRÓ DATO ALGUNO", "Cantidad de ceros encontrados : " & cont & Chr(10) & "en un tiempo de " & FinTime & " (hh:mm:ss)")
    ElTitulo = "TERMINADO!"
    MsgBox ElMensaje, vbInformation, ElTitulo
End Sub

Abrazo

Fer

¿

Después la sigo probando ya que debo salir ahora pero la probé y me parecido que hizo todo ok en 7 segundos? ¿Esa es la yapa? Genial después te confirmo bien

.

Pues si. Ojala sea más veloz que antes.

Muy buen fin de semana.

Fer

.

fer....excelente...mil gracias!abrazo y buen fin de semana

ruben

.

Ok. Un placer!

.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas