¿cómo usar sum en excel a través de vba?
En Excel, puede utilizar VBA para calcular la suma de valores de un rango de celdas o de varios rangos. Y, en este tutorial, aprenderemos las diferentes formas en que podemos usarlo.
Suma en VBA usando WorksheetFunction
En VBA, hay varias funciones que puede utilizar, pero no existe una función específica para este propósito. Esto no significa que no podamos hacer una suma. En VBA, existe una propiedad llamada WorksheetFunction que puede ayudarle a llamar funciones en código VBA.
Considere la suma de los valores en el rango A1:A10.
- Primero ingrese la propiedad de la función de la hoja de trabajo, luego seleccione la función SUMA de la lista.
- A continuación, debe ingresar un paréntesis inicial como lo hace cuando ingresa una función en la hoja de cálculo.
- Después de eso, necesitamos usar el objeto de rango para referirnos al rango para el cual queremos calcular la suma.
- Al final, escriba un paréntesis de cierre y asigne el valor de retorno de la función a la celda B1.
Range ("B1") = Application.WorksheetFunction.Sum(Range("A1:A10"))
Ahora cuando ejecutas este código calcula la suma de los valores que tienes en el rango A1:A10 e ingresa el valor en la celda B1.
Suma de valores de una columna o fila completa
En este caso, simplemente especifique una fila o columna en lugar del rango que usamos en el ejemplo anterior.
' for the entire column A Range ("B1") = Application.WorksheetFunction.Sum( Range ("A:A")) ' for entire row 1 Range ("B1") = Application.WorksheetFunction.Sum( Range ("1:1"))
Utilice VBA para agregar valores de selección
Ahora suponga que desea sumar el valor de las celdas seleccionadas solo porque puede usar un código como este.
Sub vba_sum_selection() Dim sRange As Range Dim iSum As Long On Error GoTo errorHandler Set sRange = Selection iSum = WorksheetFunction.Sum(Range(sRange.Address)) MsgBox iSum errorHandler: MsgBox "make sure to select a valid range of cells" End Sub
En el código anterior, usamos la selección, luego la especificamos en la variable «sRange», luego usamos la dirección de esta variable de rango para obtener la suma.
Suma VBA de todas las celdas anteriores
El siguiente código extrae todas las celdas y suma los valores e ingresa el resultado en la celda seleccionada.
Sub vba_auto_sum() Dim iFirst As String Dim iLast As String Dim iRange As Range On Error GoTo errorHandler iFirst = Selection. End (xlUp). End (xlUp).Address iLast = Selection. End (xlUp).Address Set iRange = Range(iFirst & ":" & iLast) ActiveCell = WorksheetFunction.Sum(iRange) Exit Sub errorHandler: MsgBox "make sure to select a valid range of cells" End Sub
Agregue rango dinámico usando VBA
Y de manera similar, puede usar el rango dinámico mientras usa VBA para agregar valores.
Sub vba_dynamic_range_sum() Dim iFirst As String Dim iLast As String Dim iRange As Range On Error GoTo errorHandler iFirst = Selection.Offset(1, 1).Address iLast = Selection.Offset(5, 5).Address Set iRange = Range(iFirst & ":" & iLast) ActiveCell = WorksheetFunction.Sum(iRange) Exit Sub errorHandler: MsgBox "make sure to select a valid range of cells" End Sub
Agregar una columna o fila dinámica
De manera similar, si deseas utilizar una columna dinámica, puedes usar el siguiente código que tomará la columna de la celda activa y sumará todos los valores que tienes allí.
Sub vba_dynamic_column() Dim iCol As Long On Error GoTo errorHandler iCol = ActiveCell.Column MsgBox WorksheetFunction.Sum(Columns(iCol)) Exit Sub errorHandler: MsgBox "make sure to select a valid range of cells" End Sub
Y por una fila.
Sub vba_dynamic_row() Dim iRow As Long On Error GoTo errorHandler iRow = ActiveCell.Row MsgBox WorksheetFunction.Sum(Rows(iCol)) Exit Sub errorHandler: MsgBox "make sure to select a valid range of cells" End Sub
Utilice SUMAR.SI con VBA
Al igual que la suma, puedes usar la función SUMAR.SI para sumar valores con criterios como en el siguiente ejemplo.
Sub vba_sumif() Dim cRange As Range Dim sRange As Range Set cRange = Range ("A2:A13") Set sRange = Range ("B2:B13") Range ("C2") = _ WorksheetFunction.SumIf(cRange, "Product B", sRange) End Sub