Discussion:
Como imprimir mediante una macro solo celdas escritas?
(demasiado antiguo para responder)
jaraya
2005-09-11 03:47:09 UTC
Permalink
Deseo que mediante una macro asignada a un boton, inicie proceso de impresion
solo a columnas y filas con escrituras.Es decir como puedo hacer para que
automaticamente reconosca las filas y columnas y se establesca sola la area
de impresion.
Héctor Miguel
2005-09-11 07:46:28 UTC
Permalink
hola, jaraya !
... que mediante una macro... inicie proceso de impresion solo a columnas y filas con escrituras
... que automaticamente reconosca las filas y columnas y se establesca sola la area de impresion.
-> cuando estableces un rango como el area de impresion [cualquiera]...
excel 'genera' un nombre [p.e. Área_de_impresion' o... 'Print_area' -si en ingles-]
-> dicho nombre [que en realidad es una referencia al rango que se imprime] es tambien 'factible' de 'personalizar'
[p.e. podrias definir un rango 'dinamico']
-> ve a [menu] insertar / nombre / definir...
selecciona el nombre 'apropiado' y... CAMBIA sus 'referencias' a la siguiente formula...
bueno... aqui solo falta saber cuales son las condiciones/caracteristicas/o similares...
para poder 'decirle' cual seria el area de impresion 'automatica' -???-

si cualquier duda [o informacion adicional]... comentas?
saludos,
hector.
jaraya
2005-09-11 12:57:04 UTC
Permalink
Post by Héctor Miguel
hola, jaraya !
... que mediante una macro... inicie proceso de impresion solo a columnas y filas con escrituras
... que automaticamente reconosca las filas y columnas y se establesca sola la area de impresion.
-> cuando estableces un rango como el area de impresion [cualquiera]...
excel 'genera' un nombre [p.e. Área_de_impresion' o... 'Print_area' -si en ingles-]
-> dicho nombre [que en realidad es una referencia al rango que se imprime] es tambien 'factible' de 'personalizar'
[p.e. podrias definir un rango 'dinamico']
-> ve a [menu] insertar / nombre / definir...
selecciona el nombre 'apropiado' y... CAMBIA sus 'referencias' a la siguiente formula...
bueno... aqui solo falta saber cuales son las condiciones/caracteristicas/o similares...
para poder 'decirle' cual seria el area de impresion 'automatica' -???-
si cualquier duda [o informacion adicional]... comentas?
saludos,
hector.
jaraya
2005-09-11 13:00:01 UTC
Permalink
Post by Héctor Miguel
hola, jaraya !
... que mediante una macro... inicie proceso de impresion solo a columnas y filas con escrituras
... que automaticamente reconosca las filas y columnas y se establesca sola la area de impresion.
-> cuando estableces un rango como el area de impresion [cualquiera]...
excel 'genera' un nombre [p.e. Área_de_impresion' o... 'Print_area' -si en ingles-]
-> dicho nombre [que en realidad es una referencia al rango que se imprime] es tambien 'factible' de 'personalizar'
[p.e. podrias definir un rango 'dinamico']
-> ve a [menu] insertar / nombre / definir...
selecciona el nombre 'apropiado' y... CAMBIA sus 'referencias' a la siguiente formula...
bueno... aqui solo falta saber cuales son las condiciones/caracteristicas/o similares...
para poder 'decirle' cual seria el area de impresion 'automatica' -???-
si cualquier duda [o informacion adicional]... comentas?
saludos,
hector.
Hola Hector, favor mas ayuda
Post by Héctor Miguel
El area de impresion es una zona de varias columna que van variando en su cantidad de lineas,puesto que es una hoja de resumen de datos que esta interconectada con otras hojas,Por lo que va variando.
te repito, como, cual es la formula para que solo reconosca las celdas
activa y no estar "pintando" siempre el area de celdas escritas.
saludos y gracias de todos modos
Héctor Miguel
2005-09-12 03:11:53 UTC
Permalink
hola, jaraya !
... area de impresion es... varias columna que van variando en... lineas
... es una hoja de resumen de datos que esta interconectada con otras hojas
... cual es la formula para que solo reconosca las celdas... y no estar "pintando" siempre el area...
saludos y gracias de todos modos
voy a aprovechar una consulta similar [y la respuesta] copiando/pegando al final del presente :))
[obviamente] no espero que la situacion tenga 'mucho' parecido con TU situacion 'real' :-(
[solo considero que] sera conveniente 'empezar' con algo mas facil de 'digerir'... que 'tener que'... adivinar TU realidad :)

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

=== copio / pego consulta y respuesta anteriores ===
... designar un area de impresion de forma automatica
... la primera celda del rango va a ser siempre A1
... el final del rango... la columna T... la fila, en la cual este situado el valor 0 [...]
-> si ya has establecido un rango como el area de impresion [cualquiera]...
excel ya debio 'generarte' un nombre [p.e. Área_de_impresion' o... 'Print_area' -si en ingles-]
-> ve a [menu] insertar / nombre / definir...
selecciona el nombre 'apropiado' y... CAMBIA sus 'referencias' a la siguiente formula...
=desref($a$1,,,coincidir(0,$t:$t,0),20)
[solo toma en cuenta que mi sistema 'usa' como separador de argumentos a la coma ',' NO al punto y coma ';'] :D
-> si 'todo sale bien'... excel 'se encargara' de completar la formula con el nombre de 'esa' hoja [p.e.]
=DESREF(Hoja1!$A$1,,,COINCIDIR(0,Hoja1!$T:$T,0),20)
-> tu 'nueva' area de impresion sera [siempre] desde 'A1' hasta 'Tn' [donde 'n' es la primer celda que contenga un 0 -cero-]
jaraya
2005-09-12 20:55:06 UTC
Permalink
Hector, no puedo hacerla funcionar, te doy mas datos:La hoja es la Hoja 6 con
el nombre de Stock y las columnas a imprimir empiesan en la C4 hasta la E78
en adelante, siempre dentro de las columnas c,d y e se van agrgando linaes.
anote tu formula pero debe haber error de escritura.Me puedes ayudar a
escrirla con estos datos.
Gracias
Post by Héctor Miguel
hola, jaraya !
... area de impresion es... varias columna que van variando en... lineas
... es una hoja de resumen de datos que esta interconectada con otras hojas
... cual es la formula para que solo reconosca las celdas... y no estar "pintando" siempre el area...
saludos y gracias de todos modos
voy a aprovechar una consulta similar [y la respuesta] copiando/pegando al final del presente :))
[obviamente] no espero que la situacion tenga 'mucho' parecido con TU situacion 'real' :-(
[solo considero que] sera conveniente 'empezar' con algo mas facil de 'digerir'... que 'tener que'... adivinar TU realidad :)
si cualquier duda [o informacion adicional mas 'concreta']... comentas?
saludos,
hector.
=== copio / pego consulta y respuesta anteriores ===
... designar un area de impresion de forma automatica
... la primera celda del rango va a ser siempre A1
... el final del rango... la columna T... la fila, en la cual este situado el valor 0 [...]
-> si ya has establecido un rango como el area de impresion [cualquiera]...
excel ya debio 'generarte' un nombre [p.e. Área_de_impresion' o... 'Print_area' -si en ingles-]
-> ve a [menu] insertar / nombre / definir...
selecciona el nombre 'apropiado' y... CAMBIA sus 'referencias' a la siguiente formula...
=desref($a$1,,,coincidir(0,$t:$t,0),20)
[solo toma en cuenta que mi sistema 'usa' como separador de argumentos a la coma ',' NO al punto y coma ';'] :D
-> si 'todo sale bien'... excel 'se encargara' de completar la formula con el nombre de 'esa' hoja [p.e.]
=DESREF(Hoja1!$A$1,,,COINCIDIR(0,Hoja1!$T:$T,0),20)
-> tu 'nueva' area de impresion sera [siempre] desde 'A1' hasta 'Tn' [donde 'n' es la primer celda que contenga un 0 -cero-]
Héctor Miguel
2005-09-12 22:10:10 UTC
Permalink
hola, jaraya !
... es la Hoja 6 con el nombre de Stock y las columnas a imprimir... en la C4 hasta la E78 en adelante
... dentro de las columnas c,d y e se van agregando linaes.
anote tu formula pero debe haber error de escritura... escribirla con estos datos.
-> no comentas si la 'ultima fila' pudiera corresponder a la columna c, d o e -?-
[asi que]... voy a suponer que pudiera ser... en cualquiera de esas columnas :)
-> tampoco comentas si los datos que se van agregando son letras... numeros... o cualquiera -?-
[asi que]... me voy a evitar 'andar averiguando' y te sugiero usar un nombre +/- como sigue...

-> estando como 'activa' la hoja 6 ['Stock'] agrega/modifica los siguientes nombres...
[menu] insertar / nombre / definir...
a) nombre: Fila_n formula: =max(si($c$5:$e$1500>0,fila($c$5:$e$1500)))
si todo sale bien... excel pondra algo +/- como: =MAX(SI(Stock!$C$5:$E$1500>0,FILA(Stock!$C$5:$E$1500)))
b) EDITA el nombre que haya asignado al area de impresion [Área_de_impresión o... Print_area]
formula: =desref($c$4,,,fila_n-fila($c$4)+1,3)
si todo sale bien... excel pondra algo +/- como: =DEREF(Stock!$C$4,,,Fila_n-FILA(Stock!$C$4)+1,3)
-> toma en cuenta que mi sistema usa como separador de argumentos a la coma ',' NO al punto y coma ';' :D

