Eliminar filas dependiendo de valor de celda

18/12/2006 - 15:21 por MarianoB | Informe spam
Hola grupo,

Tengo el siguiente código en el que se chequea el valor de una celda y
si es diferente de 0 elimina la fila siguiente:

Range("AI2").Activate
rep: If ActiveCell.Value = 0 Then
ActiveCell.Offset(1, 0).Select
Else
ActiveCell.Offset(1, 0).Select
ActiveCell.EntireRow.Select
Selection.Delete Shift:=xlUp
End If
GoTo rep

Lo que yo quiero es parecido pero no sé como plasmarlo en una macro:
quiero que si en la celda que chequeo (AI2 y posteriores: AI3, AI4,
etc...) tiene el valor 0 no haga nada, si tiene el valor 1 me elimine
la siguiente fila, si contiene el valor 2 las 2 siguientes filas, si
contiene el valor 3 elimine las 3 siguientes, etc... En todos los casos
después de cada chequeo y eliminación de fila (en caso de
producirse), descienda una fila y continúe chequeando.
Con el código que os expongo, para 13000 registros que lo he probado,
es lentísimo.

¿Podrían ayudarme?

Muchas Gracias.

MarianoB
 

Leer las respuestas

#1 Ivan
18/12/2006 - 17:14 | Informe spam
hola Mariano

esto hace lo que comentas (se supone que la columna que contiene los
valores para eliminar filas es la "AL", si no es asi cambialo en el
codigo),

Tambien es posible que una vez que hayas hecho una eliminacion no
quieras que esas filas vuelvan a entrar en una eliminacion (sino, si
volvieras a darle a la macro te volveria a eliminar filas hasta dejar
solo las que contengan 0), para ello podrias igualar a 0 los valores de
eliminacion. En la macro hay una instruccion como comentario ( 'Value=0
con comilla simple delante de la linea de codigo) que realiza esto, si
es lo que quieres quita la comilla

Sub EliminarNroFilas()
Dim f As Long
For f = 2 To [a65536].End(xlUp).Row
With Range("al" & f)
If .Value > 0 Then
Select Case .Value
Case 1: .Offset(1, 0).EntireRow.Delete
Case Else
Range("al" & f + 1 & ":al" & f + .Value) _
.EntireRow.Delete
End Select
' .Value = 0
End If
End With
Next

prueba con copias

un saludo y hasta pronto
Ivan

Preguntas similares