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

Preguntas similare

Leer las respuestas

#11 MarianoB
21/12/2006 - 21:34 | Informe spam
Hola Ivan,

Perdona la tardanza pero en estas fechas estoy liado de trabajo.

En el caso que me ocupa no tengo problemas de desbordamiento ya que
como mucho tengo, actualmente, 8 coincidencias y mi previsión a
medio-largo plazo era de 10.
mi rango es para -> columnas con datos rep. "a:w" , datos variables ->
x

He probado la macro y funciona a la perfección.
Al principio me lié un poco siguiendo lo que hace pero por fin lo he
entendido.

Muchas gracias.

Y como indica Gavillas en un mensaje anterior, me alegro que tu macro
no solo me sirva a mí.

SALU2

MarianoB
Respuesta Responder a este mensaje
#12 MarianoB
21/12/2006 - 21:38 | Informe spam
Hola otra vez,

Se me olvidaba hacer mención a: en la ventana inmediato podras ver el
tiempo que "tarda"
...
tarda = Timer


...
tarda = Timer - tarda
Debug.Print "Tarda -> " & tarda


...

me ha parecido simple y muy util.

SALU2

MarianoB
Respuesta Responder a este mensaje
#13 Ivan
21/12/2006 - 22:31 | Informe spam
hola Mariano

segun mis pruebas, la macro no acaba del todo su tarea.

Deja sin pasar los registros unicos y en ocasiones el ultimo repetido
y sus repeticiones (no estoy del todo seguro si siempre o en funcion de
algo que no acabo de ver, ademas la lista de prueba que me habia
fabricado no era muy aclaratoria al respecto),

estoy buscando donde esta el fallo, y tanteando otras opciones, pero de
momento todas son mas lentas.

bueno, si consigo algo te lo comento ( y, si quieres, a la inversa)

un saludo
Ivan
Respuesta Responder a este mensaje
#14 MarianoB
21/12/2006 - 22:51 | Informe spam
Hola Ivan,

Según mis pruebas si me funciona, aunque reconozco que no he revisado
1 por 1 todos los registros resultantes sino que he ido viendo los
casos concretos que por los datos deberían haber cambiado así como
algunos que no deberían cambiar.

No obstante lo volveré a revisar, esta vez 1 por 1, para comprobar si
es efectiva 100% y en caso de no serlo en que casos falla.

De todas formas te aviso que por estas fechas estoy liado en el trabajo
y tardaré en mirarlo.

SALU2

MarianoB
Respuesta Responder a este mensaje
#15 Ivan
21/12/2006 - 23:39 | Informe spam
hola Gavillas

me refiero a quitar el apostrofe que hay justo delante de la V de
Value. Simplemente pon el cursor delante de -> ' Value = 0 y dale una
vez a Supr para que quede simplemente -> Value = 0 . (tambien en la
barra de herramientas del editor hay una opcion de "Bloque sin
comentarios" , mas o menos. Si posicionado en la fila le das a dicho
boton te quitara el apostrofe)

Cuando una linea de codigo lleva una comilla simple delante, VB no lo
toma en cuenta para la ejecucion del codigo. Se suele usar para añadir
'comentarios' aclaratorios/explicativos del codigo, o, como en este
caso, para probar un procedimiento con y sin una instruccion
determinada sin tener que borrarla/reescribirla.

no se si me habre explicado, en cualquier caso, lo que hace value=0 es
que la siguiente vez que ejcutes la macro, el valor de esa celda ya no
elimine ninguna fila posterior

espero te aclare algo

un saludo y hasta pronto
Ivan
Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaSiguiente AnteriorRespuesta Tengo una respuesta
Search Busqueda sugerida