Funciones SUMIF y SUMIFS de VBA

Este tutorial le mostrará cómo usar las funciones SUMIF y SUMIFS de Excel en VBA

VBA no tiene un equivalente de las funciones SUMIF o SUMIFS que puede usar: un usuario tiene que usar las funciones integradas de Excel en VBA usando el WorkSheetFunction objeto.

Hoja de trabajo SUMIF Función

El objeto WorksheetFunction se puede utilizar para llamar a la mayoría de las funciones de Excel que están disponibles en el cuadro de diálogo Insertar función en Excel. La función SUMIF es una de ellas.

123 Sub TestSumIf ()Rango ("D10") = Application.WorksheetFunction.SumIf (Rango ("C2: C9"), 150, Rango ("D2: D9"))End Sub

El procedimiento anterior solo sumará las celdas en el rango (D2: D9) si la celda correspondiente en la columna C = 150.

Asignar un resultado SUMIF a una variable

Es posible que desee utilizar el resultado de su fórmula en otro lugar del código en lugar de escribirlo directamente en un rango de Excel. Si este es el caso, puede asignar el resultado a una variable para usar más adelante en su código.

1234567 Sub AssignSumIfVariable ()Atenuar el resultado como doble'Asignar la variableresult = WorksheetFunction.SumIf (Range ("C2: C9"), 150, Range ("D2: D9"))'Muestra el resultadoMsgBox "El total del resultado que coincide con el código de 150 ventas es" & resultEnd Sub

Usando SUMIFS

La función SUMIFS es similar a SUMIF WorksheetFunction pero le permite verificar más de un criterio. En el siguiente ejemplo, buscamos sumar el precio de oferta si el código de oferta es 150 Y el precio de costo es mayor que 2. Observe que en esta fórmula, el rango de celdas para sumar está delante de los criterios, mientras que en la función SUMIF, está detrás.

123 Sub MultipleSumIfs ()Rango ("D10") = WorksheetFunction.SumIfs (Rango ("D2: D9"), Rango ("C2: C9"), 150, Rango ("E2: E9"), "> 2")End Sub

Usar SUMIF con un objeto de rango

Puede asignar un grupo de celdas al objeto Range y luego usar ese objeto Range con el Hoja de trabajo Función objeto.

123456789101112 Sub TestSumIFRange ()Dim rngCriteria como rangoDim rngSum como rango'asignar el rango de celdasEstablecer rngCriteria = Rango ("C2: C9")Establecer rngSum = Rango ("D2: D9")'usa el rango en la fórmulaRango ("D10") = WorksheetFunction.SumIf (rngCriteria, 150, rngSum)'suelta los objetos de rangoEstablecer rngCriteria = NothingEstablecer rngSum = NadaEnd Sub

Uso de SUMIFS en objetos de rango múltiple

Del mismo modo, puede utilizar SUMIFS en varios objetos de rango.

123456789101112131415 Sub TestSumMultipleRanges ()Dim rngCriteria1 como rangoDim rngCriteria2 como rangoDim rngSum como rango'asignar el rango de celdasEstablecer rngCriteria1 = Rango ("C2: C9")Establecer rngCriteria2 = Rango ("E2: E10")Establecer rngSum = Rango ("D2: D10")'usa los rangos en la fórmulaRango ("D10") = WorksheetFunction.SumIfs (rngSum, rngCriteria1, 150, rngCriteria2, "> 2")'suelta el objeto de rangoEstablecer rngCriteria1 = NadaEstablecer rngCriteria2 = NadaEstablecer rngSum = NadaEnd Sub

Tenga en cuenta que debido a que está utilizando un signo mayor que, los criterios mayores que 2 deben estar entre paréntesis.

Fórmula SUMIF

Cuando usa el WorksheetFunction.SUMIF para agregar una suma a un rango en su hoja de trabajo, se devuelve una suma estática, no una fórmula flexible. Esto significa que cuando sus cifras en Excel cambian, el valor devuelto por el Hoja de trabajo Función no cambiará.

En el ejemplo anterior, el procedimiento ha sumado Rango (D2: D9) donde SaleCode es igual a 150 en la columna C, y el resultado se puso en D10. Como puede ver en la barra de fórmulas, este resultado es una cifra y no una fórmula.

Si alguno de los valores cambia en Rango (D2: D9) o Rango (C2: D9), el resultado en D10 será NO cambio.

En lugar de usar el WorksheetFunction.SumIf, puede usar VBA para aplicar una función SUMIF a una celda usando el Fórmula o Fórmula R1C1 métodos.

Método de fórmula

El método de fórmula le permite apuntar específicamente a un rango de celdas, por ejemplo: D2: D10 como se muestra a continuación.

123 Sub TestSumIf ()Rango ("D10"). FórmulaR1C1 = "= SUMIF (C2: C9,150, D2: D9)"End Sub

Método FormulaR1C1

El método FormulaR1C1 es más flexible en el sentido de que no lo restringe a un rango establecido de celdas. El siguiente ejemplo nos dará la misma respuesta que el anterior.

123 Sub TestSumIf ()Rango ("D10"). FórmulaR1C1 = "= SUMIF (R [-8] C [-1]: R [-1] C [-1], 150, R [-8] C: R [-1] C ) "End Sub

Sin embargo, para hacer que la fórmula sea más flexible, podríamos modificar el código para que se vea así:

123 Sub TestSumIf ()ActiveCell.FormulaR1C1 = "= SUMIF (R [-8] C [-1]: R [-1] C [-1], 150, R [-8] C: R [-1] C)"End Sub

Dondequiera que se encuentre en su hoja de trabajo, la fórmula sumará las celdas que cumplen con los criterios directamente encima y colocará la respuesta en su ActiveCell. Se debe hacer referencia al rango dentro de la función SUMIF mediante la sintaxis de Fila (R) y Columna (C).

Ambos métodos le permiten utilizar fórmulas dinámicas de Excel dentro de VBA.

Ahora habrá una fórmula en D10 en lugar de un valor.

wave wave wave wave wave