Retroceder   Foros del Web > Temas generales de computación > Ofimática

Respuesta
 
Herramientas Desplegado
Antiguo 23-jul-2008, 03:55   #1 (permalink)
uka
uka ha deshabilitado el karma
 
Fecha de Ingreso: julio-2008
Mensajes: 4
EXCEL VBA- Borrar filas masivamente

Hola y gracias anticipadas:

Actualmente estoy borrando de listados aquellas líneas que no me interesan con el siguiente ejemplo.
Borro las líneas 0 de la 5ª columna , pero al borrar otros valores en 30.000 líneas se me hace eterno. Estoy buscando la forma de seleccionar todas las líneas que contengan "0" y borrar todas las líneas juntas.

'Borro las lineas con valor = 0

lrow = 1
Do Until Cells(lrow, 5) = ""
If Cells(lrow, 5) = "0" Then
Rows(lrow).Select
Selection.Delete Shift:=xlUp
lrow = lrow - 1
End If
lrow = lrow + 1
Loop

He visto que para borrar filas en blanco se puede usar el ejemplo abajo indicado pero no sé como modificarlo para mi ejemplo.

Sub DeleteEmptyRows()
Dim LastRow As Long
Dim r As Long
LastRow = ActiveSheet.UsedRange.Row - 1 + ActiveSheet.UsedRange.Rows.Count
Application.ScreenUpdating = False
For r = LastRow To 1 Step -1
If Application.WorksheetFunction.CountA(Rows(r)) = 0 _
Then Rows(r).Delete
Next r
End Sub

Saludos

UKA
uka está desconectado   Responder Citando
Antiguo 23-jul-2008, 08:15   #2 (permalink)
Colaborador
David el Grande llegará a ser famoso muy prontoDavid el Grande llegará a ser famoso muy pronto
 
Avatar de David el Grande
 
Fecha de Ingreso: abril-2005
Ubicación: In this planet
Mensajes: 4.158
Exclamación Respuesta: EXCEL VBA- Borrar filas masivamente

La segunda función hace básicamente la misma cosa que la tuya, el secreto está en esto:
Código PHP:
Application.ScreenUpdating False 
Lo que hace es desactivar el repintado de la pantalla con lo que el proceso de borrado es mucho más rápido.
__________________
"En la vida muchas veces tenemos que ser aprendices, y muchas veces maestros"
P.S.: Pregunta siempre en el foro correcto.
David el Grande está desconectado   Responder Citando
Antiguo 23-jul-2008, 14:20   #3 (permalink)
mrocf está en el buen camino
 
Fecha de Ingreso: marzo-2007
Ubicación: Bs.As.
Mensajes: 232
Enviar un mensaje por Yahoo  a mrocf
De acuerdo Respuesta: EXCEL VBA- Borrar filas masivamente


Hola! Uka.
Este procedimiento elimina 600 filas de un total de 10.000 en 2 segundos. Su velocidad se debe a que elimina de a 50 filas simultáneamente.

Código:
Sub BorrarFilasMasivamente()
Application.ScreenUpdating = False
timecalc = Time
msg = "Se eliminaron " & WorksheetFunction.CountIf([E:E], "0") & _
  " filas de un total de " & WorksheetFunction.Count([E:E]) & " en "

For ii = [E1].End(xlDown).Row To 1 Step -1
  If Cells(ii, [E1].Column) = "0" Then
    Conj = Conj & "," & "E" & ii
    If Len(Conj) > 248 Then
      Range(Right(Conj, Len(Conj) - 1)).EntireRow.Delete: Conj = Empty
    End If
  End If
Next ii

If Conj <> Empty Then Range(Right(Conj, Len(Conj) - 1)).EntireRow.Delete

Application.ScreenUpdating = True
MsgBox msg & Format(Time - timecalc, "s") & " segundos."
End Sub
Saludos

Última edición por mrocf; 23-jul-2008 a las 16:36.
mrocf está desconectado   Responder Citando
Antiguo 24-jul-2008, 03:30   #4 (permalink)
uka
uka ha deshabilitado el karma
 
Fecha de Ingreso: julio-2008
Mensajes: 4
Respuesta: EXCEL VBA- Borrar filas masivamente

Hola David el Grande.

Gracias por tu consejo, lo he incluido en alguna parte del código y sí, me ahorro esos parpadeos molestos.

LUIS
uka está desconectado   Responder Citando
Antiguo 24-jul-2008, 03:51   #5 (permalink)
uka
uka ha deshabilitado el karma
 
Fecha de Ingreso: julio-2008
Mensajes: 4
Respuesta: EXCEL VBA- Borrar filas masivamente

Hola mrocf:

Gracias, ha ido genial. He recordado unos segundos muy valiosos...

Abusando un poco más, sería difícil modificar el código para que sea inverso osea que borre todo menos las que sean 0.

Gracias.


UKA
uka está desconectado   Responder Citando
Antiguo 24-jul-2008, 12:49   #6 (permalink)
mrocf está en el buen camino
 
Fecha de Ingreso: marzo-2007
Ubicación: Bs.As.
Mensajes: 232
Enviar un mensaje por Yahoo  a mrocf
De acuerdo Respuesta: EXCEL VBA- Borrar filas masivamente

Podrías aplicar una de estas dos alternativas:

1º) Reemplazar la línea:
If Cells(ii, [E1].Column) = "0" Then

por la línea:
If Cells(ii, [E1].Column) <> "0" Then

2º) O, mejor aún: utilizas este otro procedimiento mucho más eficiente puesto que se basa en filtrar la columna "E":

Código:
Sub BorrarFilasMasivamenteMasRapido()
Application.ScreenUpdating = False
Set MiRango = Range([E2], [E65536].End(xlUp))
  If ActiveSheet.AutoFilterMode Then ActiveSheet.AutoFilterMode = False
  [E:E].AutoFilter
  [E:E].AutoFilter Field:=1, Criteria1:="<>0"
  MiRango.EntireRow.Delete
  [E:E].AutoFilter
If [E1] <> 0 Then [1:1].Delete
Set MiRango = Nothing
Application.ScreenUpdating = True
End Sub

Espero que te sean útiles.

Saludos
mrocf está desconectado   Responder Citando
Antiguo 25-jul-2008, 06:23   #7 (permalink)
uka
uka ha deshabilitado el karma
 
Fecha de Ingreso: julio-2008
Mensajes: 4
Respuesta: EXCEL VBA- Borrar filas masivamente

Hola mrocf:

Gracias, lamento haberte hecho perder el tiempo, era evidente la primera respuesta . La he provado y funciona.

Sobre el otro procediento parace increible que sea más eficiciente que el anterior código, ya he ahorrado el tiempo suficiente.

Saludos
uka está desconectado   Responder Citando
Antiguo 25-jul-2008, 09:03   #8 (permalink)
mrocf está en el buen camino
 
Fecha de Ingreso: marzo-2007
Ubicación: Bs.As.
Mensajes: 232
Enviar un mensaje por Yahoo  a mrocf
Respuesta: EXCEL VBA- Borrar filas masivamente

Fue un gusto, y hasta la próxima.
mrocf está desconectado   Responder Citando
Respuesta

No hay votos aún.


Herramientas
Desplegado

Normas de Publicación
No puedes crear nuevos temas
No puedes responder temas
No puedes subir archivos adjuntos
No puedes editar tus mensajes

BB code is Activado
Caritas están Activado
[IMG] está Activado
Código HTML está Desactivado


La Zona horaria es GMT -6. Ahora son las 02:59.


Message Board Statistics

LinkBacks Enabled by vBSEO 3.1.0

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93