si cualquier duda... comentas?
saludos,
hector.
KL
2005-09-13 00:12:21 UTC
Permalink
Hola chicos,

"Héctor Miguel" wrote in message news:uKb5Ab%
Post by Héctor Miguel
=max(si($c$5:$e$1500>0,fila($c$5:$e$1500)))
Estaba pensando en como hacer las formulas mas eficientes y, aunque sabia
del comportamiento extrano/irregular de las funciones INDICE, COINCIDIR y
BUSCARV en formulas matriciales, abrigaba la esperanza, pero no ha podido
ser :-o La siguiente formula solo funciona en la hoja, pero no dentro de un
nombre :-((

=MAX(SI(ESNUMERO(COINCIDIR({9,99999999999999E+307;"zzzzzzzzzzzzzzzzz"};DESREF($C:$C;;COLUMNA($C:$E)-COLUMNA($C:$C))));COINCIDIR({9,99999999999999E+307;"zzzzzzzzzzzzzzzzz"};DESREF($C:$C;;COLUMNA($C:$E)-COLUMNA($C:$C)))))

Aunque es mas larga, en realidad esta formula NO MATRICIAL habria sido mas
rapida que la propuesta por HM y habria permitido abarcar toda la hoja.
Bueno, seguiremos buscando :-)
Post by Héctor Miguel
b) EDITA el nombre que haya asignado al area de impresion
[Área_de_impresión o... Print_area]
formula: =desref($c$4,,,fila_n-fila($c$4)+1,3)
Esta si que me parece que podria optimizar un poco mediante:

=$C$4:INDICE($E:$E;Fila_n)

Saludos,
KL
Héctor Miguel
2005-09-13 02:50:24 UTC
Permalink
hola, KL !
Post by Héctor Miguel
a) nombre: Fila_n formula: =max(si($c$5:$e$1500>0,fila($c$5:$e$1500)))
... pensando en como hacer las formulas mas eficientes
... aunque sabia del comportamiento extrano/irregular de las funciones INDICE, COINCIDIR y BUSCARV en formulas matriciales
abrigaba la esperanza, pero no ha podido ser :-o
La siguiente formula solo funciona en la hoja, pero no dentro de un nombre :-(( [...]
... en realidad esta formula NO MATRICIAL habria sido mas rapida que la propuesta por HM y habria permitido abarcar toda la hoja. ... seguiremos buscando :-)
Post by Héctor Miguel
b) EDITA el nombre que haya asignado al area de impresion [Área_de_impresión o... Print_area]
formula: =desref($c$4,,,fila_n-fila($c$4)+1,3)
=$C$4:INDICE($E:$E;Fila_n)
solo comentarios 'al margen' :DD

1) acerca de tu primer propuesta de cambio... [la formula no matricial mas 'rapida']...
a) la verdadera 'razon' por la que no la has podido asignar a un nombre... es por la longitud [caracteres] en la formula :-(
1. tal como la propones [castellanizada] tiene ya 218 caracteres MAS habria que agregar el signo '='
2. al 'pasarla' a nombre-definido... excel va a agregar el nombre de la hoja...
si suponemos que la hoja se llama 'hoja1'...
la longitud total de la formula [en castellano] seria ya de 255 caracteres... ->el limite<- :-(
si suponemos que excel es en ingles y la hoja se llama 'sheet1'...
si suponemos que la hoja se llama... -???- [o si suponemos que se le cambia de nombre]... -???-
b) algo debo estar interpretando mal :-(( no he logrado que me de 'el resultado que se busca' :-((
c) no le veo mucha importancia a la rapidez en una 'funcion' que se necesitara -solo- de manera 'previa' a una impresion -?-
[no creo equivocarme si te aseguro que]... mas tiempo te tomara 'decidir' si pulsas [o no] el boton de imprimir [o cancelar] ;)
2) acerca de tu segunda propuesta de cambio... [recortar los caracteres de la formula con la que se re/define el area de impresion]...
es muy 'atractiva' [tanto... que la he mandado a mi coleccion personal... si no te opones... obviamente] ;)
a pesar de lo anterior... [me parece que... 'cubren' areas/requerimientos/especificaciones/situaciones/... ->diferentes<-

saludos,
hector.
Héctor Miguel
2005-09-13 05:33:16 UTC
Permalink
hola [de nuevo], KL !

otros comentarios 'al margen' ;)

-> 'regresando' a tu primer propuesta de cambio [la formula mas 'rapida']...
'en realidad'... NO esta 'trabajando' sobre la -posible- 'matriz' de columnas :(
solo tiene 'cabida'... buscar cual es la ultima fila con datos EN la primer columna de la formula... 'C'
[por lo tanto] si solo se necesita buscar en esa primer columna...
[me parece que] no tiene sentido 'crecer' la formula [la matricial] en ~5 veces su tama#o 'propuesto'
-> =max(elegir(1+(contar(c:c)>0),0,coincidir(9.99999999999999e+307,c:c)),elegir(1+(contar.si(c:c,"*")>0),0,coincidir(repetir("z",255),c:c)))
o... si no tiene importancia que los si'es condicionales 'consumen' mas recursos que los si'es 'booleanos' [20 caracteres 'menos']...
-> =max(si(contar(c:c)>0,coincidir(9.99999999999999e+307,c:c)),si(contar.si(c:c,"*")>0,coincidir(repetir("z",255),c:c)))
o... si la cuenta/busqueda de la ultima fila [en cualquiera de las -posibles- columnas] se deja en una celda... [la formula matricial]...
-> =max(si(c5:e1500>0,fila(c5:e1500))) [solo 34 caracteres, si no tiene efectos colaterales usar referencias relativas]

lo anterior es -solamente- mientras se puede encontrar la forma de 'adelgazar' y 'desmatricializar' la propuesta 'original' ;)
aunque sigo pensando que en una formula para un 'evento' unico y no muy 'frecuente'... [imprimir o vista preliminar]...
la rapidez de calculo en ese aspecto... deja de ser... 'relevante' -?-

saludos,
hector.
KL
2005-09-13 06:02:10 UTC
Permalink
Hola HM,
Post by Héctor Miguel
'en realidad'... NO esta 'trabajando' sobre la -posible- 'matriz' de columnas :(
solo tiene 'cabida'... buscar cual es la ultima fila con datos EN la
primer columna de la formula... 'C'
Parece que tienes razon - no funciona (juraria que anoche me daba el
resultado buscado, pero igual lo he sonado :-) (wishful thinking)
Post by Héctor Miguel
[por lo tanto] si solo se necesita buscar en esa primer columna...
[me parece que] no tiene sentido 'crecer' la formula [la matricial] en
~5 veces su tama#o 'propuesto'
->
=max(elegir(1+(contar(c:c)>0),0,coincidir(9.99999999999999e+307,c:c)),elegir(1+(contar.si(c:c,"*")>0),0,coincidir(repetir("z",255),c:c)))
o... si no tiene importancia que los si'es condicionales 'consumen' mas
recursos que los si'es 'booleanos' [20 caracteres 'menos']...
->
=max(si(contar(c:c)>0,coincidir(9.99999999999999e+307,c:c)),si(contar.si(c:c,"*")>0,coincidir(repetir("z",255),c:c)))
o... si la cuenta/busqueda de la ultima fila [en cualquiera de
las -posibles- columnas] se deja en una celda... [la formula matricial]...
-> =max(si(c5:e1500>0,fila(c5:e1500))) [solo 34 caracteres, si no tiene
efectos colaterales usar referencias relativas]
Todo esto es bastante obvio y ademas como entenderas no era la idea :-)
Post by Héctor Miguel
lo anterior es -solamente- mientras se puede encontrar la forma de
'adelgazar' y 'desmatricializar' la propuesta 'original' ;)
aunque sigo pensando que en una formula para un 'evento' unico y no muy
'frecuente'... [imprimir o vista preliminar]...
la rapidez de calculo en ese aspecto... deja de ser... 'relevante' -?-
No entiendo muy bien que tiene que ver la frecuencia con la que se va a
imprimir/activar la vista previa con la rapidez de la formula - si la
formula va a recalcular independientemente de si imprimes o no, por lo que
afectaria todos los recalculos. Asi que, a diferencia de ti, estoy
convencido de que en este caso la rapidez y la volatilidad son importantes y
mas aun en libros cargados de formulas y cuando las areas de impresion andan
por decenas de miles de filas ;-)

Saludos,
KL
Héctor Miguel
2005-09-13 07:00:39 UTC
Permalink
hola, KL !
Parece que tienes razon - no funciona (juraria que... daba el resultado buscado... :-) (wishful thinking)
-> jjjuatt ! :DD
... que tiene que ver la frecuencia con la que se va a imprimir/activar la vista previa con la rapidez de la formula
... la formula va a recalcular independientemente de si imprimes o no, por lo que afectaria todos los recalculos
... estoy convencido de que en este caso la rapidez y la volatilidad son importantes
... mas aun en libros cargados de formulas y cuando las areas de impresion andan por decenas de miles de filas ;-)
[creo que] podrias darle 'un poco de credito' al excel :)) ya que este re/calcula [o trata de re/calcular] de manera 'inteligente'
[SOLO] cuando las referencias 'dependientes/precedentes' han sufrido cambios o modificaciones ;)
lo cual -considero- NO significa que se la vaya a pasar re/calculando el modelo 'completo' [SI NO hubo 'necesidad de'...] ;)

[ademas] si -consideras que- la rapidez y volatilidad son de primordial importancia...
1) la funcion desref/offset es de las volatiles que MAS consumo de recursos 'demanda' :-(
tu propuesta de cambio1 la utiliza dos veces [mientras que la propuesta matricial ninguna] ;)
2) no crees que es mas 'sano' delimitar un numero de filas... en lugar de 'poner' a excel a 'detectar en TODAS' [columnas completas] -?-
3) y por si piensas 'recriminarme' que 'mi' propuesta tambien usa la funcion desref/offset [al re/definir el nombre 'print_area']...
te recuerdo que [yo] considero que con el cambio que propones para esta parte [aunque cubren areas y situaciones distintas]...
[y si no dispones otra cosa]... le has agregado la ventaja de 'prescindir' del uso de dicha 'volatilidad' ;)

definitivamente... estoy seguro que OP tendra mas alternativas para seleccionar la que mejor acomode a sus necesidades ;)
saludos,
hector.
KL
2005-09-13 08:06:52 UTC
Permalink
Hola HM,

En primer lugar decirte que es una situacion muy curiosa la mia, ya que se
podria decir que estoy defendiendo una formula que no funciona :-) Bueno, no
exactamente, pongamos que mas bien estoy discutiendo cuestiones generales.
Post by Héctor Miguel
[creo que] podrias darle 'un poco de credito' al excel :)) ya que este
re/calcula [o trata de re/calcular] de manera 'inteligente'
[SOLO] cuando las referencias 'dependientes/precedentes' han sufrido
cambios o modificaciones ;)
lo cual -considero- NO significa que se la vaya a pasar re/calculando el
modelo 'completo' [SI NO hubo 'necesidad de'...] ;)
!Y tanto! le estoy dando mucho credito a Excel, no lo dudes (y si no, por
que estaria yo aqui???). Estaba respondiendo a tu planteamiento generalizado
y no analizando la formula concreta. En este caso es lo que dices, pero, tal
como te he mencionado antes, esto depende de la formula o mas bien de las
funciones que uses (o sea de la inteligencia del que crea la formula y no
tanto de la de Excel). Sabes de sobra que hay funciones del tipo AHORA, HOY,
INDIRECTO [y una que otra mas] que son volatiles siempre y recalcularan en
cada recalculo que se produzca y no solo al cambiar algo en los rangos
implicados.
Post by Héctor Miguel
[ademas] si -consideras que- la rapidez y volatilidad son de primordial importancia...
1) la funcion desref/offset es de las volatiles que MAS consumo de recursos 'demanda' :-(
tu propuesta de cambio1 la utiliza dos veces [mientras que la propuesta
matricial ninguna] ;)
En todo caso no es la que mas y una de las razones por la que me la carge en
la segunda formula era evitar su volatilidad. En el caso de la primera
formula (la fracasada) me parecio un 'trade-off' muy justificado de la
volatilidad por la rapidez.
Post by Héctor Miguel
2) no crees que es mas 'sano' delimitar un numero de filas... en lugar de
'poner' a excel a 'detectar en TODAS' [columnas completas] -?-
Pues va a ser que no :-) Si te fijas, mi formula, aunque posiblemente lo
haga con mayor frecuencia, realiza 37 operaciones (contando cada una de las
operaciones binarias de COINCIDIR como una, ya que tardan practicamente lo
mismo) mientras que la tuya unas 2991. ?Que tal asi?
Post by Héctor Miguel
3) y por si piensas 'recriminarme' que 'mi' propuesta tambien usa la
funcion desref/offset [al re/definir el nombre 'print_area']...
te recuerdo que [yo] considero que con el cambio que propones para esta
parte [aunque cubren areas y situaciones distintas]...
[y si no dispones otra cosa]... le has agregado la ventaja de
'prescindir' del uso de dicha 'volatilidad' ;)
Tres cosas:
1) Ya te lo 'habia recriminado', antes de que te hubieras dado cuenta, por
el simple hecho de cargarmela en mi formula alternativa ;-)
2) No consigo entender el comentario "aunque cubren areas y situaciones
distintas" ya que por lo que veo ambas formulas devuelven el mismo
resultado.
3) Si vuelves a anlizar lo que has escrito en tu ultimo mensaje, seguramente
veras que es una apologia de la importancia de la rapidez y baja volatilidad
en el caso discutido y una negacion casi total de tu frase:

"c) no le veo mucha importancia a la rapidez en una 'funcion' que se
necesitara -solo- de manera 'previa' a una impresion -?-
[no creo equivocarme si te aseguro que]... mas tiempo te tomara 'decidir' si
pulsas [o no] el boton de imprimir [o cancelar] ;)"
Post by Héctor Miguel
definitivamente... estoy seguro que OP tendra mas alternativas para
seleccionar la que mejor acomode a sus necesidades ;)
Pues creo que de momento solo tiene tu solucion (con mi alternativa de la
segunda formula)

Saludos,
KL
Héctor Miguel
2005-09-13 15:37:42 UTC
Permalink
hola, KL !
... situacion muy curiosa la mia... defendiendo una formula que no funciona :-)
... pongamos que mas bien estoy discutiendo cuestiones generales.
Post by Héctor Miguel
2) no crees que es mas 'sano' delimitar un numero de filas... en lugar de 'poner' a excel a 'detectar en TODAS' [columnas completas] -?-
Pues va a ser que no :-) ... mi formula, aunque posiblemente lo haga con mayor frecuencia, realiza 37 operaciones
(contando cada una de las operaciones binarias de COINCIDIR como una, ya que tardan practicamente lo mismo)
mientras que la tuya unas 2991. ?Que tal asi?
=> supongo que lo de las 37 operaciones de 'tu formula' se debe a la 'ultima celda' EN LA PRIMER COLUMNA donde 'pusiste' la prueba :))
y 'asumo' que lo de las 2991 operaciones de 'la mia' se debe al rango 'delimitado que estoy 'proponiendo' de 1500 filas en la formula ;)
nota la siguiente expresion que utilizas en el mensaje al que respondo en el anterior, cuando 'dices' que...
... mas aun en libros cargados de formulas y cuando las areas de impresion andan por decenas de miles de filas ;-)
pregunta: cual sera el numero de operaciones que realice 'tu formula' cuando realmente se trate de 'varias decenas de miles de filas' ??? ;)
Post by Héctor Miguel
definitivamente... estoy seguro que OP tendra mas alternativas para seleccionar la que mejor acomode a sus necesidades ;)
Pues creo que de momento solo tiene tu solucion (con mi alternativa de la segunda formula)
-> totalmente de acuerdo ;)

saludos,
hector.
KL
2005-09-13 16:28:03 UTC
Permalink
Hola HM,
Post by Héctor Miguel
=> supongo que lo de las 37 operaciones de 'tu formula' se debe a la
'ultima celda' EN LA PRIMER COLUMNA donde 'pusiste' la prueba :))
No, he contado todas las operaciones. Como te he comentado he contado las
busquedas binarias como una operacion para cada columna.
Post by Héctor Miguel
y 'asumo' que lo de las 2991 operaciones de 'la mia' se debe al rango
'delimitado que estoy 'proponiendo' de 1500 filas en la formula ;)
Correcto.
Post by Héctor Miguel
nota la siguiente expresion que utilizas en el mensaje al que respondo
en el anterior, cuando 'dices' que...
... mas aun en libros cargados de formulas y cuando las areas de
impresion andan por decenas de miles de filas ;-)
pregunta: cual sera el numero de operaciones que realice 'tu formula'
cuando realmente se trate de 'varias decenas de miles de filas' ??? ;)
Pues fijate - sera el mismo - solo variara al aumentar el numero de
columnas. En cambio el numero de operaciones de tu formula crecera en
proporcion al numero de filas involucradas ;-)

Saludos,
KL
Héctor Miguel
2005-09-13 17:20:05 UTC
Permalink
hola, KL !
Post by Héctor Miguel
=> supongo que lo de las 37 operaciones de 'tu formula' se debe a la 'ultima celda' EN LA PRIMER COLUMNA donde 'pusiste' la prueba :))
No, he contado todas las operaciones. Como te he comentado he contado las busquedas binarias como una operacion para cada columna.
Post by Héctor Miguel
y 'asumo' que lo de las 2991 operaciones de 'la mia' se debe al rango 'delimitado que estoy 'proponiendo' de 1500 filas en la formula ;)
Correcto.
Post by Héctor Miguel
nota la siguiente expresion que utilizas en el mensaje al que respondo en el anterior, cuando 'dices' que...
... mas aun en libros cargados de formulas y cuando las areas de impresion andan por decenas de miles de filas ;-)
pregunta: cual sera el numero de operaciones que realice 'tu formula' cuando realmente se trate de 'varias decenas de miles de filas' ??? ;)
Pues fijate - sera el mismo - solo variara al aumentar el numero de columnas.
En cambio el numero de operaciones de tu formula crecera en proporcion al numero de filas involucradas ;-)
wow !... me acabas de confirmar que 'tu' propuesta 'solamente' hace 37 operaciones 'debido' a que...
-> [para el caso de 3 columnas]... 'bajas' a una matriz_rango de 3x2 y la operacion 'se repite'... n_veces+1
-> y 'sugieres' que NO 'importa' cual sea la 'ultima' fila -real y verdadera-...
[de las varias decenas de miles de filas]... seran 'siempre' -solo- 37 operaciones -???-

