autofiltro y subtotales con 2 condiciones en VBA

15/11/2008 - 13:02 por Mambrino44 | Informe spam
Hola KL !

Gracias a tu magistral ayuda solucioné el problema que tenía.
A pesar de todo, como mi libro excel tiene tantos datos, todo
se relentiza eternamente, así que he optado por utilizar macros
en vez de celdas con fórmulas, por lo tanto he aquí mi pregunta:


como sería la fórmula que me proporcionaste en lenguaje VBA?
esta es la fórmula exactamente:
=SUMAPRODUCTO(G9:INDIRECTO(Q7)*(E9:INDIRECTO(Q8)="PEDIDO")*
(SUBTOTALES
(3;DESREF(E9;FILA(E9:INDIRECTO(Q8))-FILA(E9);))>0))


De nuevo te doy las gracias (puedas ayudarme o no) y quede
patente mi admiración pues mientras mas aprende uno mas
cuenta se da de lo poco que sabe.


Saludos cordiales amigo,
Juan Sánchez
 

Leer las respuestas

#1 Héctor Miguel
16/11/2008 - 04:57 | Informe spam
hola, Juan ! (en tanto regresa KL) ;)

como seria... en lenguaje VBA esta... formula exactamente:


=SUMAPRODUCTO(G9:INDIRECTO(Q7)*(E9:INDIRECTO(Q8)="PEDIDO")*(SUBTOTALES (3;DESREF(E9;FILA(E9:INDIRECTO(Q8))-FILA(E9);))>0))

1) aunque puedes usar funciones de hoja de calculo (como sumproduct) desde vba...
la evaluacion de formulas que trabajan matricialmente no tiene soporte en vba (por lo que)...
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. si suponemos que tienes dos rangos-nombrados "RangoNumeros" y "RangoLetras"

la siguiente "forma" NO FUNCIONA:
miVariable = Application.WorksheetFunction.SumProduct((Range("rangonumeros")=1)*(Range("rangoletras")="A"))

a menos que la sustituyas por:
miVariable = Evaluate("sumproduct((rangonumeros=1)*(rangoletras=""a""))")

2) la formula que expones no podra "trabajar" (en vba) combinando las funciones indirecto(... y subtotales(... con desref(... y fila(...

3) la alternativa de "evaluacion" seria +/- como la siguiente -suponiendo que la formula la usas en la celda [M7]-...
[m7] = Evaluate("sumproduct(g9:" & [q7] & "*(e9:" & [q8] & "=""pedido"")*(subtotal(3,offset(e9,row(e9:" & [q8] & ")-row(e9),))>0))")

-> haz los cambios necesarios si podemos suponer que la variable "venta" la quieres en la celda [M8] -???-

sin conocer tu modelo de trabajo, no se puede "evaluar" que tanta rapidez ganaras cambiando formulas por procedimientos vba ???

si cualquier duda (o informacion adicional)... comentas ?
saludos,
hector.

Preguntas similares