Funciones Anidadas

28/02/2005 - 20:44 por Gina | Informe spam
Alguien me puede ayudar a analizar la siguiente formula,
bueno mas que analizar a ver porque al cambiar un
parametro envia error

=IF(ISERROR(IF(ISERROR(VLOOKUP($BG2,db_mue,1,FALSE)),IF
(ISERROR(VLOOKUP(CONCATENATE(MID($BG2,1,7),"XX","_",RIGHT
($BG2,3)),db_mue,1,FALSE)),VLOOKUP(CONCATENATE(MID
($BG2,1,10),"*"),db_mue,1,FALSE),VLOOKUP(CONCATENATE(MID
($BG2,1,7),"XX","_",RIGHT($BG2,3)),db_mue,1,FALSE)),IF
(ISERROR(VLOOKUP(CONCATENATE(MID
($BG2,1,10),"*"),db_mue,1,FALSE)),VLOOKUP(CONCATENATE(MID
($BG2,1,7),"XX","_","*"),db_mue,1,FALSE),VLOOKUP
($BG2,db_mue,1,FALSE)))),"Incorrecta",IF(ISERROR(VLOOKUP
($BG2,db_mue,1,FALSE)),IF(ISERROR(VLOOKUP(CONCATENATE(MID
($BG2,1,7),"XX","_",RIGHT($BG2,3)),db_mue,1,FALSE)),VLOOKUP
(CONCATENATE(MID($BG2,1,10),"*"),db_mue,1,FALSE),VLOOKUP
(CONCATENATE(MID($BG2,1,7),"XX","_",RIGHT
($BG2,3)),db_mue,1,FALSE)),IF(ISERROR(VLOOKUP(CONCATENATE
(MID($BG2,1,10),"*"),db_mue,1,FALSE)),VLOOKUP(CONCATENATE
(MID($BG2,1,7),"XX","_","*"),db_mue,1,FALSE),VLOOKUP
($BG2,db_mue,1,FALSE))))

En el segundo renglon hay una formula:

MID($BG2,1,7)

si esta formula se mentiene así no hay problema la formula
completa funciona correctamente, pero si hago un cambio
necesario como el que sigue:

MID($BG2,1,FIND("_",BG2))

envia error, si ven la funcion en la penultima linea viene
la misma formula, si aplico aqui el cambio no manda error,
alguien puede decirme por que sucede esto?

Preguntas similare

Leer las respuestas

#1 Héctor Miguel
01/03/2005 - 08:59 | Informe spam
hola, Gina !

... analizar la siguiente formula, bueno mas que analizar a ver porque al cambiar un parametro envia error
... [sigue formula +/- 'larguita']... <ver la consulta original> :))
... segundo renglon hay una formula: MID($BG2,1,7)
... no hay problema... pero si hago un cambio necesario como el que sigue: MID($BG2,1,FIND("_",BG2))
... envia error... en la penultima linea... la misma formula, si aplico aqui el cambio no manda error
... por que sucede esto?



1.- cuando 'intentas' modificar de: MID($BG2,1,7) a: -> MID($BG2,1,FIND("_",BG2)) [segunda linea de tu mensaje]
el 'error' es causado porque la funcion ->'Find()'<- estaria excediendo ->el limite<- de funciones 'anidadas' :(

2.- 'aprovechando el viaje', despues de [tratar de] 'analizar' la formula que estas empleando [y segun 'entiendo']...
lo que 'se busca' es: localizar un dato en la primera columna de una tabla [o base de datos] ->NO ordenada<-
dicho dato pudiera ser 'localizado'...
a) de manera 'directa' -> vlookup($bg2,db_mue,1,false)
b) de manera 'parcial' -> vlookup(concatenate(mid($bg2,1,7),"XX","_","*"),db_mue,1,false)
c) de manera 'forzada' -> vlookup(concatenate(mid($bg2,1,10),"*"),db_mue,1,false)
d) o 'simplemente'... NO se encuentra en la tabla -> "Incorrecta"

-> si he entendido +/- bien... prueba con la siguiente formula [65% mas 'delgada']
obviamente debe ser en una sola linea, la separo para que sea +/- 'entendible'

=choose(1+max(
3*not(iserror(vlookup($bg2,db_mue,1,0))),
2*not(iserror(vlookup(left($bg2,7)&"xx_"&right($bg2,3),db_mue,1,0))),
1*not(iserror(vlookup(left($bg2,10)&"*",db_mue,1,0)))),
"incorrecta",
vlookup(left($bg2,10)&"*",db_mue,1,0),
vlookup(left($bg2,7)&"xx_"&right($bg2,3),db_mue,1,0),
vlookup($bg2,db_mue,1,0))