sin embargo... 'argumentas' que la propuesta matricial se repetira n_filas x 2 veces [mas wow !] ;)
[tendre que revisar ciertos 'paradigmas'] :))

saludos,
hector.
KL
2005-09-13 20:02:20 UTC
Permalink
Hola HM,

Bueno me he equivocado un pelin evaluando la formula matrical y tal vez haya
subestimado (un poco) el impacto de las busquedas binarias, pero...
Post by Héctor Miguel
wow !... me acabas de confirmar que 'tu' propuesta 'solamente' hace 37
operaciones 'debido' a que...
-> [para el caso de 3 columnas]... 'bajas' a una matriz_rango de 3x2 y
la operacion 'se repite'... n_veces+1
-> y 'sugieres' que NO 'importa' cual sea la 'ultima' fila -real y verdadera-...
[de las varias decenas de miles de filas]... seran 'siempre' -solo-
37 operaciones -???-
como ya te habia dicho, conte las funciones de busqueda binaria como una
operacion, pero si quieres mas precision:

=MAX(SI(ESNUMERO(COINCIDIR({1;"T"};DESREF($C:$C;;COLUMNA($C:$E)-COLUMNA($C:$C))));COINCIDIR({1;"T"};DESREF($C:$C;;COLUMNA($C:$E)-COLUMNA($C:$C)))))1) COINCIDIR({9;"Z"};DESREF($C:$C;;COLUMNA($C:$E)-COLUMNA($C:$C)) a.. COLUMNA($C:$E)-COLUMNA($C:$C)={0\1\2} => 3 operaciones de resta b. DESREF($C:$C;;{0\1\2})={Rng1\Rng2\Rng3} => 3 operaciones dereferencia c. COINCIDIR({9;"Z"};{Rng1\Rng2\Rng3})={...\...\...;...\...\...} => Si es cierto que el numero de escaneos binarios que hace la funcionCOINCIDIR con coincidencia aproximada equivale a =REDONDEAR(LOG(N;2);0),entonces el numero maximo de escaneos debera ser=REDONDEAR(LOG(65536;2);0)=16Suponiendo el peor escenario obtenemos 16*6=96Subtotal: 3+3+96=1022) ESNUMERO(COINCIDIR({1;"T"};DESREF($C:$C;;COLUMNA($C:$E)-COLUMNA($C:$C))) a. ESNUMERO({a\b\c;x\y\z})={V\F\V\F\V\F}=> 6 operaciones de resta + 102de repeticion de lo anteriorSubtotal: 6+102=1083) SI({V\F\V\F\V\F},{a\b\c;x\y\z})={...\...\....;...\...\....} => 6operaciones de evaluacionSubtotal: 64) MAX({...\...\....;...\...\....}) => hasta 6 operaciones de comparacion(desconozco si MAX hace un escaneo lineal o binario)Subtotal: 6Total: 102+108+6+6=222 como maximoCada columna adicional anadira aproximadamente un 30% de operaciones mas.> sin embargo... 'argumentas' que la propuesta matricial se repetira n_filasx 2 veces [mas wow !] ;)> [tendre que revisar ciertos 'paradigmas'] :))=MAX(SI($C$5:$E$1500>0,FILA($C$5:$E$1500)))1) FILA($C$5:$E$1500)={5\6\7\...\1500} => 1495 operaciones devolviendo filapara cada celda2) $C$5:$E$1500>0={V\F\V\F\V\F\...} => 1495*3=4485 operaciones evaluando laequacion para cada celda3) SI({V\F\V\F\V\F\...},{5\6\7\...\1500})={...\...\....;...\...\....} =>4485 evaluaciones de la condicion que resultan en 4485 resultados4) MAX({...\...\....;...\...\....}) => hasta 4485 operaciones de comparacion(desconozco si MAX hace un escaneo lineal o binario)Total: 1495+4485+4485+4485=14950Saludos,KL
KL
2005-09-13 20:10:39 UTC
Permalink
Perdon el mensaje anterior se me ha desconfigurado - aqui va el segundo intento:
----------------------------------------------------

Hola HM,

Bueno me he equivocado un pelin evaluando la formula matrical y tal vez haya
subestimado (un poco) el impacto de las busquedas binarias, pero...
Post by Héctor Miguel
wow !... me acabas de confirmar que 'tu' propuesta 'solamente' hace 37
operaciones 'debido' a que...
-> [para el caso de 3 columnas]... 'bajas' a una matriz_rango de 3x2 y
la operacion 'se repite'... n_veces+1
-> y 'sugieres' que NO 'importa' cual sea la 'ultima' fila -real y verdadera-...
[de las varias decenas de miles de filas]... seran 'siempre' -solo-
37 operaciones -???-
como ya te habia dicho, conte las funciones de busqueda binaria como una
operacion, pero si quieres mas precision:

=MAX(SI(ESNUMERO(COINCIDIR({1;"T"};DESREF($C:$C;;COLUMNA($C:$E)-COLUMNA($C:$C))));COINCIDIR({1;"T"};DESREF($C:$C;;COLUMNA($C:$E)-COLUMNA($C:$C)))))

1) COINCIDIR({9;"Z"};DESREF($C:$C;;COLUMNA($C:$E)-COLUMNA($C:$C))

a.. COLUMNA($C:$E)-COLUMNA($C:$C)={0\1\2} => 3 operaciones de resta
b. DESREF($C:$C;;{0\1\2})={Rng1\Rng2\Rng3} => 3 operaciones dereferencia
c. COINCIDIR({9;"Z"};{Rng1\Rng2\Rng3})={...\...\...;...\...\...} =>
Si es cierto que el numero de escaneos binarios que hace la funcionCOINCIDIR con coincidencia aproximada equivale a =REDONDEAR(LOG(N;2);0),entonces el numero maximo de escaneos debera ser=REDONDEAR(LOG(65536;2);0)=16
Suponiendo el peor escenario obtenemos 16*6=96
Subtotal: 3+3+96=102

2) ESNUMERO(COINCIDIR({1;"T"};DESREF($C:$C;;COLUMNA($C:$E)-COLUMNA($C:$C)))

a. ESNUMERO({a\b\c;x\y\z})={V\F\V\F\V\F}=> 6 operaciones de resta + 102 de repeticion de lo anterior
Subtotal: 6+102=108

3) SI({V\F\V\F\V\F},{a\b\c;x\y\z})={...\...\....;...\...\....} => 6operaciones de evaluacion
Subtotal: 6

4) MAX({...\...\....;...\...\....}) => hasta 6 operaciones de comparacion(desconozco si MAX hace un escaneo lineal o binario)
Subtotal: 6

Total: 102+108+6+6=222 como maximo
Cada columna adicional anadira aproximadamente un 30% de operaciones mas.
Post by Héctor Miguel
sin embargo... 'argumentas' que la propuesta matricial se repetira n_filasx 2 veces [mas wow !] ;)> [tendre que revisar ciertos 'paradigmas'] :))
=MAX(SI($C$5:$E$1500>0,FILA($C$5:$E$1500)))

1) FILA($C$5:$E$1500)={5\6\7\...\1500} => 1495 operaciones devolviendo filapara cada celda
2) $C$5:$E$1500>0={V\F\V\F\V\F\...} => 1495*3=4485 operaciones evaluando la equacion para cada celda
3) SI({V\F\V\F\V\F\...},{5\6\7\...\1500})={...\...\....;...\...\....} =>4485 evaluaciones de la condicion que resultan en 4485 resultados
4) MAX({...\...\....;...\...\....}) => hasta 4485 operaciones de comparacion(desconozco si MAX hace un escaneo lineal o binario)
Total: 1495+4485+4485+4485=14950


Saludos,
KL
Héctor Miguel
2005-09-13 21:44:08 UTC
Permalink
hola, KL !
... me he equivocado... evaluando la formula matrical y... subestimado... el impacto de las busquedas binarias [...]
'resumiendo'...
-> dices que estas utilizando... cual formula ?
-> dices que das entrada... en que rango_matriz ?
-> dices que etas obteniendo... que resultados en cada celda ?
-> si necesitas 'ampliar' el numero de columnas... cuantas de las 256 columnas puedes 'monitorear' ?

saludos,
hector.
Héctor Miguel
2005-09-14 00:55:58 UTC
Permalink
hola, KL !

para elegir segun necesidades... aqui hay una excel...ente coleccion 'inicial'...
de Frank Kabel (D) & Bob Phillips
http://www.xldynamic.com/source/xld.LastValue.html
http://www.xldynamic.com/source/xld.LastValue.html#benchmarks
KL
2005-09-14 04:38:15 UTC
Permalink
Hola HM,
Post by Héctor Miguel
http://www.xldynamic.com/source/xld.LastValue.html
http://www.xldynamic.com/source/xld.LastValue.html#benchmarks
Conozco estas paginas, lo que no hacen estas formulas es encontrar la ultima
fila en varias columnas a la vez. Y lo de benchmarks, casi que no hacen
falta para decir que formula es mas rapida.

Saludos,
KL
KL
2005-09-14 13:08:55 UTC
Permalink
Hola HM,

