Func personalizada->sumaproducto 2

10/06/2009 - 19:31 por Yrjo, Inc. | Informe spam
Buenas tardes Héctor Miguel, la solución que me diste fue perfecta pero ahora
me encontré con otra situación y es que cuando yo pongo el rango de fechas y
los importes como me indicaste en otra hoja, no funciona.

Si llamo la función con algo así no se calcula:
=EnRangoDeFechas(DiasHabiles!$A$2:$A$2196,F2,G2,DiasHabiles!$C$2:$C$2196)

Cómo hago para poder hacer esto en hojas o libros diferentes y que conserve
la ruta completa y por lo tanto arroje el resultado

Gracias

hola, Jorge !


... puede incluir... sumaproducto en una funcion personalizada
asi como por ejemplo subtotal puede ser con Application.Subtotal.
Cual puedo usar con sumarpoducto y que pueda poner condicionales como cuando en excel escribo:
=SUMAPRODUCTO(($A$2:$A$2196>F2)*($A$2:$A$2196<=G2)*($C$2:$C$2196))



aunque puedes usar funciones de hoja de calculo (como suproduct) desde vba...
la evaluacion de formulas que trabajan de forma matricial no tiene soporte
en vba
necesitas preguntarle a excel (la aplicacion donde esta corriendo el vba)
cual seria el resultado
lo cual, puedes hacer (en vba) por medio de la funcion evaluate("texto"), p.e.

esta funcion personalizada (en teoria) "debiera" funcionar (pero NO
funciona)...

Function EnRangoDeFechas( _
Fechas As Range, _
Desde As Date, _
Hasta As Date, _
Importes As Range) As Double
EnRangoDeFechas = Application.SumProduct( _
(Fehas > Desde) * _
(Fechas <= Hasta) * _
Importes)
End Function

si la reemplazas por otra (utilizando el metodo evaluate), si funciona (p.e.)

Function EnRangoDeFechas( _
Fechas As Range, _
Desde As Date, _
Hasta As Date, _
Importes As Range) As Double
EnRangoDeFechas = Evaluate("sumproduct((" & _
Fechas.Address & ">" & CLng(Desde) & ")*(" & _
Fechas.Address & "<=" & CLng(Hasta) & ")*" & _
Importes.Address & ")")
End Function

y su llamada (en la hoja de calculo) la harias de la siguiente forma
(dependiento de tu separador de argumentos):

=EnRangoDeFechas($A$2:$A$2196,F2,G2,$C$2:$C$2196)

si necesitas alternar/cambiar/modificar/... los operadores de comparacion
(>, <=, otros y/o en otro orden)
(obviamente) sera necesario (re)adaptar las instrucciones de la funcion (o
aumentar parametros/argumentos) (?)

saludos,
hector.

p.d. (creo que) es mas sencillo aprovechar las funciones "nativas" de excel,
que tratar de "inventar el hilo negro" (por vba)

Preguntas similare

Leer las respuestas

#1 Héctor Miguel
10/06/2009 - 20:45 | Informe spam
hola, Jorge!

... me encontre con otra situacion y es que cuando yo pongo el rango de fechas y los importes... en otra hoja, no funciona.
Si llamo la funcion con algo asi no se calcula:
=EnRangoDeFechas(DiasHabiles!$A$2:$A$2196,F2,G2,DiasHabiles!$C$2:$C$2196)
Como hago para poder hacer esto en hojas o libros diferentes y que conserve la ruta completa y por lo tanto arroje el resultado ...



solo cambia la forma en que se determina el "Address" de los argumentos-rango de Fechas e Importes por algo +/- asi:

Function EnRangoDeFechas( _
Fechas As Range, _
Desde As Date, _
Hasta As Date, _
Importes As Range) As Double
EnRangoDeFechas = Evaluate("sumproduct((" & _
Fechas.Address(External:=True) & ">" & CLng(Desde) & ")*(" & _
Fechas.Address(External:=True) & "<=" & CLng(Hasta) & ")*" & _
Importes.Address(External:=True) & ")")
End Function

saludos,
hector.
Respuesta Responder a este mensaje
#2 Yrjo, Inc.
10/06/2009 - 21:33 | Informe spam
Hola, mil gracias de nuevo... pregunta, esto también sirve para rutas a
archivos externos ya que me sale error y tiene que estar abierto el otro
archivo. Es necesario eso?

Gracias

"Héctor Miguel" wrote:

hola, Jorge!

> ... me encontre con otra situacion y es que cuando yo pongo el rango de fechas y los importes... en otra hoja, no funciona.
> Si llamo la funcion con algo asi no se calcula:
> =EnRangoDeFechas(DiasHabiles!$A$2:$A$2196,F2,G2,DiasHabiles!$C$2:$C$2196)
> Como hago para poder hacer esto en hojas o libros diferentes y que conserve la ruta completa y por lo tanto arroje el resultado ...

solo cambia la forma en que se determina el "Address" de los argumentos-rango de Fechas e Importes por algo +/- asi:

Function EnRangoDeFechas( _
Fechas As Range, _
Desde As Date, _
Hasta As Date, _
Importes As Range) As Double
EnRangoDeFechas = Evaluate("sumproduct((" & _
Fechas.Address(External:=True) & ">" & CLng(Desde) & ")*(" & _
Fechas.Address(External:=True) & "<=" & CLng(Hasta) & ")*" & _
Importes.Address(External:=True) & ")")
End Function

saludos,
hector.



Respuesta Responder a este mensaje
#3 Héctor Miguel
10/06/2009 - 22:00 | Informe spam
hola, Jorge !

... pregunta, esto tambien sirve para rutas a archivos externos ya que me sale error
y tiene que estar abierto el otro archivo. Es necesario eso?



sip, el otro libro necesariamente debera estar abierto, de lo contrario la UDF necesitara de (bastante) mas codificacion :-((
por esto es que te "recomendaba" en tu consulta original (en el otro hilo)...
=p.d. (creo que) es mas sencillo aprovechar las funciones "nativas" de excel, que tratar de "inventar el hilo negro" (por vba)
=
saludos,
hector.

__ OP __
... me encontre con otra situacion y es que cuando yo pongo el rango de fechas y los importes... en otra hoja, no funciona.
Si llamo la funcion con algo asi no se calcula:
=EnRangoDeFechas(DiasHabiles!$A$2:$A$2196,F2,G2,DiasHabiles!$C$2:$C$2196)
Como hago para poder hacer esto en hojas o libros diferentes y que conserve la ruta completa y por lo tanto arroje el resultado ...



solo cambia la forma en que se determina el "Address" de los argumentos-rango de Fechas e Importes por algo +/- asi:

Function EnRangoDeFechas( _
Fechas As Range, _
Desde As Date, _
Hasta As Date, _
Importes As Range) As Double
EnRangoDeFechas = Evaluate("sumproduct((" & _
Fechas.Address(External:=True) & ">" & CLng(Desde) & ")*(" & _
Fechas.Address(External:=True) & "<=" & CLng(Hasta) & ")*" & _
Importes.Address(External:=True) & ")")
End Function
Respuesta Responder a este mensaje
#4 Yrjo, Inc.
10/06/2009 - 23:22 | Informe spam
Bueno Héctor, de nuevo muchas gracias por la gran ayuda.

PD: Normalmente uso las fórmulas nativas de excel pero en esta ocasión
necesitaba hacer unas cuentas con unas validaciones que no logré en excel y
que la función personalizada sí lo hizo por mí. =)



"Héctor Miguel" wrote:

hola, Jorge !

> ... pregunta, esto tambien sirve para rutas a archivos externos ya que me sale error
> y tiene que estar abierto el otro archivo. Es necesario eso?

sip, el otro libro necesariamente debera estar abierto, de lo contrario la UDF necesitara de (bastante) mas codificacion :-((
por esto es que te "recomendaba" en tu consulta original (en el otro hilo)...
=> p.d. (creo que) es mas sencillo aprovechar las funciones "nativas" de excel, que tratar de "inventar el hilo negro" (por vba)
=>
saludos,
hector.

__ OP __
>>> ... me encontre con otra situacion y es que cuando yo pongo el rango de fechas y los importes... en otra hoja, no funciona.
>>> Si llamo la funcion con algo asi no se calcula:
>>> =EnRangoDeFechas(DiasHabiles!$A$2:$A$2196,F2,G2,DiasHabiles!$C$2:$C$2196)
>>> Como hago para poder hacer esto en hojas o libros diferentes y que conserve la ruta completa y por lo tanto arroje el resultado ...
>>
>> solo cambia la forma en que se determina el "Address" de los argumentos-rango de Fechas e Importes por algo +/- asi:
>>
>> Function EnRangoDeFechas( _
>> Fechas As Range, _
>> Desde As Date, _
>> Hasta As Date, _
>> Importes As Range) As Double
>> EnRangoDeFechas = Evaluate("sumproduct((" & _
>> Fechas.Address(External:=True) & ">" & CLng(Desde) & ")*(" & _
>> Fechas.Address(External:=True) & "<=" & CLng(Hasta) & ")*" & _
>> Importes.Address(External:=True) & ")")
>> End Function



Respuesta Responder a este mensaje
#5 Héctor Miguel
11/06/2009 - 01:07 | Informe spam
hola, Jorge !

PD: Normalmente uso las formulas nativas de excel pero en esta ocasion
necesitaba hacer unas cuentas con unas validaciones que no logre en excel
y que la funcion personalizada si lo hizo por mi. =)



(solo para los registros y si te queda tiempo...)
me gustaria conocer la formula que no te funciona "nativamente" (?)

saludos,
hector.
Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaSiguiente Respuesta Tengo una respuesta
Search Busqueda sugerida