SumaProducto con condicion en VB?

05/09/2003 - 22:17 por Rene Moreno | Informe spam
Hla grupo, a ver si alguien me puede orientar en esto.
Intento usar la funcion SUMPRODUCT usando condiciones como en la hoja de
calculo, pero me causa error, este es el codigo

Sub prueba()
Set FF = fac.Range("tblFacts").CurrentRegion
Set WF = Application.WorksheetFunction
cve = "1"
With FF.CurrentRegion.Columns

'aqui se genera el error.
mto = Round(WF.SumProduct(.Item(1) = cve, .Item(3) = "2003/08/01",
.Item(4)), 2)


End With
MsgBox mto
End Sub

En excel se puede hacer "=SUMAPRODUCTO( ( rango1 = val1 ) * ( rango2 val2 ) * ( rangosuma ) )
pero en VB no.

Gracias de antemano.

Atte.
Rene Moreno
"La imaginacion es mas importante que el conocimiento"
Albert Einstein
 

Leer las respuestas

#1 Fernando Arroyo
06/09/2003 - 00:17 | Informe spam
Yo solamente he conseguido que me funcione application.worksheetfunction.sumproduct si no pongo condiciones a los argumentos. Lo que sí he conseguido es que funcione usando la función EVALUATE. Me resulta difícil escribir la instrucción que vas a necesitar si usas EVALUATE, pero te pongo un ejemplo: en Hoja1 del libro tenemos
columna A
a
b
c
a
b
c

columna B
1
2
3
1
2
3

columna C
1
10
100
1000
10000
100000

En un sub de VBA:

MsgBox Evaluate("=sumproduct((Hoja1!A1:A6=""a"")*(Hoja1!B1:B6=1)*Hoja1!C1:C6)")

Resultado: 1001

Si no consigues "construir" tu Evaluate, dimelo e intentaré ayudarte. En cualquier caso, pienso que tal como lo estás intentando no te va a funcionar porque la fecha normalmente no va como tú la pones sino con su valor numérico (por ejemplo, 2003/08/01 sería 37834, suponiendo que 8 sea el mes), a no ser que las fechas estén en la hoja como cadenas de texto.
Un saludo.


Fernando Arroyo
MS MVP - Excel



"Rene Moreno" escribió en el mensaje news:%23YKaFr%
Hla grupo, a ver si alguien me puede orientar en esto.
Intento usar la funcion SUMPRODUCT usando condiciones como en la hoja de
calculo, pero me causa error, este es el codigo

Sub prueba()
Set FF = fac.Range("tblFacts").CurrentRegion
Set WF = Application.WorksheetFunction
cve = "1"
With FF.CurrentRegion.Columns

'aqui se genera el error.
mto = Round(WF.SumProduct(.Item(1) = cve, .Item(3) = "2003/08/01",
.Item(4)), 2)


End With
MsgBox mto
End Sub

En excel se puede hacer "=SUMAPRODUCTO( ( rango1 = val1 ) * ( rango2 > val2 ) * ( rangosuma ) )
pero en VB no.

Gracias de antemano.

Atte.
Rene Moreno
"La imaginacion es mas importante que el conocimiento"
Albert Einstein


Preguntas similares