Cambiando (solo un poco) del tema, tu que manejas varias versiones de
Office, ?sabes si en las versiones posteriores a la 2000 se sigue dando el
problema de LastCell/UsedRange que no se actualiza automaticamente? Se me
ocurre que una formula denominada como =GET.DOCUMENT(10)+(0*RAND()) podria
ser una opcion. La he probado en XL2000 y funciona bien salvo que hay que
resetear el rango usado si se reduce el numero de filas usadas :-(. Si todo
estuviera bien, acabariamos con algo tan simple y rapido como:

FILA=INDICAR.DOCUMENTO(10)+(0*ALEATORIO())
Print_Area=A1:INDICE(1:65536;FILA;255)

Entiendo que el riesgo del famoso derrumbe de Excel en caso de copiar
nombres con funciones XML de una hoja a otra no es relevante ya que el
nombre no se usaria en ninguna hoja del libro.

?Comentas?

Saludos,
KL
Post by KL
Hola HM,
Post by Héctor Miguel
http://www.xldynamic.com/source/xld.LastValue.html
http://www.xldynamic.com/source/xld.LastValue.html#benchmarks
Conozco estas paginas, lo que no hacen estas formulas es encontrar la
ultima fila en varias columnas a la vez. Y lo de benchmarks, casi que no
hacen falta para decir que formula es mas rapida.
Saludos,
KL
KL
2005-09-14 15:36:32 UTC
Permalink
...obviamente se podria usar una UDF que resetearia el rango usado y
devolveria la fila de la ultima celda sin grandes perdidas de velocidad.
Solo que los macros tienen el inconviniente de estar siempre
habilitados/habilitables por razones diversas.

Saludos,
KL
Post by KL
Hola HM,
Cambiando (solo un poco) del tema, tu que manejas varias versiones de
Office, ?sabes si en las versiones posteriores a la 2000 se sigue dando el
problema de LastCell/UsedRange que no se actualiza automaticamente? Se me
ocurre que una formula denominada como =GET.DOCUMENT(10)+(0*RAND()) podria
ser una opcion. La he probado en XL2000 y funciona bien salvo que hay que
resetear el rango usado si se reduce el numero de filas usadas :-(. Si
FILA=INDICAR.DOCUMENTO(10)+(0*ALEATORIO())
Print_Area=A1:INDICE(1:65536;FILA;255)
Entiendo que el riesgo del famoso derrumbe de Excel en caso de copiar
nombres con funciones XML de una hoja a otra no es relevante ya que el
nombre no se usaria en ninguna hoja del libro.
?Comentas?
Saludos,
KL
Post by KL
Hola HM,
Post by Héctor Miguel
http://www.xldynamic.com/source/xld.LastValue.html
http://www.xldynamic.com/source/xld.LastValue.html#benchmarks
Conozco estas paginas, lo que no hacen estas formulas es encontrar la
ultima fila en varias columnas a la vez. Y lo de benchmarks, casi que no
hacen falta para decir que formula es mas rapida.
Saludos,
KL
KL
2005-09-14 19:06:07 UTC
Permalink
Bueno, acabo mi monologo diciendo que las ultimas dos opciones quedan
descartadas porque:

1) (no se por que no se me habia ocurrido antes) la funcion
INDICAR.DOCUMENTO() devuelve la ultima celda que no necesariamente esta
escrita, sino que tambien tiene formatos, comentarios, etc (exactamente
igual que SpecialCells(xlCellTypeLastCell). Eso mismo lo hace Excel si
imprimimos sin crear un area de impresion.

2) partiendo del primer punto, para que una UDF devuelva la ultima celda,
harian falta demasiadas operaciones por lo que el uso de VBA no estaria
justificado dada la existencia de otras soluciones mediante funciones
nativas.

Saludos,
KL
Post by KL
...obviamente se podria usar una UDF que resetearia el rango usado y
devolveria la fila de la ultima celda sin grandes perdidas de velocidad.
Solo que los macros tienen el inconviniente de estar siempre
habilitados/habilitables por razones diversas.
Saludos,
KL
Post by KL
Hola HM,
Cambiando (solo un poco) del tema, tu que manejas varias versiones de
Office, ?sabes si en las versiones posteriores a la 2000 se sigue dando
el problema de LastCell/UsedRange que no se actualiza automaticamente? Se
me ocurre que una formula denominada como =GET.DOCUMENT(10)+(0*RAND())
podria ser una opcion. La he probado en XL2000 y funciona bien salvo que
hay que resetear el rango usado si se reduce el numero de filas usadas
:-(. Si todo estuviera bien, acabariamos con algo tan simple y rapido
FILA=INDICAR.DOCUMENTO(10)+(0*ALEATORIO())
Print_Area=A1:INDICE(1:65536;FILA;255)
Entiendo que el riesgo del famoso derrumbe de Excel en caso de copiar
nombres con funciones XML de una hoja a otra no es relevante ya que el
nombre no se usaria en ninguna hoja del libro.
?Comentas?
Saludos,
KL
Post by KL
Hola HM,
Post by Héctor Miguel
http://www.xldynamic.com/source/xld.LastValue.html
http://www.xldynamic.com/source/xld.LastValue.html#benchmarks
Conozco estas paginas, lo que no hacen estas formulas es encontrar la
ultima fila en varias columnas a la vez. Y lo de benchmarks, casi que
no hacen falta para decir que formula es mas rapida.
Saludos,
KL
Héctor Miguel
2005-09-15 04:34:48 UTC
Permalink
hola, KL !
Bueno, acabo mi monologo diciendo que las ultimas dos opciones quedan descartadas porque [...]
[creo que]... mas que... 'monologo'... [todavia]... 'disparas' mas rapido de lo que 'afinas y apuntas' :))
reza un viejo proverbio por estos lugares... -> rapido... y bien?... no ha habido quien <- ;)

no se si yo me habre 'metido mas alla'... de lo necesario en cuanto al requerimitneo de OP...
ya que [segun mi interpretacion] buscaba una forma 'sencilla y poco elaborada' de auto-ajustar el area de impresion -?-
de ahi que propongo la re/definicion del nombre que asigna excel al rango que se habra de imprimir ;)
de repente [y no veo el 'porque']... unas 'decimas de segundo', de 'no importar'... pasan a ser 'de vida o muerte' -?-
[si recuerdas la consulta de 'potenciacion' en la que finalizaste tu la participacion bajo la anterior 'premisa'] -?-

te concedo [porque efectivamente tienes razon en cuanto a la 'velocidad' en el re/calculo entre formulas y rangos matriz]...
que tu propuesta 'recupera' esas 'vitales decimas de segundo' [aunque no la has podido 'determinar en definitiva'] ;)
SOLO QUE... [y mientras no dispongas diferente]... es necesario 'sacrificar' [o perder] beneficios colaterales, como...
1) el procedimiento definitivamente deja de ser 'poco'... y pasa a ser... 'muy elaborado'
2) se pierde [y mucho] la facilidad/docilidad/amigabilidad/... para modificar la variable o mantenerla 'dinamica'
3) se necesita 'sacrificar' una columna por cada columna a monitorear [para el rango-matriz de x_columnas por 2 filas]
[es decir]... de las 256 columnas de excel... deberas 'separar' la mitad para poder establecer el rango_matriz :-(
4) la alternativa para sacrificar -solamente- 2 columnas es... 'invertir' el rango_matriz a 2 columnas por x_filas ;)
5) aun asi [tengo que insistir en que]... el manejo de las variables deja de ser 'sencillo/docil/amigable/dinamico/etc.' :-(

de cualquier forma... OP [y el lector] gana en alternativas para seleccionar de entre las que mejor acomoden a su necesidad ;)