si cualquier duda... ¿comentas?
saludos,
hector.
Respuesta Responder a este mensaje
#2 Gina
01/03/2005 - 19:42 | Informe spam
Caray Hector, no pense que alguien pudiera saber el
objetivo de la formula, debo admitir que me dejaste
sorprendida y mas aun con la depuracion que le hiciste y
con lo cual obtuve mejores resultados, quisiera saber en
donde aprendiste, digo si no es indiscrecion

De cualquier manera y esperando no sonar chocante me queda
la duda del porque del error en mi formula, como lo
comente, en otro lugar de la formula esta la misma funcion
con exactamente los mismos parametros y las mismas
funciones anidadas,si hago el cambio alli no hay ningun
problema, lo cual quiere decir que no excede el limite de
funciones anidadas, no quisiera quedarme con la duda pero
si no hay de otra, pues que se le puede hacer

Con esto no quiero decir que no te agradezco tu ayuda, por
el contrario, me ha ayudado mas de lo que esperaba ya que
la formula original debia tenerla en por lo menos 10,000
celdas y ya imaginaras lo pesado y lendo que se hace el
calculo

Bueno me despido de ti no sin antes reiterar nuevamente mi
agradecimiento

Saludos
Gina


hola, Gina !

... analizar la siguiente formula, bueno mas que




analizar a ver porque al cambiar un parametro envia error
... [sigue formula +/- 'larguita']... <ver la consulta




original> :))
... segundo renglon hay una formula: MID($BG2,1,7)
... no hay problema... pero si hago un cambio necesario




como el que sigue: MID($BG2,1,FIND("_",BG2))
... envia error... en la penultima linea... la misma




formula, si aplico aqui el cambio no manda error
... por que sucede esto?



1.- cuando 'intentas' modificar de: MID($BG2,1,7) a: -
MID($BG2,1,FIND("_",BG2)) [segunda linea de tu mensaje]
el 'error' es causado porque la funcion ->'Find()'<-


estaria excediendo ->el limite<- de
funciones 'anidadas' :(

2.- 'aprovechando el viaje', despues de [tratar


de] 'analizar' la formula que estas empleando [y
segun 'entiendo']...
lo que 'se busca' es: localizar un dato en la


primera columna de una tabla [o base de datos] ->NO
ordenada<-
dicho dato pudiera ser 'localizado'...
a) de manera 'directa' -> vlookup


($bg2,db_mue,1,false)
b) de manera 'parcial' -> vlookup(concatenate(mid


($bg2,1,7),"XX","_","*"),db_mue,1,false)
c) de manera 'forzada' -> vlookup(concatenate(mid


($bg2,1,10),"*"),db_mue,1,false)
d) o 'simplemente'... NO se encuentra en la tabla -
"Incorrecta"

-> si he entendido +/- bien... prueba con la siguiente


formula [65% mas 'delgada']
obviamente debe ser en una sola linea, la separo para


que sea +/- 'entendible'

=choose(1+max(
3*not(iserror(vlookup($bg2,db_mue,1,0))),
2*not(iserror(vlookup(left($bg2,7)&"xx_"&right


($bg2,3),db_mue,1,0))),
1*not(iserror(vlookup(left($bg2,10)&"*",db_mue,1,0)))),
"incorrecta",
vlookup(left($bg2,10)&"*",db_mue,1,0),
vlookup(left($bg2,7)&"xx_"&right($bg2,3),db_mue,1,0),
vlookup($bg2,db_mue,1,0))

si cualquier duda... ¿comentas?
saludos,
hector.


.

Respuesta Responder a este mensaje
#3 Héctor Miguel
02/03/2005 - 06:00 | Informe spam
hola, Gina !

... el objetivo de la formula... con la depuracion... obtuve mejores resultados
... saber en donde aprendiste, digo si no es indiscrecion
... me queda la duda del porque del error en mi formula
... en otro lugar... misma funcion... parametros... funciones anidadas... no hay ningun problema
... quiere decir que no excede el limite de funciones anidadas, no quisiera quedarme con la duda [...]
... me ha ayudado mas de lo que esperaba ya que... debia tenerla en por lo menos 10,000 celdas
... ya imaginaras... el calculo



tratare de 'dar respuesta' a la [posible] 'confusion' en cuanto al 'nivel de anidacion' de las funciones :))
si cualquier duda... ¿comentas?
saludos,
hector.
___
1.- el 'nivel' de las funciones anidadas NO 'se cuenta' de manera 'aislada' [funcion por funcion]
considera que cada funcion [anidada] va formando parte de una 'cadena de funciones' [en niveles 'superiores']
en la formula 'original' [y mas 'concretamente'] EN el nivel donde 'falla', la cadena esta formada como sigue:
-> 'N' seria el nivel a donde va 'avanzando/retrocediendo' cada funcion segun su 'anidacion' [dentro de otras]
N - funcion
0) if(
1) iserror(
2) if(
3) iserror(
4) vlookup($bg2,db_mue,1,false)),
3) if(
4) iserror(
5) vlookup(
6) concatenate(
7) mid($bg2,1,7), [... etc. etc. etc.]
=> la funcion 'Find()' que 'intentas' anidarle a la funcion 'mid()' estaria 'alcanzando' un nivel 8 'inadmisible' :(
___
2.- la funcion 'concatenate()' [en este preciso caso] esta 'estorbando' ya que...
a) SI 'cuenta' para los niveles de 'anidacion' y...
b) NO es 'imprescindible', si se puede sustituir por una 'concatenacion-directa' [usando el caracter '&']
___
3.- como en la formula original existe una serie de 'redundancias', otra forma de 'adelgazarla' seria +/- como sigue:
=if(not(iserror(vlookup($bg2,db_mue,1,0))),vlookup($bg2,db_mue,1,0),
if(not(iserror(vlookup(left($bg2,7)&"xx_"&right($bg2,3),db_mue,1,0))),vlookup(left($bg2,7)&"xx_"&right($bg2,3),db_mue,1,0),
if(not(iserror(vlookup(left($bg2,10)&"*",db_mue,1,0))),vlookup(left($bg2,10)&"*",db_mue,1,0),"incorrecta")))
___
4.- la [unica] 'diferencia' entre la formula anterior y la propuesta en el mensaje anterior es...
en la formula anterior se 'continua' usando la funcion 'if()' que es un 'si-condicional' y se calcula mas 'lento' que...
en la formula propuesta se usan 'sies booleanos' [verdadero/falso o 0/1] que son [ligeramente] mas 'rapidos'
[por si quieres 'considerar' una -posible- 'mejora' en el rendimiento y el re/calculo del modelo] ;)
___
5.- con respecto a: 'en donde aprendi'... [que a decir verdad... =>sigo aprendiendo<=] :))
a continuacion te menciono [algunas de] las fuentes de informacion [que estan al alcance de todos] ;)
libros y revistas... la ayuda de excel [F1]... consultas en la web... participar en foros [como este]...
'comprando' [o tratando de 'resolver' o aportar soluciones a] problemas 'ajenos'... etc. etc. etc.
aahhh, y [un 'cierto' tiempo con...] un poco de experiencia laboral/personal
=> puedes elegir la/s que consideres a tu alcance [en realidad, me he valido de todas] ;)
Respuesta Responder a este mensaje
#4 Gina
03/03/2005 - 04:25 | Informe spam
Gracias Hector, creo que poco a poco voy comprendiendo
voy a tomar tu consejo que, a decir verdad a partir de que
me propuse crear interfaces de usuario en VBA he aprendido
mas de lo que se suponia sabia hacer, en ocaciones la
ayuda de excel se me hace un poco confusa, tendras alguna
bibliografia que pueda considerar

Agradezco tu ayuda

Saludos
Gina


hola, Gina !

... el objetivo de la formula... con la depuracion...




obtuve mejores resultados
... saber en donde aprendiste, digo si no es




indiscrecion
... me queda la duda del porque del error en mi formula
... en otro lugar... misma funcion... parametros...




funciones anidadas... no hay ningun problema
... quiere decir que no excede el limite de funciones




anidadas, no quisiera quedarme con la duda [...]
... me ha ayudado mas de lo que esperaba ya que...




debia tenerla en por lo menos 10,000 celdas
... ya imaginaras... el calculo



tratare de 'dar respuesta' a la [posible] 'confusion' en


cuanto al 'nivel de anidacion' de las funciones :))
si cualquier duda... ¿comentas?
saludos,
hector.
___
1.- el 'nivel' de las funciones anidadas NO 'se cuenta'


de manera 'aislada' [funcion por funcion]
considera que cada funcion [anidada] va formando


parte de una 'cadena de funciones' [en
niveles 'superiores']
en la formula 'original' [y mas 'concretamente'] EN


el nivel donde 'falla', la cadena esta formada como sigue:
-> 'N' seria el nivel a donde


va 'avanzando/retrocediendo' cada funcion segun
su 'anidacion' [dentro de otras]
N - funcion
0) if(
1) iserror(
2) if(
3) iserror(
4) vlookup($bg2,db_mue,1,false)),
3) if(
4) iserror(
5) vlookup(
6) concatenate(
7) mid($bg2,1,7), [... etc. etc. etc.]
=> la funcion 'Find()' que 'intentas' anidarle a la


funcion 'mid()' estaria 'alcanzando' un nivel
8 'inadmisible' :(
___
2.- la funcion 'concatenate()' [en este preciso caso]


esta 'estorbando' ya que...
a) SI 'cuenta' para los niveles de 'anidacion' y...
b) NO es 'imprescindible', si se puede sustituir por


una 'concatenacion-directa' [usando el caracter '&']
___
3.- como en la formula original existe una serie


de 'redundancias', otra forma de 'adelgazarla' seria +/-
como sigue:
=if(not(iserror(vlookup($bg2,db_mue,1,0))),vlookup


($bg2,db_mue,1,0),
if(not(iserror(vlookup(left($bg2,7)&"xx_"&right


($bg2,3),db_mue,1,0))),vlookup(left($bg2,7)&"xx_"&right
($bg2,3),db_mue,1,0),
if(not(iserror(vlookup(left($bg2,10)


&"*",db_mue,1,0))),vlookup(left($bg2,10)
&"*",db_mue,1,0),"incorrecta")))
___
4.- la [unica] 'diferencia' entre la formula anterior y


la propuesta en el mensaje anterior es...
en la formula anterior se 'continua' usando la


funcion 'if()' que es un 'si-condicional' y se calcula
mas 'lento' que...
en la formula propuesta se usan 'sies booleanos'


[verdadero/falso o 0/1] que son [ligeramente] mas 'rapidos'
[por si quieres 'considerar' una -posible- 'mejora'


en el rendimiento y el re/calculo del modelo] ;)
___
5.- con respecto a: 'en donde aprendi'... [que a decir


verdad... =>sigo aprendiendo<=] :))
a continuacion te menciono [algunas de] las fuentes


de informacion [que estan al alcance de todos] ;)
libros y revistas... la ayuda de excel [F1]...


consultas en la web... participar en foros [como este]...
'comprando' [o tratando de 'resolver' o aportar


soluciones a] problemas 'ajenos'... etc. etc. etc.
aahhh, y [un 'cierto' tiempo con...] un poco de


experiencia laboral/personal
=> puedes elegir la/s que consideres a tu alcance [en


realidad, me he valido de todas] ;)


.

Respuesta Responder a este mensaje
#5 Héctor Miguel
03/03/2005 - 05:10 | Informe spam
hola, Gina !

... poco a poco voy comprendiendo
... a partir de que me propuse... he aprendido mas de lo que se suponia sabia hacer
... en ocaciones la ayuda de excel se me hace un poco confusa
... alguna bibliografia que pueda considerar



-> [hasta donde se] el aprendizaje es un proceso que 'toma su propio ritmo y aceleracion'
-> con respecto de lo 'confuso' que resulta [en ocasiones] la ayuda en linea...
[dale tiempo... veras que] cada vez presentara menos confusiones
-> en relacion con alguna bibliografia [aparte de que NO existe 'libro malo']...
ademas de la ayuda de excel y el soporte de muchos en este foro...
te apunto algunas direcciones => solo te 'advierto' que BAJO TU PROPIO RIESGO < [estas empezando a correr el riesgo de convertirte en 'excelomana'] :))

saludos,
hector.
=http://www.franciscopascual.com/Arc...202002.zip
http://www.javeriana.edu.co/decisio...icios.html
http://www.javeriana.edu.co/cursad/...iento.html
http://members.fortunecity.es/tonelorc/eexcel.html
http://www.aulaclic.es/excel2000/f_excel2000.htm
http://64.226.188.26/sivnetwork-www/cursos_gratis/excel/Excel.htm
http://www.territoriopc.com/excel/
http://interinfo.iespana.es/interin...les_ig.htm
http://www.fullwebs.com.uy/endondee.../excel.pdf
http://office.arnulfoperez.com/excel/
http://lacher.com/toc.htm
http://www.sistemaslym.net/vba/excel/excel.html
http://es.geocities.com/lacibelesde...macros.htm
http://es.geocities.com/lacibelesde...acros1.htm
http://www.macroheavy.com/excel/excel.asp
http://www.geocities.com/gorita_2000/VBA.htm
http://www.excelavanzado.com/
http://www.xtec.es/~rlloren4/KBEsp2.htm
http://www.exceluciones.com/portal/...p?article5
Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaSiguiente Respuesta Tengo una respuesta
Search Busqueda sugerida