Evaluate("=sumproduct...

16/06/2005 - 19:33 por Brel | Informe spam
Hola grupo, lo que intento casi ya desesperado, sin que resulte es:
Dada una condición en el rango O6:O30 se cuentan las veces que se repite el
Nº de cliente (col3: rango C6:C30) y
- si no se repite: se toma el valor de la columna importe (col 10: J6:J30
que como esta en un bucle es cells(i+5,10))
- si se repite (este es el problema) quiero sume los importes (col 10: rango
J6:J30) en que el Nº cliente sea el mismo (col 3:Nº Cliente, y la cuenta en
O6:O30) poniendo solo el valor cuando la cuenta sea 1 y no en las restantes
del mismo cliente donde en la cuenta se pone 0
Este es el código que peta en el evaluate:
If Cells(i + 5, 15) = 1 Then
ActiveCell.Value = Cells(i + 5, 10)
ElseIf Cells(i + 5, 15) > 1 Then
ActiveCell.Value =
Evaluate("=SumProduct((C6:C30Æ)*(O6:O30>1)*(Cells(i+5,15)<>0)*J6:J30")
Else
ActiveCell.Value = 0
End If

Un ejemplo gráfico:
Nº cliente importe cuenta total cliente
1 1000 1 1000
2 100 2
600 -> Que aquí marque el total de ese cliente que se
repite 2 veces
2 500 0
0 -> Se repite el cliente, al ser la 2ª o más vez
aparece 0
3 350 1 350

La cuenta sale sin problemas, pero el total cliente no lo consigo pese a
haber investigado en el grupo, ver respuestas (para variar Fernando Arroyo
del 6 sep 2003; aunque hay más monstruos por ahí, de mayor quiero ser como
tú... de momento solo tengo 40 ;-)) ...
Gracias anticipadas a todas -os
 

Leer las respuestas

#1 Héctor Miguel
17/06/2005 - 02:47 | Informe spam
hola. Brel !

... intento casi ya desesperado, sin que resulte es:
Dada una condicion [...]
Este es el codigo que peta en el evaluate:
If Cells(i + 5, 15) = 1 Then
ActiveCell.Value = Cells(i + 5, 10)
ElseIf Cells(i + 5, 15) > 1 Then
ActiveCell.Value = Evaluate("=SumProduct((C6:C30Æ)*(O6:O30>1)*(Cells(i+5,15)<>0)*J6:J30")
Else
ActiveCell.Value = 0
End If
La cuenta sale sin problemas, pero el total cliente no lo consigo [...]



al usar el metodo evaluate y por lo que respecta a que el codigo 'peta' en esa parte...
1) la expresion total [dentro de los parentesis del metodo] DEBE estar delimitada por comillas dobles
[por lo anterior] a tu expresion LE FALTA el parentesis 'de cierre' de la funcion 'SumProduct(...)'
[dicho sea 'da paso'] no es 'imprescindible' usar el signo '=' antes de la funcion 'SumProduct' ;)
2) en el 'entendido' de que la expresion dentro del evaluate 'necesita' [poder] ser interpretada como texto...
la parte de las 'variables' =>(Cells(i+5,15)<>0)<= NO esta 'cumpliendo su cometido'... puesto que...
-> si ha quedado como texto... NO es 'interpretable' como argumento de funcion EN hojas de calculo :-(
-> [aunque] podrias 'convertirla' a cadena de texto 'interpretable' [segun el punto anterior] PERO...
3) si la columna 15 es la columna 'O'... 'debiera' ser una matriz de rango que 'se corresponda' a sus 'contra-partes'...
->(O6:O30>1)<- o... ->(C6:C30Æ)<- o... ->J6:J30<- [con lo cual] la conversion quedaria +/- como sigue:
->(O6:O30<>0)
4) una vez 'convertida' a cadena de texto 'interpretable' para evaluate... [aparentemente] 'contra-viene' con ->(O6:O30>1)<-
o [al menos]... podria incluir 'exclusiones' entre las comparaciones >1 y <>0 [no se si 'soy claro' en este punto] :-(
5) puesto que esta consulta la inicias con la expresion... 'Dada una condicion...'
[al menos de momento] NO alcanzo a 'detectar' que relacion existe entre 'C6', la variable 'i' [i+5] y la 'ActiveCell' -?-

si [de seguro] no tengo el 'panorama completo'... y hubiera 'detalles en el tintero'... comentas?
saludos,
hector.

Preguntas similares