saludos,
hector.
KL
2005-09-15 06:08:18 UTC
Permalink
Hola HM,
Post by Héctor Miguel
[creo que]... mas que... 'monologo'... [todavia]... 'disparas' mas rapido
de lo que 'afinas y apuntas' :))
reza un viejo proverbio por estos lugares... -> rapido... y bien?... no ha
habido quien <- ;)
Esto tambien hay quienes lo llaman conversacion espontanea en la que se
comparten las ideas en el momento de surgir y se analizan los pros y contras
conjuntamente como alternativa a hacerlo todo uno mismo y ofrecer una
solucion descafeinada y sin grasas saturadas. Ya se que no eres nada
partidario de este tipo de interaccion ;-)
Post by Héctor Miguel
no se si yo me habre 'metido mas alla'... de lo necesario en cuanto al
requerimitneo de OP...
ya que [segun mi interpretacion] buscaba una forma 'sencilla y poco
elaborada' de auto-ajustar el area de impresion -?-
de ahi que propongo la re/definicion del nombre que asigna excel al rango
que se habra de imprimir ;)
Creo que hiciste muy bien, y me parecio un tema muy interesante. Por eso
empece a buscar las posibilidades para mejorar las formulas, pero no hubo
suerte. Luego publique mis ideas para compartir los resultados de mi
experimento y en parte mi frustracion por no conseguir el resultado. Esto
porque creo que aun siendo un fracaso al menos podia ser interesante el
flujo de mi pensamiento al intentar hacerlo.
Post by Héctor Miguel
de repente [y no veo el 'porque']... unas 'decimas de segundo', de 'no
importar'... pasan a ser 'de vida o muerte' -?-
Bulex! Sencillamente, mientras yo esperaba (ingenuamente) una critica
constructiva de la formula y algunas ideas sobre el por que de no funcionar
la formula o como hacer que funcionara, Hector Miguel suelta frases del tipo
global basicamente tachando de innecesario este intento de encontrar una
mejora a la solucion, que fueron la causa de la discusion y no el hecho de
ganar unas decimas de segundos ya que probablemente no sabremos nunca
cuantos segundos se habrian ganado (la primera formula no llego a nacer). Y
como ya te habia comentado, los mensajes tuyos que siguieron ya llevaban un
caracter claro de sermones y constatacion de cosas obvias, y en estos casos
tiendo a llevar la contraria casi siempre - me gusta el rol del abogado del
diablo (ya conoces una mas de mi debilidades)
Post by Héctor Miguel
[si recuerdas la consulta de 'potenciacion' en la que finalizaste tu la
participacion bajo la anterior 'premisa'] -?-
Aparte de que creo que estos dos casos son totalmente distintos y el ahorro
de tiempo seria bastante mas significativo, creo que "you have totally
missed the point": la idea no era hacer una formula mas rapida porque si,
sino conseguir la flexibilidad para no estar limitado dentro de 1500 x 4 o
tal vez 10000 x 50 filas de datos que es cuando tu formula creo que
empezaria a ser un peso notable para la aplicacion.
Post by Héctor Miguel
SOLO QUE... 1) el procedimiento definitivamente deja de ser 'poco'... y
pasa a ser... 'muy elaborado'
No se este es una caso claro de disparar sin apuntar por tu parte. Por mi el
procedimiento es exactamente el mismo: dos formulas denominadas donde una
lleva (habria llevado) el nombre de Print_Area, la diferencia radica en una
de las formulas.
Post by Héctor Miguel
2) se pierde [y mucho] la facilidad/docilidad/amigabilidad/... para
modificar la variable o mantenerla 'dinamica'
Las formulas matriciales en general son dificiles de entender y son
desconocidas por la mayoria absoluta de los usuarios. En esto de
amigabilidad no veo mucha diferencia entre las dos formulas. En el resto de
los factores te concedo la razon, pero la palabra 'mucho' me parece un
exageracion o mas bien una subjetividad total.
Post by Héctor Miguel
3) se necesita 'sacrificar' una columna por cada columna a monitorear
[para el rango-matriz de x_columnas por 2 filas]
[es decir]... de las 256 columnas de excel... deberas 'separar' la
mitad para poder establecer el rango_matriz :-(
4) la alternativa para sacrificar -solamente- 2 columnas es... 'invertir'
el rango_matriz a 2 columnas por x_filas ;)
Estos dos puntos te agradeceria que me los expliques (se que lo has
mencionado antes) porque no acabo de verles la razon. Espero que no sea el
hecho de que mi formula en realidad devuelve la ultima fila de la primera
columna del rango elegido y no la mayor de las ultimas filas de todas ellas
[en todo momento he estado basandome en la suposicion de que la formula
funciona tal como yo esperaba que funcionara] :-)
Post by Héctor Miguel
5) aun asi [tengo que insistir en que]... el manejo de las variables deja
de ser 'sencillo/docil/amigable/dinamico/etc.' :-(
...sin comentarios

Saludos,
KL
Héctor Miguel
2005-09-16 01:43:49 UTC
Permalink
hola, KL !

vamos partiendo de las siguientes tres premisas [si crees que es correcto]...
1) encontrar cual es [el numero de] la ultima fila dentro de un grupo de columnas especifico
2) re/definir el nombre que auto-establece excel para el rango que se habra de imprimir [area_de_impresion o print_area]
3) el rango de columnas [segun consulta de OP] es de tres... 'C', 'D' y 'E'

las propuestas [hasta ahora] han sido...
___
[hm] 1) encontrar la ultima fila y asignarla a un nombre mediante una formula matricial
[hm] 2) re/definir el nombre [area de impresion] usando la funcion 'desref' [con parametros mas 'flexibles']
___
[KL] 1) usar una formula NO matricial [que no ha podido ser 'definida/determinada/probada/...'
[KL] 2) re/definir el nombre [area de impresion] usando la funcion 'indice' [mas rapida pero... menos 'flexible']

[solo por 'facilidad']... dejo fuera de un analisis 'semi-exhaustivo' las formulas de mi propuesta 'original'
[ya KL te habras encargado de analizarlas] ;)

la primer propuesta de formula, que no se termino de probar para 'justificar' si era [o no] funcional/operable/etc. 'reporta' lo siguiente:
a) no se puede 'asigar' a un nombre_formula [ya esta comentado que es] por el numero de caracteres 'agregables' al definir el nombre
b) para que sea 'funcional'... es IMPRESCINDIBLE 'bajarla' a un rango_matriz de mismas_columnas_x_2_filas [o sea... 3 cols / 2 filas]
[es decir... aun recortandola y asignandola a un nombre SIN bajarla a un rango.... NUNCA va a funcionar] :-(
c) esta siendo 'reduntante sobre si misma' [probablemente es por eso que la has dejado por... 'descanse en paz'] -?-
SOLO se necesita la parte 'medular' de la formula que desarrollaste... BAJADA a un rango de 3_cols / 2_filas [digamos... 'F1:H2']
si seleccionas el rango de ejemplo e introduces la siguiente formula... terminando la edicion con ctrl+shift+enter...
=coincidir({9.99999999999999e+307\"zzzzzzzzzzzzzzz"},desref($c:$c,,columna($c:$e)-columna($c:$c)))
solo se necesitara una celda adicional para 'encontrar' cual es la mayor de las ultimas filas de las columnas 'C:E'
[que por omision... TAMBIEN debe ser introducida/editada como matricial... ctrl+shift+enter] <= OJO
op1: =max(si(eserror(f1:h2),,f1:h2))
op2: =max(si(esnumero(f1:h2),f1:h2))
d) el rango_matriz NO puede 'coincidir' con el inicio del rango 'columnas_a_monitorear'
es decir... si las columnas_a_monitorear son C, D y E el rango_matriz NO podria cambiarse de F1:H2 a... C1:E2 [columna_1 = C]
e) si alguna columna del rango_matriz 'cae dentro' de las columnas_a_monitorear [probablemente] va a ser un 'estorbo en la cuenta' -?-
[sobre todo si llegara a ser necesario detectar tambien cual es la primer celda 'ocupada' dentro de el grupo de columnas] -?-
era por eso mi comentario de que se necesita 'apartar' para el rango_matriz tantas columnas como columnas_a_monitorear
de donde tambien se desprende que podrian monitorearse 256 / 2 - 1 = 127 columnas

para 'evadir' las columnas 'sacrificables' [si fuera el caso de varias-muchas], invertir el rango_matriz columnas a filas y filas a columnas
[p.e.] en A1:B3 la formula: =coincidir({9.99999999999999e+307;"zzzzzzzzzzzzzzz"},desref($c:$c,,fila($1:$3)-1))

tomar en cuenta que mi sistema en matrices constantes separa fias por barra inversa '\' y columnas por punto y coma ';' <= OJO

ambas formas [rango_matriz ya sea por columnas o por filas] carecen de flexibilidad para ampliar/reducir las columnas_a_monitorear
[incluyendo a la propuesta de re/definicion del nombre} si los grupos de columnas habran de ser fijos... me parece que son 'perfectas'] ;)

existe la alternativa de buscar 'la ultima fila' [real] por macros... aunque no asegura que corresponda al grupo de columnas_a_monitorear :-(

espero que sea 'apreciable' que lo que estoy exponiendo como 'desventajas' de un procedimiento se convierte en 'ventajas' para el otro :D

hay mas 'tela de donde cortar'... pero este mensaje se ha salido de mis 'parametros' :DD

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

p.d. y puesto que [de todas formas] a mis -intentos de- tips, consejos [o como quieras llamarlos] los consideras 'sermones'...
[pues]... 'ahi te van'... mis respuestas a tus respuestas... o sea...
a continuacion hago un intento por explicar 'lo oculto' [segun yo] de la discusion que se ha originado por lo tocante a esta consulta ;)
[de pasadita...] no se porque te ha dado por sentirte 'agredido' por [algunas de] mis intervenciones -?-
te anticipo que [sin dudar] los convencionalismos, modismos y costumbres regionales estan tomando parte en los 'malos entendidos' :-(
no olvides que el castellano [como toda lengua 'romance'] es una lengua 'rica en significados' :D
tu como profesor de idiomas no ignoras lo anterior [p.e.] la expresion: camisiñas...
-> en mexico es una forma 'jocosa' de hacer referencia a una prenda de vestir [camisa, camiseta, 't-shirt', etc.]
-> en brasil es un vocabulo con el que se hace referencia a los preservativos plastificados [los condones] :))

si dentro de 'mi forma' de ser/escribir/... incluyo un 'expresionismo' [quizas]... 'exagerado' [o a veces molesto para 'otros']...
y algunas veces mis 'propuestas/respuestas' llevan algo de... 'enigmaticas' [buscando 'motivar' la imaginacion del lector] :DD
procurare 'medirme' [al menos cuando 'responda' a comentarios tuyos de una manera que pudiera parecer poco... 'impersonal'] :))

no puedo asegurarte que lo lograre... siempre :-(( lamentablemente [y como 'versa' una cancion bernacula de mi tierra... MEXICO]...
"no soy monedita de oro... pa' caerles bien a todos... asi naci o asi soy... si no me quieren... ni modo"
== == == == == ==
... hay quienes lo llaman conversacion espontanea... se que no eres... partidario de este tipo de interaccion ;-)
___
-> tambien hay quienes utilizan una 'lluvia de ideas' ;)
[solo me parece que no es este... 'el caso'... el lugar... ni la forma de 'llamar' a un 'brain-storm'... 'a raja-tabla'] :(
... me parecio un tema muy interesante... empece a buscar las posibilidades para mejorar las formulas, pero no hubo suerte.
... publique mis ideas para compartir los resultados de mi experimento y en parte mi frustracion por no conseguir el resultado
... creo que aun siendo un fracaso... podia ser interesante el flujo de mi pensamiento al intentar hacerlo.
... esperaba (ingenuamente) una critica constructiva de la formula... ideas sobre el por que de no funcionar... o como hacer que funcionara
... Hector Miguel suelta frases del tipo global basicamente tachando de innecesario este intento de encontrar una mejora a la solucion
... causa de la discusion y no... unas decimas de segundos ya que... no sabremos nunca cuantos segundos se habrian ganado
... (la primera formula no llego a nacer)... los mensajes tuyos que siguieron ya llevaban un caracter claro de sermones y... cosas obvias
... en estos casos tiendo a llevar la contraria casi siempre - me gusta el rol del abogado del diablo (ya conoces una mas de mi debilidades)
___
-> lo anterior [creo yo que] no dejan de ser meras apreciaciones [personales y subjetivas] -?-
1) [para mi] no es 'absoluto' el comentario que haces de que... 'no hubo suerte' [en tus intentos de encontrar alternativas]
[simplemente] a las pruebas que hicieron falta [probablemente] les 'robo tiempo' una 'necesidad/costumbre' por 'postear' cuanto antes :))
2) si [ingenuamente?...] esperabas 'criticas constructivas' del porque o como... [segun yo y hasta donde mis conocimientos alcanzan]...
a) el primer comentario que hago ES [precisamente] el 'por que' no funciona cuando intentaste asignarla a un nombre definido -no?-
b) con lo anterior, la solucion [o propuesta de posible solucion] estaba ya planteada/sembrada/anunciada/... [al menos, asi lo crei] -?-
[considero que a un 'excelomano' con tus capacidades, no es necesario 'llevarlo de la mano... hasta la consecucion de un fin'] ;)
3) para saber cuanto tiempo se ahorra entre una propuesta y otra... [simplemente] 'termina' de hacer las pruebas que sean necesarias :))
[de pasadita... compruebas si pueden considerarse como 'sacrificio' las 'restricciones' que se derivan de los rangos_matriz]
4) yo TAMPOCO descarte la posibilidad de 'mejorar' la propuesta inicial... si recuerdas un mensaje 'agregado' a mi primer respuesta...
-> "lo anterior es -solamente- mientras se puede encontrar la forma de 'adelgazar' y 'desmatricializar' la propuesta 'original' ;)"
5) si vas a jugar el papel de abogado [ya sea 'de los buenos' o... 'de los malos']... procura [y que no se te olvide]...
NO hagas preguntas... de las cuales... NO sepas 'la respuesta' :( [suena a paradoja ?... pues, asi es... 'entre abogados'] ;)
... estos dos casos son totalmente distintos y el ahorro de tiempo seria bastante mas significativo... "you have totally missed the point"
... la idea no era hacer una formula mas rapida porque si, sino conseguir la flexibilidad para no estar limitado dentro de 1500 x 4 o... filas
... que es cuando tu formula creo que empezaria a ser un peso notable para la aplicacion.
___
-> 'I don't think so'... 'time and savings'... no significa que sea 'generador de riqueza'... 'invertir enteros... para ahorrar fracciones' :D
dos formulas denominadas donde una lleva (habria llevado) el nombre de Print_Area, la diferencia radica en una de las formulas.
___
-> independientemente de cual procedimiento se utilice para 'detectar' cual es la 'ultima fila' en un grupo de columnas 'especifico'...
[y tambien -si no recuerdo mal-]... tu propuesta de formula ->=$C$4:INDICE($E:$E;Fila_n)<-
a) me parecio sumamente interesante, tanto... que la agregue a una coleccion de KL-trucos ;)
b) a pesar de lo anterior... [me parece que] 'cubren' areas/requerimientos/especificaciones/situaciones/... ->diferentes<-
[lo de las diferencias en 'coberturas' y demas temas relacionados -espero que- habra quedado +/- clarificado] -?-
c) la unica diferencia es... cual de las propuestas se elija para determinar la ultima fila...
[ya sea la propuesta de la formula matricial que... 'come-tiempo'... o 'bajar' una matriz a un rango, que... 'come-columnas'] :))
Las formulas matriciales en general son dificiles de entender y son desconocidas por la mayoria absoluta de los usuarios.
En esto de amigabilidad no veo mucha diferencia entre las dos formulas.
En el resto de los factores te concedo la razon, pero la palabra 'mucho' me parece un exageracion o mas bien una subjetividad total.
___
-> si la palabra 'mucho' [y el contexto bajo el que la utilizo] te parece una 'exageracion o subjetividad... total'...
a que 'te suena' tu expresion... "Las formulas matriciales... son desconocidas por la mayoria absoluta de los usuarios" -???- ;)
[ademas, estoy seguro que no 'aplica' el termino... 'dificil de entender', a la matricial propuesta... o si ?] :D
Post by Héctor Miguel
3) se necesita 'sacrificar' una columna por cada columna a monitorear [para el rango-matriz de x_columnas por 2 filas]
[es decir]... de las 256 columnas de excel... deberas 'separar' la mitad para poder establecer el rango_matriz :-(
4) la alternativa para sacrificar -solamente- 2 columnas es... 'invertir' el rango_matriz a 2 columnas por x_filas ;)
... te agradeceria que me los expliques (se que lo has mencionado antes) porque no acabo de verles la razon.
Espero que no sea el hecho de que mi formula... devuelve la ultima fila de la primera columna del rango... y no la mayor de ...
[en todo momento he estado basandome en la suposicion de que la formula funciona tal como yo esperaba que funcionara] :-)
___
-> como lo comentas [y confirmas] en el parrafo anterior... te has estado 'basando'... ->en una suposicion<-
sobre la cual NO has llegado a 'concretar' una prueba :-(
NO es que tu propuesta no pueda devolver mas que la ultima fila de la primer columna en el rango -variable- espeificado en la formula...
[una vez mas]... solo hizo falta 'agotar' las pruebas ANTES de dar [o descartar] la formula por 'poco funcional'
[o despedirla con un: 'en paz descanse'] D
la exposicion inicial del presente, [espero] habra dejado claro cuales [considero] son 'sacrificios' y donde 'se pierde amigabilidad/etc.' ;)
y disculpa por no haber compartido con mas anticipacion los resultados de estas pruebas :(
[como he comentado antes]... a veces mis respuestas son... 'enigmaticas'... ->tratando de 'motivar' la imaginacion del lector<- :D
KL
2005-09-16 06:15:32 UTC
Permalink
Hola HM,

Te agradezco el tiempo que has tomado para responderme y el anlisis
constructivo de ambas opciones. Me parece muy bueno (tal como lo habia
esperado inicialmente) este analisis de las opciones discutidas.

Ahora ya entiendo a que te referias diciendo "bajar una matriz a un rango" y
te comento que esta opcion la habia probado incluso antes de publicar mi
primer mensaje y la descarte por aparatosa y por las razones que expones
aqui. Asi que en ningun momento me la he planteado como una opcion dada la
existencia de tu solucion inicial. En todo momento me referia a una
situacion hipotetica de que funcionara la primera formula dentro de un
nombre. Pero antes de aplicar la funcion MAX solo devolvia un numero y no
una matriz como you esperaba (el tema del numero de caracteres si que llego
despues cuando, imagino, probaste la formula en castellano). Es por eso que
digo que no sabremos exactamente cuanto tardaria la formula - para eso
deberia funcionar en primer lugar.

Respecto a los temas no relacionados estrictamente al Excel, como lo de
objetivos, habitos, conocimientos, facultades personales, emociones,
malentendidos, regionalismos, etc, no pienso seguir desarrollando los
temas - los tenemos hablados a muerte y cada uno queda con su opinion. Solo
decirte que no son las palabras o frases con significados concretos los que
estorban/estropean la conversacion sino la clara actitud de ironia,
condescendencia y el propio hecho de referirse a la persona en los
comentarios tipo: "probablemente no has tomado el tiempo suficiente para..."
etc. Por tanto me parece muy prometedora la siguiente frase: " procurare
'medirme' [al menos cuando 'responda' a comentarios tuyos de una manera que
pudiera parecer poco... 'impersonal'] :))" aunque a mi juicio se basa en
juicios/premisas equivocadas :-)

Y respecto a " no puedo asegurarte que lo lograre... siempre :-((
lamentablemente [y como 'versa' una cancion bernacula de mi tierra...
MEXICO]...
Post by Héctor Miguel
"no soy monedita de oro... pa' caerles bien a todos... asi naci o asi
soy... si no me quieren... ni modo" - de eso no hay problema, pero ya
sabras por que se calienta la conversacion o por que uno pasa del otro :-D
A si, casi se me olvidaba! Si tienes dudas como "ademas, estoy seguro que no
'aplica' el termino... 'dificil de entender', a la matricial propuesta... o
si ?" y este grupo no da suficiente informacion para el anlisis, mirate el
foro microsoft.public.excel.worksheet.functions. Creo que la mayoria de las
dudas tienen que ver con el uso de SUMAPRODUCTO y con no entender como es
que funciona o no funciona la formula =SUMAPRODUCTO((A1:A10=1)*B1:B10) etc.
etc. etc. Y fuera de estos grupos ni te digo, en mis oficinas europeas las
formulas matriciales producen un choque entre usuarios incluso relativamente
avanzados en los temas de formulas.

Saludos,
KL

KL
2005-09-13 10:23:46 UTC
Permalink
Por cierto, comentar que las funciones INDICE, COINCIDIR y BUSCARV tienen un
comportamiento increible dentro de las formulas matriciales (tema que al
parecer Alan Beban y Harlan Grove llevan discutiendo durante anos:
http://tinyurl.com/8sdot ).

La formula:
=MAX(SI(ESNUMERO(COINCIDIR({9,99999999999999E+307;"zzzzzzzzzzzzzzzzz"};DESREF($C:$C;;COLUMNA($C:$E)-COLUMNA($C:$C))));COINCIDIR({9,99999999999999E+307;"zzzzzzzzzzzzzzzzz"};DESREF($C:$C;;COLUMNA($C:$E)-COLUMNA($C:$C)))))

obviamente no funciona como se esperaba aunque

tanto
COINCIDIR({9,99999999999999E+307;"zzzzzzzzzzzzzzzzz"};DESREF($C:$C;;COLUMNA($C:$E)-COLUMNA($C:$C))))

como
ESNUMERO(COINCIDIR({9,99999999999999E+307;"zzzzzzzzzzzzzzzzz"};DESREF($C:$C;;COLUMNA($C:$E)-COLUMNA($C:$C))))

devuelven matrices, cosa que no se comprueba mediante F9 en la barra de
formulas, pero SI introduciondolas en un rango de 3 celdas de ancho y 2 de
alto mediante Ctrl+Shift+Enter

Este mismo comportamiento se puede observar en BUSCARV cuando el 1o
argumento es una matriz o en INDICE cuando el 2o y/o 3o argumentos son
matrices.

Saludos,
KL
Post by KL
Hola HM,
En primer lugar decirte que es una situacion muy curiosa la mia, ya que se
podria decir que estoy defendiendo una formula que no funciona :-) Bueno,
no exactamente, pongamos que mas bien estoy discutiendo cuestiones
generales.
Post by Héctor Miguel
[creo que] podrias darle 'un poco de credito' al excel :)) ya que este
re/calcula [o trata de re/calcular] de manera 'inteligente'
[SOLO] cuando las referencias 'dependientes/precedentes' han sufrido
cambios o modificaciones ;)
lo cual -considero- NO significa que se la vaya a pasar re/calculando el
modelo 'completo' [SI NO hubo 'necesidad de'...] ;)
!Y tanto! le estoy dando mucho credito a Excel, no lo dudes (y si no, por
que estaria yo aqui???). Estaba respondiendo a tu planteamiento
generalizado y no analizando la formula concreta. En este caso es lo que
dices, pero, tal como te he mencionado antes, esto depende de la formula
o mas bien de las funciones que uses (o sea de la inteligencia del que
crea la formula y no tanto de la de Excel). Sabes de sobra que hay
funciones del tipo AHORA, HOY, INDIRECTO [y una que otra mas] que son
volatiles siempre y recalcularan en cada recalculo que se produzca y no
solo al cambiar algo en los rangos implicados.
Post by Héctor Miguel
[ademas] si -consideras que- la rapidez y volatilidad son de primordial
importancia...
1) la funcion desref/offset es de las volatiles que MAS consumo de
recursos 'demanda' :-(
tu propuesta de cambio1 la utiliza dos veces [mientras que la
propuesta matricial ninguna] ;)
En todo caso no es la que mas y una de las razones por la que me la carge
en la segunda formula era evitar su volatilidad. En el caso de la primera
formula (la fracasada) me parecio un 'trade-off' muy justificado de la
volatilidad por la rapidez.
Post by Héctor Miguel
2) no crees que es mas 'sano' delimitar un numero de filas... en lugar de
'poner' a excel a 'detectar en TODAS' [columnas completas] -?-
Pues va a ser que no :-) Si te fijas, mi formula, aunque posiblemente lo
haga con mayor frecuencia, realiza 37 operaciones (contando cada una de
las operaciones binarias de COINCIDIR como una, ya que tardan
practicamente lo mismo) mientras que la tuya unas 2991. ?Que tal asi?
Post by Héctor Miguel
3) y por si piensas 'recriminarme' que 'mi' propuesta tambien usa la
funcion desref/offset [al re/definir el nombre 'print_area']...
te recuerdo que [yo] considero que con el cambio que propones para
esta parte [aunque cubren areas y situaciones distintas]...
[y si no dispones otra cosa]... le has agregado la ventaja de
'prescindir' del uso de dicha 'volatilidad' ;)
1) Ya te lo 'habia recriminado', antes de que te hubieras dado cuenta, por
el simple hecho de cargarmela en mi formula alternativa ;-)
2) No consigo entender el comentario "aunque cubren areas y situaciones
distintas" ya que por lo que veo ambas formulas devuelven el mismo
resultado.
3) Si vuelves a anlizar lo que has escrito en tu ultimo mensaje,
seguramente veras que es una apologia de la importancia de la rapidez y
baja volatilidad en el caso discutido y una negacion casi total de tu
"c) no le veo mucha importancia a la rapidez en una 'funcion' que se
necesitara -solo- de manera 'previa' a una impresion -?-
[no creo equivocarme si te aseguro que]... mas tiempo te tomara 'decidir'
si pulsas [o no] el boton de imprimir [o cancelar] ;)"
Post by Héctor Miguel
definitivamente... estoy seguro que OP tendra mas alternativas para
seleccionar la que mejor acomode a sus necesidades ;)
Pues creo que de momento solo tiene tu solucion (con mi alternativa de la
segunda formula)
Saludos,
KL
Héctor Miguel
2005-09-13 15:26:19 UTC
Permalink
hola, KL !
... INDICE, COINCIDIR y BUSCARV tienen un comportamiento increible dentro de las formulas matriciales
... Alan Beban y Harlan Grove llevan discutiendo durante ... http://tinyurl.com/8sdot ).
conozco 'esta' discusion [y una que otra mas] entre HG y 'otros' ;)
=MAX(SI(ESNUMERO(COINCIDIR({9,99999999999999E+307;"zzzzzzzzzzzzzzzzz"} [...]
obviamente no funciona como se esperaba aunque
tanto
COINCIDIR({9,99999999999999E+307;"zzzzzzzzzzzzzzzzz"};DESREF($C:$C;;COLUMNA($C:$E)-COLUMNA($C:$C))))
como
ESNUMERO(COINCIDIR({9,99999999999999E+307;"zzzzzzzzzzzzzzzzz"};DESREF($C:$C;;COLUMNA($C:$E)-COLUMNA($C:$C))))
devuelven matrices... introduciondolas en un rango de 3 celdas de ancho y 2 de alto mediante Ctrl+Shift+Enter [...]
[ahora soy yo que...] no entiendo si lo anterior que comentas 'aporta' algo 'en favor' de tu propuesta de cambio1 -?-
si bien es cierto que existen formulas mas 'rapidas' [por el simple hecho de que no se requiere introducirlas con ctrl-shift-enter]
no siempre significa que NO sean 'formulas matriciales' [es decir... de cualquier forma SI estan 'trabajando' matricialmente] ;)
ademas de que NO siempre son 'aprovechables' [como el caso que mencionas] SI es requisito 'bajarlas' a un rango de n_filas/columnas :-(
[p.e. si comentaste que 'esperabas' poder 'abarcar' toda la hoja... esto significa 'reducirla' por mitad para poder 'bajar' la formula ???]

en fin... si ya has visto que [de momento] la matricial es la unica forma/formula 'a la rapida' de encontrar la ultima fila en varias columnas... ;)

saludos,
hector.
KL
2005-09-13 15:58:35 UTC
Permalink
Hola HM,
Post by Héctor Miguel
[ahora soy yo que...] no entiendo si lo anterior que comentas 'aporta'
algo 'en favor' de tu propuesta de cambio1 -?-
Este mensaje era simplemente 'a propo' y no servia para defender ni atacar
la primera formula. Ademas esta claro que no funciona (que en paz descanse)
:-P
Simplemente me parecio que venia al caso y casi que no eras el destinatario
principal ;-)
Post by Héctor Miguel
si bien es cierto que existen formulas mas 'rapidas' [por el simple hecho
de que no se requiere introducirlas con ctrl-shift-enter]
no siempre significa que NO sean 'formulas matriciales' [es decir... de
cualquier forma SI estan 'trabajando' matricialmente] ;)
con permiso, el parrafo anterior me parece una perogrullada. Y ya puestos a
decir banalidades, podriamos matizar que hay formulas matriciales
(introducidas con ctrl-shift-enter o no) que operan con matrices de 6
miembros y otras que usan 1500 ;-)
Post by Héctor Miguel
SI es requisito 'bajarlas' a un rango de n_filas/columnas :-(
[p.e. si comentaste que 'esperabas' poder 'abarcar' toda la hoja... esto
significa 'reducirla' por mitad para poder 'bajar' la formula ???]
lo siento, se me escapa el significado de esta frase.

Saludos,
KL
Héctor Miguel
2005-09-13 16:07:27 UTC
Permalink
hola, KL !
Post by KL
lo siento, se me escapa el significado de esta frase.
[creo que] no tiene caso ya... [me acabas de dar la razon] ;)

saludos,
hector.
Loading...