FORMULA EXTENSA ???

24/06/2007 - 00:47 por Orfao | Informe spam
Hola foristas...
en un post anterir hice una pregunta al respecto pero... "no me quedo bien
clara la respuesta. Tal vez la implemente erroneamente. Sorry... y ahora se
me ha complicado un poco mas"
tal vez ahora explique mejor el caso:
tengo los siguientes datos:
en T7 tengo un valor que representa el intervalo de evaluacion es decir 7
para semanal, 14 para quincenal, etc
el planificador decide que valor colocarle.
en U7 la fecha de inicio del proyecto
en V7 la fecha del primer informe
desde W7 hasta DD7 las siguientes fechas de informes es decir W7=V7+T7 ;
X7=W7+T7 ; .. ; DD7Ü7+T7
En la columna O21 Tengo la fecha de inicio de la actividad correspondiente a
esa fila
En la columna P21 Tengo la fecha de fin de la actividad correspondiente a
esa fila
En la columna Q21==+DIAS.LAB(O21;P21;feriados) donde "feriados" es un rango
con fechas no laborables



V21=+SI(Y(V$7>=$O21;V$7-U$7<$P21);SI(DIAS.LAB($O21;V$7;feriados)<=DIAS.LAB(V$7-U$7+1;V$7;feriados);SI(DIAS.LAB($O21;V$7;feriados)<$Q21;DIAS.LAB($O21;V$7;feriados);$Q21);

SI(DIAS.LAB($O21;V$7;feriados)>=$Q21;DIAS.LAB(V$7-U$7+1;$P21;feriados);DIAS.LAB(V$7-U$7+1;V$7;feriados)))*1/$Q21;0)

W21=+SI(Y(W$7>=$O21;W$7-$T$7<$P21);SI(DIAS.LAB($O21;W$7;feriados)<=DIAS.LAB(W$7-$T$7+1;W$7;feriados);SI(DIAS.LAB($O21;W$7;feriados)<$Q21;DIAS.LAB($O21;W$7;feriados);$Q21);

SI(DIAS.LAB($O21;W$7;feriados)>=$Q21;DIAS.LAB(W$7-$T$7+1;$P21;feriados);DIAS.LAB(W$7-$T$7+1;W$7;feriados)))*1/$Q21;0)

W21 la copio y pego desde X21 hasta DD21
lo anterior se repite en dferentes filas de 2 en 2 es decir en la 23, 25,
27, etc

en V19 tendo la siguiente formula matricial:
{=+SUMA(INDIRECTO(DIRECCION(CELDA("fila";$B20)+1;CELDA("columna";V20);4)&":"&+DIRECCION(CELDA("fila";$B20)+$B20*2;CELDA("columna";V20);4))*INDIRECTO(DIRECCION(CELDA("fila";$B20)+1;CELDA("columna";$U20))&":"&+DIRECCION(CELDA("fila";$B20)+$B20*2;CELDA("columna";$U20))))}

donde en B20 tengo el numero de subpartidas a sumar (filas en las que se
repite las formulas anteriores)

todo esto me funciona a la perfeccion... PERO...
el problema es que tengo en la columna A y en cada fila donde estan las
formulas un indicador que me dice si esa fila es una detalle donde en ese
caso tendria que utilizar el segundo grupo de formulas o, es un grupo de
partidas donde tengo que usar el orimer grupo ...
y creo que quedaria algo asi como
+si(a20="Grupo";{=+SUMA(INDIRECTO(DIRECCION(CELDA("fila";$B20)+1;CELDA("columna";V20);4)&":"&+DIRECCION(CELDA("fila";$B20)+$B20*2;CELDA("columna";V20);4))*INDIRECTO(DIRECCION(CELDA("fila";$B20)+1;CELDA("columna";$U20))&":"&+DIRECCION(CELDA("fila";$B20)+$B20*2;CELDA("columna";$U20))))};
+SI(Y(V$7>=$O21;V$7-U$7<$P21);SI(DIAS.LAB($O21;V$7;feriados)<=DIAS.LAB(V$7-U$7+1;V$7;feriados);SI(DIAS.LAB($O21;V$7;feriados)<$Q21;DIAS.LAB($O21;V$7;feriados);$Q21);

SI(DIAS.LAB($O21;V$7;feriados)>=$Q21;DIAS.LAB(V$7-U$7+1;$P21;feriados);DIAS.LAB(V$7-U$7+1;V$7;feriados)))*1/$Q21;0))

