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

Preguntas similare

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.
Respuesta Responder a este mensaje
#2 Mambrino44
18/11/2008 - 22:42 | Informe spam
Ante todo disculpa mi tardanza en responder a tu amable ayuda pero he
tenido un corte de internet de varios dias.

Debo darte las gracias porque efectivamente la solucion que me das
funciona a la perfeccion.

He de decir que tanto KL como tu, Hector, sois unos verdaderos kracks,
he leido muchisimas soluciones y ayudas
que proporcionais a los amigos que acuden a vosotros solicitando
vuestro asesoramiento y quiero expresaros mi
mas sincera admiración por el despliegue de conocimientos que
demostrais tener y por supuesto por compartirlos
con los que solicitamos vuestra ayuda. Muchas gracias a los dos.

Saludos amigos,
Juan Sánchez
Respuesta Responder a este mensaje
#3 Héctor Miguel
19/11/2008 - 06:42 | Informe spam
hola, Juan !

(por tus palabras)...
muy agradecido !!!... muy agradecido !!!... y muy agradecido !!!

(creo que KL te diria algo similar a lo siguiente)...
solo es cuestion de "seguir pegados al foro, comprando broncas ajenas" :))
(aprendes... lo que no se ve en ningun libro) ;)

saludos,
hector.
email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida