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)
Leer las respuestas