Se entiende????
Alguno de Uds me ayuda por lo menos a simplificar estas formulas???
Estare sumamente agradecido

Me alimento del conocimiento de todos

Preguntas similare

Leer las respuestas

#1 Héctor Miguel
24/06/2007 - 09:35 | Informe spam
hola, moises !

1) para la primera parte de tu consulta, las formulas que utilizas en V21 distinta de W21 y que extiendes hasta DD21

a) puedes 'recortarlas' +/- un 60% [de 283 a solo 112 caracteres] usando la siguiente [igual desde V21 -> DD21]

[V21] =si(y($o21>=$u$7;v$7>=$o21;$p21>u$7);dias.lab(si(($o21>u$7);$o21;u$7+1);si(($p21>v$7);v$7;$p21);feriados)/$q21;0)

b) si el caso es el que comentabas anteriormente de ~4000 formulas, te sugiero cambiar del si-condicional a un elegir:

=elegir(1+y($o21>=$u$7;v$7>=$o21;$p21>u$7);0;dias.lab(elegir(1+($o21>u$7);u$7+1;$o21);elegir(1+($p21>v$7);$p21;v$7);feriados)/$q21)

2) para la segunda parte de tu consulta: -> la formula matricial con direccion(...) donde usas la funcion celda("fila"... / "columna"...)
[sinceramente] no la entiendo :-((
aunque comentas que funciona 'a la perfeccion'... no se ve cual sea el 'objetivo'... ademas de que [p.e.]:
donde usas: -> DIRECCION(CELDA("fila";$B20)+1;CELDA("columna";V20);4)

a) la parte de: CELDA("fila";$B20) => devuelve: 20 [independientemente de que valor hayas puesto en 'B20'] -?????-
b) igual para: CELDA("columna";V20) devuelve: 22 [independientemente de que valor hayas puesto en 'V20'] -?????-

-> si pudieras comentar detalles mas... 'concretos'... -?-

saludos,
hector.

__ la consulta original __
... en T7 tengo un valor que representa el intervalo de evaluacion es decir 7 para semanal, 14 para quincenal, etc
el planificador decide que valor colocarle.
en U7 la fecha de inicio del proyecto
en V7 la fecha del primer informe
desde W7 hasta DD7 las siguientes fechas de informes es decir W7=V7+T7; X7=W7+T7; .. ; DD7Ü7+T7
En la columna O21 Tengo la fecha de inicio de la actividad correspondiente a esa fila
En la columna P21 Tengo la fecha de fin de la actividad correspondiente a esa fila
En la columna Q21==+DIAS.LAB(O21;P21;feriados) donde "feriados" es un rangocon fechas no laborables

V21=+SI(Y(V$7>=$O21;V$7-U$7<$P21);SI(DIAS.LAB($O21;V$7;feriados)<=DIAS.LAB(V$7-U$7+1;V$7;feriados);SI(DIAS.LAB ($O21;V$7;feriados)<$Q21;DIAS.LAB($O21;V$7;feriados);$Q21);SI(DIAS.LAB($O21;V$7;feriados)>=$Q21;DIAS.LAB(V$7-U$7+1;$P21;feriados);DIAS.LAB(V$7-U$7+1;V$7;feriados)))*1/$Q21;0)

W21=+SI(Y(W$7>=$O21;W$7-$T$7<$P21);SI(DIAS.LAB($O21;W$7;feriados)<=DIAS.LAB(W$7-$T$7+1;W$7;feriados);SI(DIAS.LAB($O21;W$7;feriados)<$Q21;DIAS.LAB($O21;W$7;feriados);$Q21);SI(DIAS.LAB($O21;W$7;feriados)>=$Q21;DIAS.LAB(W$7-$T$7+1;$P21;feriados);DIAS.LAB(W$7-$T$7+1;W$7;feriados)))*1/$Q21;0)

W21 la copio y pego desde X21 hasta DD21 lo anterior se repite en dferentes filas de 2 en 2 es decir en la 23, 25, 27, etc



__ el resto de la consulta __
en V19 tendo la siguiente formula matricial:
{=+SUMA(INDIRECTO(DIRECCION(CELDA("fila";$B20)+1;CELDA("columna";V20);4)&":"&+DIRECCION(CELDA("fila";$B20)+$B20*2;CELDA("columna";V20);4))*INDIRECTO(DIRECCION(CELDA("fila";$B20)+1;CELDA("columna";$U20))&":"&+DIRECCION(CELDA("fila";$B20)+$B20*2;CELDA("columna";$U20))))}

