Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

ocultar fila con condicional

4,538 views
Skip to first unread message

Rew

unread,
Jul 26, 2007, 9:06:02 PM7/26/07
to
Necesito ocultar las filas de una hoja, sujetas a la siguiente condicion,
por ejemplo si en la fila 4 la celda AB4 >0, se oculta si no se muestra y asi
las demas filas; fila 30, AB30>0, se oculta, si no se muestra.-
Desde ya muy agradedecido

Héctor Miguel

unread,
Jul 27, 2007, 1:18:44 AM7/27/07
to
hola, 'anonimo' !

> Necesito ocultar las filas de una hoja, sujetas a la siguiente condicion

> por ejemplo si en la fila 4 la celda AB4 >0, se oculta si no se muestra y asi las demas filas
> fila 30, AB30>0, se oculta, si no se muestra.-

1) toma nota que al modificar las propiedades de un rango por codigo, se pierde el beneficio del deshacer, undo, ctrl+Z :-((

2) tambien deberas decidir si las siguientes lineas las usas [p.e.] en el evento '_calculate' de *esa* hoja...
o las dejas en una macro que sea ejecutada a voluntad/discrecion/necesidad/... -?-

Dim Celda As Range
For Each Celda In Range("ab4,ab30")
Celda.EntireRow.Hidden = Celda = 0
Next

3) si necesitas incluir otras celdas... [ya sabes cual linea modificar] :))

si cualquier duda [o informacion adicional]... comentas ?
saludos,
hector.


Héctor Miguel

unread,
Jul 27, 2007, 1:23:33 AM7/27/07
to
hola [de nuevo], 'anonimo' ! [fe de erratas, disculpa] :))

>> por ejemplo si en la fila 4 la celda AB4 >0, se oculta si no se muestra y asi las demas filas
>> fila 30, AB30>0, se oculta, si no se muestra.-

> Dim Celda As Range


> For Each Celda In Range("ab4,ab30")
> Celda.EntireRow.Hidden = Celda = 0
> Next

modifica: Celda = 0
por: -> Celda > 0

saludos,
hector.


Rew

unread,
Jul 27, 2007, 9:00:00 AM7/27/07
to
1º gracias, trabajo con los datos que me diste y te comento
Abrazo
Richard

"Héctor Miguel" escribió:

Rew

unread,
Jul 27, 2007, 9:14:03 AM7/27/07
to

"Rew" escribió:

Rew

unread,
Jul 27, 2007, 9:18:01 AM7/27/07
to
Hola Hector,

Algo debo estar haciendo mal con tu fórmula, con esta fórmula funciona solo
para una línea

Private Sub Worksheet_Change(ByVal Target As Range)
With Rows(20)
If Range("C15") = 0 Then _
.Hidden = True Else _
.Hidden = False
End With
End Sub

Sobre esta base, que es lo que debo cambiar, para que me lo haga en todas
las filas de una hoja de trabajo.-

Gracias de nuevo.-
SDS
Richard

Héctor Miguel

unread,
Jul 27, 2007, 3:10:27 PM7/27/07
to
hola, Richard !

> Algo debo estar haciendo mal con tu formula, con esta formula funciona solo para una linea


> Private Sub Worksheet_Change(ByVal Target As Range)
> With Rows(20)
> If Range("C15") = 0 Then _
> .Hidden = True Else _
> .Hidden = False
> End With
> End Sub
> Sobre esta base, que es lo que debo cambiar, para que me lo haga en todas las filas de una hoja de trabajo.-

[primero]: definir si vas a necesitar que el codigo de des/ocultamiento de filas se auto-ejecute con el evento '_change'
- que es el que se dispara cuando se hacen cambios en celda/s de esa hoja
[OJO: NO es el mismo que cuando sus valores se actualizan por efectos de formulas en algun re/calculo del modelo]

[segundo]: definir si *efectivamente* pretendes aplicarlo a TODAS las filas de una hoja [65000 97/2003 un millon xl-2007] -???-

[tercero]: considerar que es necesario des/re/ocultar las filas *caminando* celda-por-celda de la columna que *decide* <= OJO

comentas [si hubiera] algun detalle *en el tintero* ?
saludos,
hector.


Rew

