¿cómo promediar valores en excel vía vba?
En Excel, puede utilizar VBA para calcular valores promedio de un rango de celdas o de varios rangos. Y, en este tutorial, aprenderemos las diferentes formas de utilizarlo.
Promedio 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 tomar un promedio. En VBA, existe una propiedad llamada WorksheetFunction que puede ayudarle a llamar funciones en código VBA.
Promedimos 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 PROMEDIO 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 que queremos calcular el promedio.
- Al final, escriba un paréntesis de cierre y asigne el valor de retorno de la función a la celda B1.
Application.WorksheetFunction.Average( Range ("A1:A10"))
Ahora cuando ejecutas este código calcula el promedio de los valores que tienes en el rango A1:A10 e ingresa el valor en la celda B1.
Valores promedio de una columna o fila completa
En este caso, sólo necesita especificar una fila o columna en lugar del rango que usamos en el ejemplo anterior.
'for the entire column A Range ("B1") = Application.WorksheetFunction.Average( Range ("A:A")) 'for entire row 1 Range ("B1") = Application.WorksheetFunction.Average( Range ("1:1"))
Utilice VBA para promediar los valores de selección
Ahora suponga que desea calcular el valor promedio de las celdas seleccionadas solo porque puede usar un código como este.
Sub vba_average_selection() Dim sRange As Range Dim iAverage As Long On Error GoTo errorHandler Set sRange = Selection iAverage = WorksheetFunction.Average(Range(sRange.Address)) MsgBox iAverage Exit Sub 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 el promedio.
VBA promedia todas las celdas anteriores
El siguiente código toma todas las celdas anteriores y sus valores promedio e ingresa el resultado en la celda seleccionada .
Sub vba_auto_Average() 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.Average(iRange) Exit Sub errorHandler: MsgBox "make sure to select a valid range of cells" End Sub
Promediando un rango dinámico usando VBA
Y de manera similar, puede usar el rango dinámico mientras usa VBA para promediar los valores.
Sub vba_dynamic_range_average() 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.Average(iRange) Exit Sub errorHandler: MsgBox "make sure to select a valid range of cells" End Sub
Promediar una columna o fila dinámica
De igual forma, si quieres usar una columna dinámica, puedes usar el siguiente código que tomará la columna de la celda activa y el promedio de todos los valores que tienes allí.
Sub vba_dynamic_column() Dim iCol As Long On Error GoTo errorHandler iCol = ActiveCell.Column MsgBox WorksheetFunction.Average(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.Average(Rows(iCol)) Exit Sub errorHandler: MsgBox "make sure to select a valid range of cells" End Sub