donde en B20 tengo el numero de subpartidas a sumar (filas en las que se repite las formulas anteriores)

todo esto me funciona a la perfeccion... PERO... el problema es que tengo en la columna A y en cada fila donde estan las formulas
un indicador que me dice si esa fila es una detalle donde en ese caso tendria que utilizar el segundo grupo de formulas o
es un grupo de partidas donde tengo que usar el orimer grupo ...
y creo que quedaria algo asi como
+si(a20="Grupo";{=+SUMA(INDIRECTO(DIRECCION(CELDA("fila";$B20)+1;CELDA("columna";V20);4)&":"&+DIRECCION(CELDA("fila";$B20)+$B20*2;CELDA("columna";V20);4))*INDIRECTO(DIRECCION(CELDA("fila";$B20)+1;CELDA("columna";$U20))&":"&+DIRECCION(CELDA("fila";$B20)+$B20*2;CELDA("columna";$U20))))};+SI(Y(V$7>=$O21;V$7-U$7<$P21);SI(DIAS.LAB($O21;V$7;feriados)<=DIAS.LAB(V$7-U$7+1;V$7;feriados);SI(DIAS.LAB($O21;V$7;feriados)<$Q21;DIAS.LAB($O21;V$7;feriados);$Q21);SI(DIAS.LAB($O21;V$7;feriados);$Q21;DIAS.LAB(V$7-U$7+1;$P21;feriados);DIAS.LAB(V$7-U$7+1;V$7;feriados)))*1/$Q21;0))

Se entiende????
Alguno de Uds me ayuda por lo menos a simplificar estas formulas???
Estare sumamente agradecido

Me alimento del conocimiento de todos
Respuesta Responder a este mensaje
#2 KL
24/06/2007 - 11:55 | Informe spam
Hola Orfao,

en V19 tendo la siguiente formula matricial:
{=+SUMA(INDIRECTO(DIRECCION(CELDA("fila";$B20)+1;CELDA("columna";V20);4)&":"&+DIRECCION(CELDA("fila";$B20)+$B20*2;CELDA("columna";V20);4))*INDIRECTO(DIRECCION(CELDA("fila";$B20)+1;CELDA("columna";$U20))&":"&+DIRECCION(CELDA("fila";$B20)+$B20*2;CELDA("columna";$U20))))}



Al igual que HM, no llego a entender tu formula del todo bien. Me parece que el primer paso podria ser el de acortar,
"desmatricializar" y "desvolatizarla".

=SUMAPRODUCTO(INDICE(V:V;21):INDICE(V:V;FILA($B20)+$B20*2)*INDICE(U:U;21):INDICE(U:U;FILA($B20)+$B20*2))

Saludos,
KL
Respuesta Responder a este mensaje
#3 Orfao
24/06/2007 - 19:06 | Informe spam
Hola H.M y KL Gracias por la ayuda...
a ver si me explico mejor...
el la formula: v19
{=+SUMA(INDIRECTO(DIRECCION(CELDA("fila";$B20)+1;CELDA("columna";V20);4)&":"&+DIRECCION(CELDA("fila";$B20)+$B20*2;CELDA("columna";V20);4))*INDIRECTO(DIRECCION(CELDA("fila";$B20)+1;CELDA("columna";$U20))&":"&+DIRECCION(CELDA("fila";$B20)+$B20*2;CELDA("columna";$U20))))}

