SUmaproducto en Codigo ??

26/11/2007 - 16:30 por José A. Castrejón | Informe spam
Hola Buenos Dias

Actualmente utilizo para sumar un rango de datos a partir de una condicion
el siguiente codigo, con esto pongo las ventas totales de cada producto en un
listbox


Dim Cuantos As Integer
Dim Pro As Worksheet, Rg As Range, Contador As Integer
Dim I As Integer, Fila As Integer, Hay As Integer
Dim RgL As Range, Vtas As Double
Dim Part As Worksheet
Dim RgP As Range, RgC As Range

Set Pro = Sheets("PRODUCTOS")
Set Rg = Sheets("PRODUCTOS").Range("B2:B60000")
Set RgP = Sheets("PARTIDAS").Range("K2:K60000")
Set RgC = Sheets("PARTIDAS").Range("A2:A60000")

Cuantos = Application.WorksheetFunction.CountIf(Rg, ">0")

If Cuantos <= 0 Then Exit Sub

Cuantos = Cuantos + 1

ConsProd.LstProd.Clear

For I = 2 To Cuantos

If Pro.Cells(I, 7) >= 0 And Pro.Cells(I, 3) <> "Disponible" Then
ConsProd.LstProd.AddItem
ConsProd.LstProd.List(Fila, 0) = Pro.Cells(I, 2)
ConsProd.LstProd.List(Fila, 1) = Pro.Cells(I, 3)
Vtas = Application.WorksheetFunction.SumIf(RgC, Pro.Cells(I, 2),
RgP)
ConsProd.LstProd.List(Fila, 2) = Format(Vtas, "##,##0.00")
Fila = Fila + 1
Contador = Contador + 1
If Contador = Cuantos Then Exit For
End If
Next

Pero si quisiera sumar con mas de 1 condicion ????

En una hoja de calculo usaria Sumaproducto..con algo tipo:
=sumaproducto(--(rango=condicion),--(rango,condicion),(rango a sumar))

Como traduzco lo anterior a codigo, especialmente los guiones que convierten
a FALSO/VERDADERO...

O lo debo hacer de otta forma, no quiero recurrir a calcular esto en la
hoja, quisiera calcularo en el codigo.


Gracias y Saludos

Preguntas similare

Leer las respuestas

#1 AnSanVal
26/11/2007 - 22:11 | Informe spam
En este caso (como en muchos otros); activa la grabadora de macros, escribe
la fórmula en una celda y detén la grabadora. Con esto tienes el código que
pides, con condiciones y rangos incluidos.

Saludos desde Tenerife (Islas Canarias).
************************************************
"José A. Castrejón" escribió en el
mensaje news:
Hola Buenos Dias

Actualmente utilizo para sumar un rango de datos a partir de una condicion
el siguiente codigo, con esto pongo las ventas totales de cada producto en
un
listbox


Dim Cuantos As Integer
Dim Pro As Worksheet, Rg As Range, Contador As Integer
Dim I As Integer, Fila As Integer, Hay As Integer
Dim RgL As Range, Vtas As Double
Dim Part As Worksheet
Dim RgP As Range, RgC As Range

Set Pro = Sheets("PRODUCTOS")
Set Rg = Sheets("PRODUCTOS").Range("B2:B60000")
Set RgP = Sheets("PARTIDAS").Range("K2:K60000")
Set RgC = Sheets("PARTIDAS").Range("A2:A60000")

Cuantos = Application.WorksheetFunction.CountIf(Rg, ">0")

If Cuantos <= 0 Then Exit Sub

Cuantos = Cuantos + 1

ConsProd.LstProd.Clear

For I = 2 To Cuantos

If Pro.Cells(I, 7) >= 0 And Pro.Cells(I, 3) <> "Disponible" Then
ConsProd.LstProd.AddItem
ConsProd.LstProd.List(Fila, 0) = Pro.Cells(I, 2)
ConsProd.LstProd.List(Fila, 1) = Pro.Cells(I, 3)
Vtas = Application.WorksheetFunction.SumIf(RgC, Pro.Cells(I,
2),
RgP)
ConsProd.LstProd.List(Fila, 2) = Format(Vtas, "##,##0.00")
Fila = Fila + 1
Contador = Contador + 1
If Contador = Cuantos Then Exit For
End If
Next

Pero si quisiera sumar con mas de 1 condicion ????

En una hoja de calculo usaria Sumaproducto..con algo tipo:
=sumaproducto(--(rango=condicion),--(rango,condicion),(rango a sumar))

Como traduzco lo anterior a codigo, especialmente los guiones que
convierten
a FALSO/VERDADERO...

O lo debo hacer de otta forma, no quiero recurrir a calcular esto en la
hoja, quisiera calcularo en el codigo.


Gracias y Saludos




Respuesta Responder a este mensaje
#2 Héctor Miguel
26/11/2007 - 22:30 | Informe spam
hola, José !

aunque puedes usar funciones de hoja de calculo (como sumproduct) desde vba...
la evaluacion de formulas matriciales no tiene soporte en vba (por lo cual)...
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. la siguiente "forma" NO FUNCIONA:
miVariable = Application.WorksheetFunction.SumProduct((Range("Canal")=1)*(Range("ABC")="A"))

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

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

__ la consulta original __
Actualmente utilizo para sumar un rango de datos a partir de una condicion el siguiente codigo
con esto pongo las ventas totales de cada producto en un listbox
Dim Cuantos As Integer
Dim Pro As Worksheet, Rg As Range, Contador As Integer
Dim I As Integer, Fila As Integer, Hay As Integer
Dim RgL As Range, Vtas As Double
Dim Part As Worksheet
Dim RgP As Range, RgC As Range
Set Pro = Sheets("PRODUCTOS")
Set Rg = Sheets("PRODUCTOS").Range("B2:B60000")
Set RgP = Sheets("PARTIDAS").Range("K2:K60000")
Set RgC = Sheets("PARTIDAS").Range("A2:A60000")
Cuantos = Application.WorksheetFunction.CountIf(Rg, ">0")
If Cuantos <= 0 Then Exit Sub
Cuantos = Cuantos + 1
ConsProd.LstProd.Clear
For I = 2 To Cuantos
If Pro.Cells(I, 7) >= 0 And Pro.Cells(I, 3) <> "Disponible" Then
ConsProd.LstProd.AddItem
ConsProd.LstProd.List(Fila, 0) = Pro.Cells(I, 2)
ConsProd.LstProd.List(Fila, 1) = Pro.Cells(I, 3)
Vtas = Application.WorksheetFunction.SumIf(RgC, Pro.Cells(I, 2), RgP)
ConsProd.LstProd.List(Fila, 2) = Format(Vtas, "##,##0.00")
Fila = Fila + 1
Contador = Contador + 1
If Contador = Cuantos Then Exit For
End If
Next

Pero si quisiera sumar con mas de 1 condicion ????
En una hoja de calculo usaria Sumaproducto..con algo tipo:
=sumaproducto(--(rango=condicion),--(rango,condicion),(rango a sumar))
Como traduzco lo anterior a codigo, especialmente los guiones que convierten a FALSO/VERDADERO...
O lo debo hacer de otta forma, no quiero recurrir a calcular esto en la hoja, quisiera calcularo en el codigo.
Respuesta Responder a este mensaje
#3 José A. Castrejón
26/11/2007 - 22:39 | Informe spam
Gracias por tu interes, sin embargo lo que deseo es hacer el calculo en el
codigo para ponerlo en el listbox, no deseo poner la formula en una hoja.


Alguna sugerencia ??
Gracias


"AnSanVal" wrote:

En este caso (como en muchos otros); activa la grabadora de macros, escribe
la fórmula en una celda y detén la grabadora. Con esto tienes el código que
pides, con condiciones y rangos incluidos.

Saludos desde Tenerife (Islas Canarias).
************************************************
"José A. Castrejón" escribió en el
mensaje news:
> Hola Buenos Dias
>
> Actualmente utilizo para sumar un rango de datos a partir de una condicion
> el siguiente codigo, con esto pongo las ventas totales de cada producto en
> un
> listbox
>
>
> Dim Cuantos As Integer
> Dim Pro As Worksheet, Rg As Range, Contador As Integer
> Dim I As Integer, Fila As Integer, Hay As Integer
> Dim RgL As Range, Vtas As Double
> Dim Part As Worksheet
> Dim RgP As Range, RgC As Range
>
> Set Pro = Sheets("PRODUCTOS")
> Set Rg = Sheets("PRODUCTOS").Range("B2:B60000")
> Set RgP = Sheets("PARTIDAS").Range("K2:K60000")
> Set RgC = Sheets("PARTIDAS").Range("A2:A60000")
>
> Cuantos = Application.WorksheetFunction.CountIf(Rg, ">0")
>
> If Cuantos <= 0 Then Exit Sub
>
> Cuantos = Cuantos + 1
>
> ConsProd.LstProd.Clear
>
> For I = 2 To Cuantos
>
> If Pro.Cells(I, 7) >= 0 And Pro.Cells(I, 3) <> "Disponible" Then
> ConsProd.LstProd.AddItem
> ConsProd.LstProd.List(Fila, 0) = Pro.Cells(I, 2)
> ConsProd.LstProd.List(Fila, 1) = Pro.Cells(I, 3)
> Vtas = Application.WorksheetFunction.SumIf(RgC, Pro.Cells(I,
> 2),
> RgP)
> ConsProd.LstProd.List(Fila, 2) = Format(Vtas, "##,##0.00")
> Fila = Fila + 1
> Contador = Contador + 1
> If Contador = Cuantos Then Exit For
> End If
> Next
>
> Pero si quisiera sumar con mas de 1 condicion ????
>
> En una hoja de calculo usaria Sumaproducto..con algo tipo:
> =sumaproducto(--(rango=condicion),--(rango,condicion),(rango a sumar))
>
> Como traduzco lo anterior a codigo, especialmente los guiones que
> convierten
> a FALSO/VERDADERO...
>
> O lo debo hacer de otta forma, no quiero recurrir a calcular esto en la
> hoja, quisiera calcularo en el codigo.
>
>
> Gracias y Saludos
>
>
>
>



Respuesta Responder a este mensaje
#4 José A. Castrejón
26/11/2007 - 23:16 | Informe spam
Creo que esto es lo que buscaba, aunque no lo he probado, estoy seguro que
como muchas veces estas en lo correcto, lo probare el dia de mañana y te
comento.
Por lo pronto muchas gracias por tu tiempo.

Saludos

"Héctor Miguel" wrote:

hola, José !

aunque puedes usar funciones de hoja de calculo (como sumproduct) desde vba...
la evaluacion de formulas matriciales no tiene soporte en vba (por lo cual)...
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. la siguiente "forma" NO FUNCIONA:
miVariable = Application.WorksheetFunction.SumProduct((Range("Canal")=1)*(Range("ABC")="A"))

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

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

__ la consulta original __
> Actualmente utilizo para sumar un rango de datos a partir de una condicion el siguiente codigo
> con esto pongo las ventas totales de cada producto en un listbox
> Dim Cuantos As Integer
> Dim Pro As Worksheet, Rg As Range, Contador As Integer
> Dim I As Integer, Fila As Integer, Hay As Integer
> Dim RgL As Range, Vtas As Double
> Dim Part As Worksheet
> Dim RgP As Range, RgC As Range
> Set Pro = Sheets("PRODUCTOS")
> Set Rg = Sheets("PRODUCTOS").Range("B2:B60000")
> Set RgP = Sheets("PARTIDAS").Range("K2:K60000")
> Set RgC = Sheets("PARTIDAS").Range("A2:A60000")
> Cuantos = Application.WorksheetFunction.CountIf(Rg, ">0")
> If Cuantos <= 0 Then Exit Sub
> Cuantos = Cuantos + 1
> ConsProd.LstProd.Clear
> For I = 2 To Cuantos
> If Pro.Cells(I, 7) >= 0 And Pro.Cells(I, 3) <> "Disponible" Then
> ConsProd.LstProd.AddItem
> ConsProd.LstProd.List(Fila, 0) = Pro.Cells(I, 2)
> ConsProd.LstProd.List(Fila, 1) = Pro.Cells(I, 3)
> Vtas = Application.WorksheetFunction.SumIf(RgC, Pro.Cells(I, 2), RgP)
> ConsProd.LstProd.List(Fila, 2) = Format(Vtas, "##,##0.00")
> Fila = Fila + 1
> Contador = Contador + 1
> If Contador = Cuantos Then Exit For
> End If
> Next
>
> Pero si quisiera sumar con mas de 1 condicion ????
> En una hoja de calculo usaria Sumaproducto..con algo tipo:
> =sumaproducto(--(rango=condicion),--(rango,condicion),(rango a sumar))
> Como traduzco lo anterior a codigo, especialmente los guiones que convierten a FALSO/VERDADERO...
> O lo debo hacer de otta forma, no quiero recurrir a calcular esto en la hoja, quisiera calcularo en el codigo.



Respuesta Responder a este mensaje
#5 José A. Castrejón
27/11/2007 - 15:42 | Informe spam
Hola de nuevo, y lo dicho : al parecer funciona muy bien.
Gracias de nuevo
Saludos

"Héctor Miguel" wrote:

hola, José !

aunque puedes usar funciones de hoja de calculo (como sumproduct) desde vba...
la evaluacion de formulas matriciales no tiene soporte en vba (por lo cual)...
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. la siguiente "forma" NO FUNCIONA:
miVariable = Application.WorksheetFunction.SumProduct((Range("Canal")=1)*(Range("ABC")="A"))

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

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

__ la consulta original __
> Actualmente utilizo para sumar un rango de datos a partir de una condicion el siguiente codigo
> con esto pongo las ventas totales de cada producto en un listbox
> Dim Cuantos As Integer
> Dim Pro As Worksheet, Rg As Range, Contador As Integer
> Dim I As Integer, Fila As Integer, Hay As Integer
> Dim RgL As Range, Vtas As Double
> Dim Part As Worksheet
> Dim RgP As Range, RgC As Range
> Set Pro = Sheets("PRODUCTOS")
> Set Rg = Sheets("PRODUCTOS").Range("B2:B60000")
> Set RgP = Sheets("PARTIDAS").Range("K2:K60000")
> Set RgC = Sheets("PARTIDAS").Range("A2:A60000")
> Cuantos = Application.WorksheetFunction.CountIf(Rg, ">0")
> If Cuantos <= 0 Then Exit Sub
> Cuantos = Cuantos + 1
> ConsProd.LstProd.Clear
> For I = 2 To Cuantos
> If Pro.Cells(I, 7) >= 0 And Pro.Cells(I, 3) <> "Disponible" Then
> ConsProd.LstProd.AddItem
> ConsProd.LstProd.List(Fila, 0) = Pro.Cells(I, 2)
> ConsProd.LstProd.List(Fila, 1) = Pro.Cells(I, 3)
> Vtas = Application.WorksheetFunction.SumIf(RgC, Pro.Cells(I, 2), RgP)
> ConsProd.LstProd.List(Fila, 2) = Format(Vtas, "##,##0.00")
> Fila = Fila + 1
> Contador = Contador + 1
> If Contador = Cuantos Then Exit For
> End If
> Next
>
> Pero si quisiera sumar con mas de 1 condicion ????
> En una hoja de calculo usaria Sumaproducto..con algo tipo:
> =sumaproducto(--(rango=condicion),--(rango,condicion),(rango a sumar))
> Como traduzco lo anterior a codigo, especialmente los guiones que convierten a FALSO/VERDADERO...
> O lo debo hacer de otta forma, no quiero recurrir a calcular esto en la hoja, quisiera calcularo en el codigo.



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