unread,
Jul 28, 2007, 12:24:02 AM7/28/07
to
Hola Hector,

1º agradecer tu disposición.-

Disculpa mi desconocimiento pero recien empiezo en macro y estoy muy
ilusionado pero mucho más es lo perdido que estoy.-

1- Necesitaría, disculpa mi insistencia, que me escribas como ejemplo la
fórmula completa, para que en una hoja de trabajo, la fila 4 se oculte con la
celda c4>0, la fila 5 con c5>0 ycomo ejemplo seguir asi hasta la fila 10 con
C10 (eso es constante),para poderla copiar, desde ahi me animno a
desentrañarla y modificarla.-

2- Otro problema que tengo es que las celdas C (4,5,6,7...)no son en
realidad 0 sino estan copiadas de otra hoja con la sig fórmula "=+Master!F10"
(master es la hoja 3) y me toma ocultar y luego no mostrar, si aplico el nº
es decir 0 y 1 como ejemplo, funciona perfecto con la fórmula que te pase,
tomadas cito la fuente de un diálogo entre Joan e Ivan de esta comunidad

El punto 2 me gustaría buscarle la solucion solo, de no llegar a buen puerto
te pediría auxilio, pero si me das la pista del 1er punto puedo empezar a
buscar como hacer todo el desarrollo.-

Un fuerte abrazo

Richard

Héctor Miguel

unread,
Jul 28, 2007, 3:11:14 AM7/28/07
to
hola, Richard !

> Disculpa mi desconocimiento pero recien empiezo en macro y estoy muy ilusionado pero mucho mas es lo perdido que estoy.-

=> [hasta donde se]... no se piden disculpas en los grupos por no saber
el que no pregunta [de alguna manera]... tampoco aprende [de ninguna] ;)

> 1- Necesitaria... como ejemplo la formula completa, para que en una hoja de trabajo
> la fila 4 se oculte con la celda c4>0, la fila 5 con c5>0 y como ejemplo seguir asi hasta la fila 10 con C10
> (eso es constante), para poderla copiar, desde ahi me animno a desentra#arla y modificarla.-
>
> 2- Otro problema que tengo es que las celdas C (4,5,6,7...) no son en realidad 0 sino estan copiadas de otra hoja
> con la sig formula "=+Master!F10" (master es la hoja 3) y me toma ocultar y luego no mostrar
> si aplico el nº es decir 0 y 1 como ejemplo, funciona perfecto con la formula que te pase
> tomadas cito la fuente de un dialogo entre Joan e Ivan de esta comunidad
>
> El punto 2 me gustaria buscarle la solucion solo, de no llegar a buen puerto te pediria auxilio


> pero si me das la pista del 1er punto puedo empezar a buscar como hacer todo el desarrollo.-

conociendo que en la columna 'C' [o la que sea en realidad] tienes formulas que toman su vinculo de otra hoja
te sugiero usar el evento '_calculate' en el modulo de codigo de *esa* hoja
-> click-secundario sobre la etiqueta con su nombre... -> selecciona del menu contextual: -> ver codigo
esto te lleva al editor de vba y [precisamente] al modulo de codigo de esa hoja

basado en la propuesta primera [y los comentarios de la anterior], copia/pega las siguientes lineas en ese modulo:

Private Sub Worksheet_Calculate()
Dim Celda As Range
For Each Celda In Range(Range("c4"), Range("c4").End(xlDown))
Celda.EntireRow.Hidden = Celda > 0
Next
End Sub

si en la columna 'C' existen celdas *vacias* antes de llegar a la ultima celda *realmente* ocupada...
cambia la instruccion For Each a...
For Each Celda In Range(Range("c4"), Range("c65536").End(xlUp))

cierra el editor, regresa a excel, y prueba haciendo modificaciones a la hoja que genera cambios originalmente [Master]