lo que realmente hago es una ""suma producto""
como bien dices HM DIRECCION(CELDA("fila";$B20) devuelve 20 y
CELDA("columna";V20) devuelve 22 pero al replicar en una fila el 20 se
mantienne y el 22 se incrementa dependiendo de la columna donde se encuentre .
igualmente si copio y pego la formula en varias filas de la misma columna el
20 es el que se incrementa y el 22 no.

esto hace lo mismo que la funcion que expuse en el otro foro a que te refieres
donde usaba una funcion definida.
llamada psumarp la cual calculaba la sumaproducto de dos columnas pero asi:

Function psumapar(a As Range, b As Range, n As Integer)
Dim x As Integer
psumapar = 0
For x = 0 To a.Count - 2 Step 2
psumapar = psumapar + VBAProject.Hoja1.Cells(a.Row + x + n, a.Column) *
VBAProject.Hoja1.Cells(b.Row + x, b.Column)
Next
End Function


para v19
y teniendo el valor 3 en b20
V21*U21+V23*U23+V25*U25
...y en V20
V22*U21+V24*U23+V26*U25
alguna forma de hacer esto sin formulas definidas por usuario???

es decir: en la columna V tengo valores en todas las filas y en U solo en
las impares
y entonces tengo que calcular las pares de V * U y en otro caso las impares
de V *U.
El rango va desde la fila actual+2 tasta el numero que me indique B20 (3) de
2 en 2

luego es solo como bien dice KL "Reducir/Acortar/Simplificar" esta
enredadera...
PD: el primer grupo de formulas estan en filas dejando una de por medio es
decir
ej: en la V21,V23,V25
y el segundo grupo es la suma de estos valores por su correspondiente en la
columna U21,U23,U25 : para V19, = V21*U21+V23*U23+V25*U25
y para V20 V22*U21+V24*U23+V26*U25

Se entiende??? tal vez si les mando el archivo seria mas facil de
visualizar...
Uds. ma diran... GRACIAS

Me alimento del conocimiento de todos


"Héctor Miguel" wrote:

hola, moises !

1) para la primera parte de tu consulta, las formulas que utilizas en V21 distinta de W21 y que extiendes hasta DD21

a) puedes 'recortarlas' +/- un 60% [de 283 a solo 112 caracteres] usando la siguiente [igual desde V21 -> DD21]

[V21] =si(y($o21>=$u$7;v$7>=$o21;$p21>u$7);dias.lab(si(($o21>u$7);$o21;u$7+1);si(($p21>v$7);v$7;$p21);feriados)/$q21;0)

b) si el caso es el que comentabas anteriormente de ~4000 formulas, te sugiero cambiar del si-condicional a un elegir:

=elegir(1+y($o21>=$u$7;v$7>=$o21;$p21>u$7);0;dias.lab(elegir(1+($o21>u$7);u$7+1;$o21);elegir(1+($p21>v$7);$p21;v$7);feriados)/$q21)

2) para la segunda parte de tu consulta: -> la formula matricial con direccion(...) donde usas la funcion celda("fila"... / "columna"...)
[sinceramente] no la entiendo :-((
aunque comentas que funciona 'a la perfeccion'... no se ve cual sea el 'objetivo'... ademas de que [p.e.]:
donde usas: -> DIRECCION(CELDA("fila";$B20)+1;CELDA("columna";V20);4)

a) la parte de: CELDA("fila";$B20) => devuelve: 20 [independientemente de que valor hayas puesto en 'B20'] -?????-
b) igual para: CELDA("columna";V20) devuelve: 22 [independientemente de que valor hayas puesto en 'V20'] -?????-

-> si pudieras comentar detalles mas... 'concretos'... -?-

saludos,
hector.

__ la consulta original __
> ... en T7 tengo un valor que representa el intervalo de evaluacion es decir 7 para semanal, 14 para quincenal, etc
> el planificador decide que valor colocarle.
> en U7 la fecha de inicio del proyecto
> en V7 la fecha del primer informe
> desde W7 hasta DD7 las siguientes fechas de informes es decir W7=V7+T7; X7=W7+T7; .. ; DD7Ü7+T7
> En la columna O21 Tengo la fecha de inicio de la actividad correspondiente a esa fila
> En la columna P21 Tengo la fecha de fin de la actividad correspondiente a esa fila
> En la columna Q21==+DIAS.LAB(O21;P21;feriados) donde "feriados" es un rangocon fechas no laborables
>
> V21=+SI(Y(V$7>=$O21;V$7-U$7<$P21);SI(DIAS.LAB($O21;V$7;feriados)<=DIAS.LAB(V$7-U$7+1;V$7;feriados);SI(DIAS.LAB ($O21;V$7;feriados)<$Q21;DIAS.LAB($O21;V$7;feriados);$Q21);SI(DIAS.LAB($O21;V$7;feriados)>=$Q21;DIAS.LAB(V$7-U$7+1;$P21;feriados);DIAS.LAB(V$7-U$7+1;V$7;feriados)))*1/$Q21;0)
>
> W21=+SI(Y(W$7>=$O21;W$7-$T$7<$P21);SI(DIAS.LAB($O21;W$7;feriados)<=DIAS.LAB(W$7-$T$7+1;W$7;feriados);SI(DIAS.LAB($O21;W$7;feriados)<$Q21;DIAS.LAB($O21;W$7;feriados);$Q21);SI(DIAS.LAB($O21;W$7;feriados)>=$Q21;DIAS.LAB(W$7-$T$7+1;$P21;feriados);DIAS.LAB(W$7-$T$7+1;W$7;feriados)))*1/$Q21;0)
>
> W21 la copio y pego desde X21 hasta DD21 lo anterior se repite en dferentes filas de 2 en 2 es decir en la 23, 25, 27, etc

__ el resto de la consulta __
> en V19 tendo la siguiente formula matricial:
> {=+SUMA(INDIRECTO(DIRECCION(CELDA("fila";$B20)+1;CELDA("columna";V20);4)&":"&+DIRECCION(CELDA("fila";$B20)+$B20*2;CELDA("columna";V20);4))*INDIRECTO(DIRECCION(CELDA("fila";$B20)+1;CELDA("columna";$U20))&":"&+DIRECCION(CELDA("fila";$B20)+$B20*2;CELDA("columna";$U20))))}
>
> donde en B20 tengo el numero de subpartidas a sumar (filas en las que se repite las formulas anteriores)
>
> todo esto me funciona a la perfeccion... PERO... el problema es que tengo en la columna A y en cada fila donde estan las formulas
> un indicador que me dice si esa fila es una detalle donde en ese caso tendria que utilizar el segundo grupo de formulas o
> es un grupo de partidas donde tengo que usar el orimer grupo ...
> y creo que quedaria algo asi como
> +si(a20="Grupo";{=+SUMA(INDIRECTO(DIRECCION(CELDA("fila";$B20)+1;CELDA("columna";V20);4)&":"&+DIRECCION(CELDA("fila";$B20)+$B20*2;CELDA("columna";V20);4))*INDIRECTO(DIRECCION(CELDA("fila";$B20)+1;CELDA("columna";$U20))&":"&+DIRECCION(CELDA("fila";$B20)+$B20*2;CELDA("columna";$U20))))};+SI(Y(V$7>=$O21;V$7-U$7<$P21);SI(DIAS.LAB($O21;V$7;feriados)<=DIAS.LAB(V$7-U$7+1;V$7;feriados);SI(DIAS.LAB($O21;V$7;feriados)<$Q21;DIAS.LAB($O21;V$7;feriados);$Q21);SI(DIAS.LAB($O21;V$7;feriados);$Q21;DIAS.LAB(V$7-U$7+1;$P21;feriados);DIAS.LAB(V$7-U$7+1;V$7;feriados)))*1/$Q21;0))
>
> Se entiende????
> Alguno de Uds me ayuda por lo menos a simplificar estas formulas???
> Estare sumamente agradecido
>
> Me alimento del conocimiento de todos



Respuesta Responder a este mensaje
#4 Orfao
24/06/2007 - 19:19 | Informe spam
Hola KL.
Gracias.. en el anterior Reply expuse algo mejos (creo) la situacion.
la formula que me enviaste ve genera diferentes valores, es decir
en la original da: V19=,10% W19=,10% X19=,10% Y19=,10% Z9=,06%
En en la nueva : V19=,10% W19=1,39% X19=6,93% Y19=6,93% Z9=4,16%
algun error???
si gustas te envio el archivo a tu correo para que lo veas mas claro ???
GRACIAS DE NUEVO!!!
Me alimento del conocimiento de todos


"KL" wrote:

Hola Orfao,

> en V19 tendo la siguiente formula matricial:
> {=+SUMA(INDIRECTO(DIRECCION(CELDA("fila";$B20)+1;CELDA("columna";V20);4)&":"&+DIRECCION(CELDA("fila";$B20)+$B20*2;CELDA("columna";V20);4))*INDIRECTO(DIRECCION(CELDA("fila";$B20)+1;CELDA("columna";$U20))&":"&+DIRECCION(CELDA("fila";$B20)+$B20*2;CELDA("columna";$U20))))}

Al igual que HM, no llego a entender tu formula del todo bien. Me parece que el primer paso podria ser el de acortar,
"desmatricializar" y "desvolatizarla".

=SUMAPRODUCTO(INDICE(V:V;21):INDICE(V:V;FILA($B20)+$B20*2)*INDICE(U:U;21):INDICE(U:U;FILA($B20)+$B20*2))

Saludos,
KL


Respuesta Responder a este mensaje
#5 Orfao
24/06/2007 - 19:32 | Informe spam
HELO!
Como envio el archivo a toda la comunidad forista??? alguna forma de hacerlo
o necesariamente tiene que ser a un correo en particular???
Gracias-
Me alimento del conocimiento de todos
Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaSiguiente Respuesta Tengo una respuesta
Search Busqueda sugerida