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

#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
Respuesta Responder a este mensaje
#2 MarianoB
18/12/2006 - 18:05 | Informe spam
Lo he probado y me ha funcionado perfectamente.

MUCHÍSIMAS GRACIAS!!!!!!

MarianoB
Respuesta Responder a este mensaje
#3 Ivan
18/12/2006 - 19:11 | Informe spam
hola Mariano

echando un vistazo veo un pequeño lapsus. Si pudiera ocurrir que en la
columna A hubiese menos datos que en AL las filas 'de mas' no te las
evaluaria

donde puse esto->

For f = 2 To [a65536].End(xlUp).Row

queria poner esto

For f = 2 To [al65536].End(xlUp).Row

para buscar la ultima fila con datos de AL y no de A

te convendria canviarlo

un saludo
Ivan
Respuesta Responder a este mensaje
#4 MarianoB
18/12/2006 - 23:00 | Informe spam
Gracias Ivan,

los datos los importo desde AS400, todas las columnas tienen igual
longitud (al menos las filas "A" e "Ai" que son las que necesito para
este cometido.
tras sacar los datos de un query de as400 y pasarlos a excel he visto
que algunas filas eran repetidas excepto una columna (la última). lo
que he hecho es trasponer (con codigo porque eran unos 13000 registros)
esos datos ,que varían, a la primera fila repetida de cada
"repetición" (hay filas que no se repiten y otras que si lo hacen
hasta 8 veces). posteriormente he marcado en una nueva columna en el
lado derecho cuantas celdas he traspuesto y finalmente en función de
ese numero (número de filas por debajo de la actual que sobran y, por
lo tanto, borro) me surgía la duda con la que me has ayudado.
como te he dicho anteriormente, me funciona a la perfección.
por otra parte, en la primera parte de la explicación que estoy
exponiendo (la de trasponer con código), he usado una pequeña formula
matricial que varía solo un poco en 10 columnas y que he copiado luego
a 13000 filas y tarda aproximadamente un minuto en ejecutarse el codigo
(el tiempo dependerá del equipo de cada uno).
ahora no tengo el codigo para exponerlo, pero mañana lo pondré en
este hilo para ver si a alguien se le ocurre una idea mejor para ganar
velocidad de ejecución de la macro.
Me reitero, muchas gracias Ivan.

MarianoB
Respuesta Responder a este mensaje
#5 Ivan
18/12/2006 - 23:11 | Informe spam
hola Mariano

dado que el tema es otro, y, mi conocimiento sobre formulas
matriciales, transponer, query, ..., es nulo, te recomiendo poner la
consulta en un tema nuevo, donde sera mas facil que encuentres una
respuesta adecuada

aun asi, aunque sea por aprender, le echare un vistazo cuando lo
expongas, y, si esta en mi mano, que por lo que comentas creo que no,
intentare echarte una mano

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