Sumar conceptos con Macros (para reemplazar función Sumaproducto)

Necesito sumar una gran variedad de conceptos que tiene muchos códigos y varias condiciones. El ejemplo se presenta sólo con algunos.

Puedo utilizar la función sumaproducto para generar la información, pero cuando son más de 10 códigos ya se empieza a dificultar un poco, porque agrego cada código nuevo sumando a los anteriores "= SUMAPRODUCTO((BASE!$A$2:$A$14=A13)*(BASE!$B$2:$B$14=B13)*((BASE!$D$2:$D$14=50)+(BASE!$D$2:$D$14=56))*(BASE!$H$2:$H$14))". Por lo señalado es que me gustaría realizar los reportes con macros.

Se pide en la hoja control sumar códigos de la hoja base según parámetros indicados en la hoja variables.

En la hoja variables se indica parámetros de selección: lavado y secado, y refrigeración (se agregarán más parámetros en el futuro).

En la hoja control hay una columna para los items mencionados anteriormente, donde deberá sumarse códigos según parámetros indicados y finalmente realizar una sumatoria totalizando los valores.

Tengo entendido que existen funciones para acelerar las macros. ¿Podrías utilizarlas en la solución del problema?

Ojalá la solución sea comentada en las partes relevantes.

Hoja Base

Hoja Variables

Hoja Control

1 Respuesta

Respuesta
1

H o l a:

Envíame tu archivo con los ejemplos.

Recuerda poner tu nombre de usuario en el asunto del correo

S a l u d os

H o l a:

Te anexo la macro

Sub Calcular()
'Por.Dante Amor
    Set h1 = Sheets("CONTROL")
    Set h2 = Sheets("BASE")
    Set h3 = Sheets("VARIABLES")
    '
    uf = h1.Range("A" & Rows.Count).End(xlUp).Row
    h1.UsedRange.Offset(1, 3).ClearContents
    h1.Rows(uf + 2).ClearContents
    h1.Cells(uf + 2, "C") = "TOTALES"
    '
    For c = h1.Columns("D").Column To h1.Cells(1, Columns.Count).End(xlToLeft).Column
        tip = h1.Cells(1, c)
        For i = 2 To uf
            emp = h1.Cells(i, "A")
            con = h1.Cells(i, "B")
            For j = 2 To h2.Range("A" & Rows.Count).End(xlUp).Row
                If h2.Cells(j, "A") = emp And h2.Cells(j, "B") = con Then
                    cod = h2.Cells(j, "D")
                    xva = h2.Cells(j, "H")
                    Set b = h3.Columns("A").Find(cod, lookat:=xlWhole)
                    If Not b Is Nothing Then
                        If h3.Cells(b.Row, "C") = tip Then
                            tot = tot + xva
                        End If
                    End If
                End If
            Next
            h1.Cells(i, c) = tot
            tot = 0
        Next
        h1.Cells(uf + 2, c) = Application.Sum(h1.Range(h1.Cells(2, c), h1.Cells(uf, c)))
    Next
    '
    MsgBox "Calcular Terminado", vbInformation, ""
End Sub

S a l u d o s . D a n t e   A m o r. Recuerda valorar la respuesta. G r a c i a s

Excelente la solución

Pero yo necesitaba que los tipos se manejaran en la forma que lo dispuse en el archivo.

Se van a seguir agregando tipos hacia el lado y uno de ellos puede tener una mezcla de los existentes. También  se agregarán más códigos hacia abajo.

Ej: 

Podría haber una segunda solución según lo explicado?

Se agradece la buena voluntad.

H  ol a:

Claro que se puede hacer la macro de esa forma, pero mi recomendación es que, como base datos, los registros crezcan hacia abajo. Tal y como tienes tus hojas "CONTROL" y "BASE".

Incluso, puedes tener los registros de variables en registros tal como te lo envié y con una tabla dinámica los puedes agrupar como lo tienes en tus columnas E, F y G, para presentar la información en un reporte.

En verdad, analiza la propuesta. Según mi recomendación de los registros en las columnas A y B puedes obtener las columnas E, F y G, de forma fácil; pero si tienes tus registros en E, F y G, se tendrían que hacer varios pasos para llegar a lo que tienes en las columnas A y B.

Si vas a capturar la información en A y B y también en E, F y G, estás duplicando información y son más probables los errores si realizas 2 capturas que si realizas únicamente una captura.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas