Func personalizada->sumaproducto

09/06/2009 - 22:41 por Yrjo | Informe spam
buenas tardes, quisiera saber si se puede incluir la fórmula de sumaproducto
en una función personalizada así como por ejemplo subtotal puede ser con
Application.Subtotal. Cuál 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))

Gracias.

Jorge Martínez
 

Leer las respuestas

#1 Héctor Miguel
10/06/2009 - 01:24 | Informe spam
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 similares