Ocultar filas con Valores en Cero

Cree una Macro simple en excel, para que en un rango de por ejemplo F5 a F14000, busque los valores en cero en la columna, y oculte directamente la fila completa.
Esto lo hice con un hidden. Row
El problema es que la ejecución de la Macro es muy lenta. Tarda como 4 / 5 minutos en completar la función.
Como no todos los reportes tienen datos hasta la fila 14000, se me había ocurrido con un FIN, ir hasta el ultimo dato de dicha fila F y que de ahí para arriba busque los valores en cero, hasta la celda F5.
A su vez, se me ocurrió que correrla invisible podria servir para que la ejecución de la macro sea mas rápida (con un application.visible=false / application.visible=true).
¿Crees qué esto puede servir para que el proceso sea bastante más rápido?
Podrías ayudarme a armar esta macro, ¿ya qué no tengo idea de como hacer estas modificaciones? ¿O alguna otra que sirva para cumplir con esta tarea?

1 Respuesta

Respuesta
1
No se que tanto pueda mejorar la velocidad de tu macro pero acá te doy una manera de poder hacerlo:
ULT = Sheets("Nombre de la Hoja"). Range("f65536").End(xlUp). Row 'con esto obtienes el ultimo valor
despues puedes realizar un ciclo:
Sub ciclo()
ULT = Sheets("Nombre de la Hoja").Range("f65536").End(xlUp).Row
Range("f1").select
For z=1 to ULT
'Tu macro que avalue la celda
IF activecell.value= 0 then
oculta la linea
end if
ActiveCell.Offset(1, 0).Select
nex z
end sub
Muchísimas gracias por tus comentarios.
Pero al realizar las modificaciones me sale un error: " Run-time error '9': Subscript out of range".
Evidentemente tengo algo mal.
¿Podrías ayudarme a corregirla para que funcione?
Así, es como está codificada ahora:
Sub Ocultarfilas()
ULT = Sheets(F104).Range("f25536").End(xlUp).Row
Range("f6").Select
For F = 6 To ULT
If r.Value = "0" Then
r.EntireRow.Hidden = True
Else
r.EntireRow.Hidden = False
End If
Next
End Sub
Muchas gracias.
Saludos,
Prueba con la siguiente rutina:
Sub Ocultarfilas()
ULT = Sheets(F104).Range("f25536").End(xlUp).Row
Range("f6").Select
For F = 6 To ULT
If ActiveCell = "0" Then
N_l= ActiveCell.Row
 aux1= N_l & ":" & N_l
Rows(aux1).Select
Selection.EntireRow.Hidden = True
Else
N_l= ActiveCell.Row
aux1= N_l & ":" & N_l
Rows(aux1).Select
Selection.EntireRow.Hidden = True
r.EntireRow.Hidden = false
End If
ActiveCell.Offset(1, 0).Select
Next
End Sub
Hola,
ahora me salio un error que dice " Se ha producido un error '9' en tiempo de ejecución:
Subíndice fuera de Intervalo".
Cuando apretó el botón depurar, me marca en amarillo la segunda fila. Esa que empieza con ULT.
¿Qué puede estar pasando?
Nuevamente, muchas gracias por tu ayuda.
Saludos,
Mario
Modifica esta parte del código:
ULT = Sheets("F104").Range("f25536").End(xlUp).Row
El Error se produce por que el nombre de la hoja del código anterior no esta con comillas
Perfecto... Solucionado un problema.
Pero me tiro otro error: 424 - Object Required
La depuracion marcaba la siguiente linea:
r.EntireRow.Hidden = false
La borré y ejecuté la macro.
Funciona ok, el problema es que oculta todas las filas, desde la Fila 5 para abajo oculta todo.
En realidad, debería ocultar solamente los valores en cero que encuentra.
¿Qué es lo que está tomando mal?
Muchas gracias por la ayuda
Mario
Sub Ocultarfilas()
ULT = Sheets("F104").Range("f25536").End(xlUp).Row
Range("f6").Select
For F = 6 To ULT
If ActiveCell = "0" Then
N_l = ActiveCell.Row
aux1 = N_l & ":" & N_l
Rows(aux1).Select
Selection.EntireRow.Hidden = True
Else
N_l = ActiveCell.Row
aux1 = N_l & ":" & N_l
Rows(aux1).Select
Selection.EntireRow.Hidden = True
End If
ActiveCell.Offset(1, 0).Select
Next
End Sub
Perdoname pero me acabo de dar cuenta que en la opción del if en el que determinas que valor tiene la celda esta malo:
Sub Ocultarfilas()
ULT = Sheets("F104").Range("f25536").End(xlUp).Row
Range("f6").Select
For F = 6 To ULT
If ActiveCell = "0" Then  ' Si el Valor es cero
N_l = ActiveCell.Row
aux1 = N_l & ":" & N_l
Rows(aux1).Select
Selection.EntireRow.Hidden = True  ' oculta la linea
Else
N_l = ActiveCell.Row
aux1 = N_l & ":" & N_l
Rows(aux1).Select
Selection.EntireRow.Hidden = FAlSE  ' Aca esta el error , no debería ocular
End If
ActiveCell.Offset(1, 0).Select
Next
End Sub
Hola,
Hice la modificación que me comentaste, pero cuando ejecuto la macro no oculta las filas en donde el campo de la columna "F" esta en cero.
La macro se ejecuta, pero no realiza nada.
El objetivo de la macro tiene que ser ir al ultimo valor de la columna "F" y de ahí para arriba (hasta el campo F6) tiene que ocultar la fila entera donde encuentre un valor en cero.
Crees, ¿qué tenemos que re diseñarla?
Saludos,
Mario
¿Puedes mandarme tu archivo a mi correo para ver cual es el problema?
[email protected]
Muchas gracias por tu ayuda.
FInalmente encontré el error, lo correji y funciona perfecto.
Realmente, me has ayudado mucho, ya que ahorro mucho tiempo con esta macro.
Gracias de nuevo y felices fiestas.
Saludos,
Mario

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas