** NORMAS DEL FORO **
Inicio del foro Inicio del foro > Otros de Microsoft: Windows y Office > Excel
  Mensajes nuevos Mensajes nuevos RSS - Eliminar muchos registros
  Preguntas frecuentes Preguntas frecuentes  Buscar en el foro   Eventos   Registro Registro  Iniciar sesion Iniciar sesion

Tema cerradoEliminar muchos registros

 Responder Responder
Autor
Mensaje
Dany Solis Ver desplegable
Colaborador
Colaborador
Avatar

Unido: 23/Octubre/2010
Localización: Cd. Juarez Méx
Estado: Sin conexión
Puntos: 786
Enlace directo a este mensaje Tema: Eliminar muchos registros
    Enviado: 03/Junio/2017 a las 18:20
Hola saludos a todos.

Tengo la necesidad de eliminar alrededor de 30000 filas en Excel, al ser demasiadas filas lo intente con un filtro tomando en cuenta que donde aparezca el texto "Eliminar" debo de aliminar esa fila pero al hacer esto Excel se congela y asi se queda y no hace nada, intente con una Macro pero esta me borra los primeros mil registros, pudieran ayudarme para tratar de hacerlo por bloques de 1000 o mas records para evitar el congelamiento de Excel (no responde) o bien ejecutar 30 veces la misma Macro.

Tengo esta Macro:

Sub Macro1()
For i = 1 To 1000
If Range("A" & i).Value = "Eliminar" Then
Rows(i).Delete
i = i - 1
End If
Next i
End Sub 

Saludos

Gracias


Editado por Dany Solis - 03/Junio/2017 a las 18:20
Donde hay educación, no hay distinction de clases. (Confusio)

Dany Solis
Arriba
Mihura Ver desplegable
Administrador
Administrador
Avatar

Unido: 06/Mayo/2005
Localización: España
Estado: Sin conexión
Puntos: 9736
Enlace directo a este mensaje Enviado: 03/Junio/2017 a las 19:03
Prueba a realizarlo de 'abajo' a 'arriba'..

For i = UltimaFila to 1 Step -1
   ....
Next i
Jesús Mansilla Castells.
Saludos desde Móstoles.

Access Aplicaciones
Tecsys.es
Arriba
lbauluz Ver desplegable
Administrador
Administrador
Avatar

Unido: 29/Marzo/2005
Localización: Alcalá Meco
Estado: Sin conexión
Puntos: 2928
Enlace directo a este mensaje Enviado: 03/Junio/2017 a las 23:29
Prueba así

Sub Macro1()

Application.ScreenUpdating = False
For i = 1000 To 1 Step -1
    If Range("A" & i).Value = "Eliminar" Then
        Rows(i).Delete
    End If
Next i
Application.ScreenUpdating = True
End Sub

Luis
Quod natura non dat, Salmantica non præstat
Arriba
Dany Solis Ver desplegable
Colaborador
Colaborador
Avatar

Unido: 23/Octubre/2010
Localización: Cd. Juarez Méx
Estado: Sin conexión
Puntos: 786
Enlace directo a este mensaje Enviado: 05/Junio/2017 a las 18:18
Gracias Ibauluz

Tal como esta su propuesta me ha estado eliminando registros en estas cantidades.
Primer ejecucion del Macro:      140
Segunda ejecucion del Macro:   80
Tercera ejecucion del Macro:     53 
Cuarta ejecucion del Macro:      43

Que en realidad pienso toma los primeros 1000 resgistros y dentro de esos 1000 si hay 10 registros que digan "Eliminar" esos son los que elimina. En principio esta bien pero no sigue el For su rutina deberia de tomar los siguientes 1000 registros y eliminar los registros que cumplan el criterio.

Saludos

DS
Donde hay educación, no hay distinction de clases. (Confusio)

Dany Solis
Arriba
Mihura Ver desplegable
Administrador
Administrador
Avatar

Unido: 06/Mayo/2005
Localización: España
Estado: Sin conexión
Puntos: 9736
Enlace directo a este mensaje Enviado: 05/Junio/2017 a las 18:51
Justo antes del copión del Coyote yo te había posteado:

For i = UltimaFila to 1 Step -1
   ....
Next i


El valor UltimaFila, bien lo sabes tú y se lo pones 'manumáticamente', bien lo pones como una celda especial:

activesheet.cells.specialcells(11).Row



Jesús Mansilla Castells.
Saludos desde Móstoles.

Access Aplicaciones
Tecsys.es
Arriba
Dany Solis Ver desplegable
Colaborador
Colaborador
Avatar

Unido: 23/Octubre/2010
Localización: Cd. Juarez Méx
Estado: Sin conexión
Puntos: 786
Enlace directo a este mensaje Enviado: 05/Junio/2017 a las 22:08
Señor Mihura aqui el codigo tomando la ultima fila con datos, pero algo anda mal no me termina de eliminar los records que cumplen el criterio:

Sub Elimina()
'
' Macro1 Macro
'
Application.ScreenUpdating = False

Dim UltimaFila As Long
UltimaFila = Range("A" & Rows.Count).End(xlUp).Row

For i = UltimaFila To 1 Step -1
If Range("A" & i).Value = "Eliminar" Then
Rows(i).Delete
i = i - 1
End If
Next i
Application.ScreenUpdating = True
MsgBox "Rows eliminados", vbExclamation, "Registros Eliminados"
'

End Sub

Saludos

DS


Donde hay educación, no hay distinction de clases. (Confusio)

Dany Solis
Arriba
Mihura Ver desplegable
Administrador
Administrador
Avatar

Unido: 06/Mayo/2005
Localización: España
Estado: Sin conexión
Puntos: 9736
Enlace directo a este mensaje Enviado: 05/Junio/2017 a las 23:24
Publicado originalmente por Dany Solis Dany Solis escribió:

Señor Mihura 
  LOL


Tema aparte, ... Si tenemos un bucle con step -1 ... ¿para que pones i=i-1?

Con eso lo que haces es saltarte la mitad de los registros.


Jesús Mansilla Castells.
Saludos desde Móstoles.

Access Aplicaciones
Tecsys.es
Arriba
Dany Solis Ver desplegable
Colaborador
Colaborador
Avatar

Unido: 23/Octubre/2010
Localización: Cd. Juarez Méx
Estado: Sin conexión
Puntos: 786
Enlace directo a este mensaje Enviado: 06/Junio/2017 a las 17:34
Mr. Mihura corregido el problema gracias por su colaboracion.

Ahora si me elimina todos los records con el cirterio especifico, pueden cerrar el hilo.

Gracias a todos por su ayuda.

Clap

DS
Donde hay educación, no hay distinction de clases. (Confusio)

Dany Solis
Arriba
 Responder Responder
  Compartir tema   

Ir al foro Permisos de foro Ver desplegable