Excel Avanzado

Macros, Vba en Excel y muchos ejemplos de nuestro Curso de Excel Avanzado

Excel Avanzado

Función WorksheetFunction.SumProduct

| 5 comentarios

Esta función es equivalente a la usada directamente en cualquier celda de Excel "=SUMAPRODUCTO(matriz1, matriz2,...)", con la diferencia de que puede ser incluida en el lenguaje VBA para programar una macro. La notación de esta función en VBA es : "Application.WorksheetFunction.SumProduct(arg1,arg2,...)".

Esta función multiplica cada uno de los componentes de las matrices con su semejante en la otra matriz,  y devuelve la suma de esos productos. Para ello, las matrices deben tener las mismas dimensiones, es decir, todas las matrices deben tener el mismo número de filas y  de columnas. Esto se ilustra mejor en el siguiente ejemplo:

función sumaproducto

función sumaproducto

Para aplicar esta función en VBA, desarrollaremos el siguiente ejemplo, en el que tenemos la cantidad vendida de ciertos productos y sus correspondientes precios unitarios, entonces para hallar el importe total se puede usar una macro como se muestra a continuación:

sumaprod2

sumaprod6

(Para mayor visualización de la imagen, hacer click en la misma)

En este ejemplo se usó la matriz1 "cantidad" con 7 filas y 1 columna y la matriz2 "precio" con las mismas dimensiones, ya que ese es el requisito para esta función. Luego, se multiplicaron los elementos de cada matriz, para finalmente sumarlos. De manera similar, podemos usar la función WorksheetFunction.SumProduct para obtener promedios ponderados, como se muestra en el siguiente ejemplo:

sumaprodd

(Para mayor visualización de la imagen, hacer click en la misma)

Cabe mencionar que si alguna de las celdas de la matriz se encontrara vacía, se multiplica como si éste tuviera valor cero. Además, esta función se puede usar con dos o más matrices.

Por: Katherine Yahaira Quintero Garibay

5 comentarios

  1. Interesante la función de Suma producto para macros, es una función simple práctica. Si bien es cierto que en excel existe una función llamada "SUMAPRODUCTO", lo explicado aquí será muy útil cuando vamos automatizar estos cálculos. Esta función ayudará mucho a las empresas para que puedan calcular costos de producción diarias, para calcular costos de comercialización, para calcular notas ponderadas como en el ejemplo de este blog.

  2. Al probar los códigos, faltó agregar el texto "Total" para que resulte igual al ejemplo. Añadí el código texto para que la macro desarrolle tal cual el ejemplo:

    Sub sumaproducto1()

    cantidad = Worksheets("Hoja1").Range("B2:B8")
    precio = Worksheets("Hoja1").Range("C2:C8")
    Total = Application.WorksheetFunction.SumProduct(cantidad, precio)

    Texto = Range("B9")
    Range("B9") = "Total"

    End Sub

    Esta función la utilizo mucho en mis bases de datos. Ahora con macros será de mayor utilidad.

  3. buenas tardes muy bueno es posteo Katherine Yahaira pero me podria ayudar con condigo que me falta para terminar un proyecto de ingreso y salida de mercaderia de un almacen se lo agredecia un monton le explico :
    tengo un formulario para ingresar productos y otra para salidas lo que deseo hacer es que el producto que entre o salga busque al almacen que pertenece debido a que tengo 3 almacenes en los almacenes tengo los mismos productos pero deseo hacerlo para controlar que almacen es que el mueve mas mercaderia

    este el modelo del formulario para ingresar de mercaderia

    producto: aceite
    almacen de descarga : almacén 1 (o tambien sacar del almacen 2 ó almacen 3)
    cantidad : 10

    este el modelo del formulario para salida de mercaderia

    producto: aceite
    almacen de descarga : almacén 1 (o tambien sacar del almacen 2 ó almacen 3)
    cantidad : 10

    esta es la base de datos donde se va a guardar

    producto almacen Stock Inicial ingresos salidas stock

    aceite almacen 1 2 1 3
    aceite almacen 2 4 6 -2
    aceite almacen 3 5 2 2 5

    gracias haber si me puede ayudar

    atte
    robert

  4. ESTE ES EL ERROR QUE ME DA ALGUIEN PODRIA AYUDARME POR FAVOR ESTOY AQUI PILLADO.MUCHAS GRACIAS

    Sub CONTRATOS()

    Y SALE EN AMARILLO Windows("GESTION DE CLIENTES_DEFINITIVO.XLSM").Activate
    Worksheets("PROFORMA AUTEM").Visible = True
    Worksheets("CONTRATA AUTEM").Visible = True
    Worksheets("FACTURA AUTEM").Visible = True

    Dim RANGO As Sheets

    Set RANGO = Sheets(Array("PROFORMA AUTEM", "CONTRATA AUTEM", "FACTURA AUTEM"))

    RANGO.Select
    RANGO.Copy

    Windows("GESTION DE CLIENTES_DEFINITIVO.XLSM").Activate
    Worksheets("PROFORMA AUTEM").Visible = False
    Worksheets("CONTRATA AUTEM").Visible = False
    Worksheets("FACTURA AUTEM").Visible = False

    End Sub

  5. Estimados amigos buenas mi nombre es Orlando, soy nuevo en macros, por favor alguien me ayuda quiero usar esta formula en macros: =SUMAPRODUCTO(MAX((E6:E37=EMPLEADO)*FILA(E6:E37))) hice lo siguiente:
    Application.WorksheetFunction.SumProduct(Application.WorksheetFunction.Max((Worksheets("TareoDiario").Range("E6:E37") = valorBuscado) * Application.WorksheetFunction.Row(Worksheets("TareoDiario").Range("E6:E37").Row)))
    Pero sale error "Los tipos no coinciden". Agradeceré su apoyo

Deja una respuesta

Los campos requeridos estan marcados con *.