OJO: no te olvides que estaras *perdiendo* la posibilidad del des-hacer, undo, ctrl+Z :-((

Rew

unread,
Jul 28, 2007, 9:00:00 AM7/28/07
to
Hola Hector,

Gracias otra vez, trabajo con ello y te comento.-

Un Abrazo

Richard

Rew

unread,
Jul 28, 2007, 10:10:02 AM7/28/07
to
Hola Miguel

Al hacerlo se generar un conflicto, comienza a hacer la gestión, inclusive
oculto alguna gila en algun caso, pero el programa pasa a no responder, con
ambas fórmulas, parpadea la pantalla y lo cerre desde el administrador.-

si yo quisiera hacerlo para las filas 5 con C5, 6 con C6,......, hasta la 10
con C10

que debería modificar


Private Sub Worksheet_Calculate()
Dim Celda As Range

For Each Celda In Range(Range("c5"), Range("c5").End(xlDown))


Celda.EntireRow.Hidden = Celda > 0
Next
End Sub

si en la columna 'C' existen celdas *vacias* antes de llegar a la ultima
celda *realmente* ocupada...

OTRA EN REALIDAD SE ALTERNAN ES DECIR PUEDE HABER 3 VACIAS FILA 5 A 8, 2
COMPLETAS 9 A 12 Y ASI, TODAS ELLAS CON LA FORMULA =+MASTER!C5 en C5,
=+MASTER!C6 en C6.......


Private Sub Worksheet_Calculate()
Dim Celda As Range

For Each Celda In Range(Range("c5"), Range("c5").End(xlDown))


Celda.EntireRow.Hidden = Celda > 0
Next
End Sub

No quisiera llegar a la última fila de la hoja, si no acotarlo hasta la fila
20 o 100, que debría cambiar.-

Gracias, otra vez, un abrazo
Richard

Héctor Miguel

unread,
Jul 28, 2007, 9:05:40 PM7/28/07
to
hola, Richard !

__ 1 __
> Al hacerlo se generar un conflicto, comienza a hacer la gestion, inclusive oculto alguna gila en algun caso
> pero el programa pasa a no responder, con ambas formulas, parpadea la pantalla y lo cerre desde el administrador.-

1) esto es probable que se deba a que tu modelo realiza re/calculos *exhaustivos* [quizas] por muchas formulas ???

__ 2 __
> si yo quisiera hacerlo para las filas 5 con C5, 6 con C6,......, hasta la 10 con C10 que deberia modificar


> Private Sub Worksheet_Calculate()
> Dim Celda As Range
> For Each Celda In Range(Range("c5"), Range("c5").End(xlDown))
> Celda.EntireRow.Hidden = Celda > 0
> Next
> End Sub

2) si solo necesitas *monitorear* las celdas del rango 'C5:C10' solo necesitas indicarlo en la linea del For Each...

For Each Celda In Range("c5:c10")

__ 3 __


> OTRA EN REALIDAD SE ALTERNAN ES DECIR PUEDE HABER 3 VACIAS FILA 5 A 8, 2 COMPLETAS 9 A 12 Y ASI

> TODAS ELLAS CON LA FORMULA =+MASTER!C5 en C5, =+MASTER!C6 en C6.......

> No quisiera llegar a la ultima fila de la hoja, si no acotarlo hasta la fila 20 o 100, que debria cambiar.-

3) varias alternativas [aunque no es muy claro eso de: "celdas vacias... todas ellas con formulas..." ???]:

a) usar la forma primera de la propuesta anterior ?
OJO: NO selecciona todas las filas, solo *avanza* desde la ultima *vacia* a la ultima *ocupada*
-> For Each Celda In Range(Range("c4"), Range("c65536").End(xlUp))

b) condicionar el codigo para que solo se aplique a celdas con formulas ?
-> For Each Celda In Range(Range("c4"), Range("c65536").End(xlUp)).SpecialCells(xlCellTypeFormulas)

c) en lugar de usar el evento '_calculate' de la hoja que tiene formulas vinculadas a la hoja *Master*...
usar el evento '_change' de la hoja *Master* para ocultar las filas *espejo* en la otra hoja -?-

[me parece que empiezan a *salir algnos detalles que estaban en el tintero* ?]

Rew

unread,
Jul 29, 2007, 4:20:01 PM7/29/07
to
Hola Miguel,

A ver si te puedo mostrar toda la película para clarificarlo lo más posible

Hay una hoja de cálculo en la hoja 5 que di por llamar Master, con formatos
condicionales y fórmulas del tipo (=si) con distintos cálculos que se activan:

1 al poner la fecha de la orden de compra
2 al poner la fecha de compra
3 al poner la fecha de la orden de venta
4 al poner la fecha de venta

Con formato condicional pinto toda la fila de naranja para visualmente saber
que se cerro, hasta este punto, todo bien para mi, pero la planilla creció y
las distintas operaciones me fueron quedando separadas entre varias filas
naranjas, con lo que, a pesar de estar sin color, se me dificulta
visualizarlas para poder trabajar con el conjunto de las filas que están
activas.-

Por ello se me ocurrió crear una segunda planilla a la que llame run2 en la
hoja 5, donde solo aparecieran las filas que yo necesito ver y que tienen en
común que la fecha de venta no existe en Master, dichas celdas están
vírgenes, ya que todas las fórmulas en master se van activando a partir de
que en esas celdas se coloque un nº mayor que 0, para el caso al fecha.-

En “run2” yo copie los formatos condicionales y la fórmula
(=+Master!B5,……, =+Master!AZ5), extendiéndolas hasta la fila 200
(=+Master!B200,……, =+Master!AZ200) y aaqui aparece m necesidad de poder
ocultar las filas donde en “MasterU5” en adelante el nº sea mayor que 0,
donde en “Run2”, está la formula (=+master!U5) con valor 0 ( que a lo mejor
pude generar conflicto )
Esto se repite en U6, U7, hasta U 200 como ejemplo.-

Otro concepto sería que run2 tome de Master, solo las filas cuyo vas valores
en la celda U5 en más sea distinto de 0.-

Y que me traslade todos los cambios que vaya incorporando.-

Creo haber expuesto todo.-

Desde ya, gracias y un Abrazo

Richard


Héctor Miguel

unread,
Jul 29, 2007, 5:32:04 PM7/29/07
to
hola, Richard !

__ 1 __
> A ver si te puedo mostrar toda la pelicula para clarificarlo lo mas posible
> ... hoja de calculo... Master, con formatos condicionales y formulas del tipo (=si) con distintos calculos que se activan:


> 1 al poner la fecha de la orden de compra
> 2 al poner la fecha de compra
> 3 al poner la fecha de la orden de venta
> 4 al poner la fecha de venta

> ... pinto toda la fila... para visualmente saber que se cerro... la planilla crecio y las... operaciones me fueron quedando separadas
> ... a pesar de estar sin color, se me dificulta visualizarlas para poder trabajar con... las filas que estan activas.-

__ 2 __
> ... se me ocurrio crear una segunda planilla... donde solo aparecieran las filas que yo necesito ver
> ... tienen en comun que la fecha de venta no existe en Master, dichas celdas estan virgenes
> ... todas las formulas en master se van activando a partir de que en esas celdas se coloque un nº mayor que 0, para el caso al fecha.-
> ... copie los formatos condicionales y la formula (=+Master!B5,... =+Master!AZ5)
> extendiendolas hasta la fila 200 (=+Master!B200,... =+Master!AZ200) y aqui aparece mi necesidad de
> ... ocultar las filas donde en 'MasterU5' en adelante el nº sea mayor que 0
> ... en 'Run2', esta la formula (=+master!U5) con valor 0 (que a lo mejor pude generar conflicto)... se repite en U6, U7, hasta U 200 [...]

te paso algunos comentarios.. de atras... pa'lante [la del final es otra propuesta que -creo- vale la pena de probar] ;)

si cualquier duda [o informacion adicional]... comentas ?
saludos,
hector.

2) [creo que] estamos hablando de [~10,000] *demasiadas* formulas con vinculos *reciprocos* [cambios en una hoja afectan a la otra]
toma en cuenta que existen varias *acciones* [autofiltros, modificacion y/o entrada de datos nuevos, alto/ancho de fila/columna]
que *disparan* eventos [como el '_calculate', '_change', '_selectionchange', etc.]

1) por que no intentas usar los autofiltros [o los filtros avanzados] para mostrar solo las filas que estan activas ?
mantendras una sola hoja, evitando hojas adicionales con muchas/demasiadas celdas *espejo* y formulas de re/calcuos exhaustivos


Rew

unread,
Jul 29, 2007, 7:24:00 PM7/29/07
to
Hola Miguel

Gracias a tu ayuda, creo haber logrado el objetivo

Un abrazo enorme

Richard

0 new messages