Cómo sumar.si.conjunto con vba

Ahora tengo el inconveniente de ejecutar una macro con la función sumar. Si. Conjunto, resulta que grabé uno con la grabadora de macros, pero el proceso de ejecución es muy lento, por ello espero puedas ayudarme.

El caso es el siguiente: En la columna G de la hoja "data global" debo sumar el contenido de la columna AD de la hoja "valores", siempre y cuando la columna R diga "si"

Primera imagen corresponde a la Hoja data global.

Segunda imagen corresponde a la Hoja valores.

Te adjunto el código que estoy usando, está resaltado con negrita la parte en la que necesito ayuda:

Sub suma_macro()
Set h1 = Sheets("data global")
Set h2 = Sheets("valores")
u1 = h1.Range("C" & Rows.Count).End(xlUp).Row 'data global
u2 = h2.Range("F" & Rows.Count).End(xlUp).Row 'valores

With h1.Range("E4:E" & u1)
.FormulaR1C1 = "=SUMIF(" & h2.Name & "!R2C6:R" & u2 & _
"C6,RC[-2]," & h2.Name & "!R2C21:R" & u2 & "C21)"
.Value = .Value
End With
With h1.Range("F4:F" & u1)
.FormulaR1C1 = "=SUMIF(" & h2.Name & "!R2C6:R" & u2 & _
"C6,RC[-3]," & h2.Name & "!R2C30:R" & u2 & "C30)"
.Value = .Value
End With
With h1.Range("G4:G" & u1)
.FormulaR1C1 = "=SUMIFS(Valores!C[23],Valores!C[11],""SI"",Valores!C[-1],'Data Global'!C[-4])"
.Value = .Value
End With
End Sub

Respuesta
2

Hay que acotar el rango de suma, en tu caso pusiste la fórmula así:

=SUMAR.SI.CONJUNTO(valores!AD:AD,valores!R:R,"SI",valores!F:F,'data global'!C:C)

Estás haciendo la búsqueda en toda la columna AD, en toda la columna R, F y C.

La fórmula con rangos quedaría así:

=SUMAR.SI.CONJUNTO(valores!$AD$2:$AD$7,valores!$R$2:$R$7,"SI",valores!$F$2:$F$7,C4)

Cuando realices la fórmula con la grabadora de macros debes seleccionar únicamente el rango de celdas que tiene información, después en la fórmula cambias la última fila del rango por la variable.

La macro actualizada quedaría así:

Sub suma_macro()
    Set h1 = Sheets("data global")
    Set h2 = Sheets("valores")
    u1 = h1.Range("C" & Rows.Count).End(xlUp).Row 'data global
    u2 = h2.Range("F" & Rows.Count).End(xlUp).Row 'valores
    '
    With h1.Range("E4:E" & u1)
        .FormulaR1C1 = "=SUMIF(" & h2.Name & "!R2C6:R" & u2 & _
        "C6,RC[-2]," & h2.Name & "!R2C21:R" & u2 & "C21)"
        .Value = .Value
    End With
    With h1.Range("F4:F" & u1)
        .FormulaR1C1 = "=SUMIF(" & h2.Name & "!R2C6:R" & u2 & _
        "C6,RC[-3]," & h2.Name & "!R2C30:R" & u2 & "C30)"
        .Value = .Value
    End With
    With h1.Range("G4:G" & u1)
        .FormulaR1C1 = "=SUMIFS(Valores!R2C30:R" & u2 & "C30," & _
            "Valores!R2C18:R" & u2 & "C18,""SI""," & _
            "Valores!R2C6:R" & u2 & "C6,RC[-4])"
        .Value = .Value
    End With
End Sub

Prueba nuevamente la macro

.

'S aludos. Dante Amor. Recuerda valorar la respuesta. G racias

.

Avísame cualquier duda

.

1 respuesta más de otro experto

Respuesta
1

te funcionaria la siguiente formula?   =SI(valores!R2="SI",valores!AD2,0)

Por lo que entendí todo depende si la columna tiene valor "SI" se debe sumar caso contrario no lo suma, por ende si esta columna en determinado momento cambia su valor a "SI" nuevamente, suma.

Ojala te sirva.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas