Contenido
La función WorksheetFunction.AverageIfs en VBA se usa para calcular el promedio (media aritmética) de todas las celdas que cumplen con múltiples criterios. Es muy similar a la función AVERAGEIFS en Excel.
Para usar WorksheetFunction.AverageIfs en VBA, primero debes asegurarte de que tu código está en un módulo dentro del Editor de VBA. Luego, puedes utilizar la función como se muestra en el siguiente ejemplo:
Sub CalculateAverageIfs()
Dim ws As Worksheet
Dim averageResult As Double
Dim criteriaRange1 As Range
Dim criteria1 As String
Dim criteriaRange2 As Range
Dim criteria2 As String
' Asumiendo que estás trabajando con la hoja 1
Set ws = ThisWorkbook.Sheets(1)
' Definir las referencias de rangos y criterios para la función
Set criteriaRange1 = ws.Range("A1:A10") ' rango de criterio 1
criteria1 = ">5" ' criterio 1
Set criteriaRange2 = ws.Range("B1:B10") ' rango de criterio 2
criteria2 = "<10" ' criterio 2
' Aquí se llama a la función WorksheetFunction.AverageIfs
averageResult = Application.WorksheetFunction.AverageIfs( _
ws.Range("C1:C10"), _
criteriaRange1, criteria1, _
criteriaRange2, criteria2)
' Mostrar el resultado
MsgBox "El promedio calculado es " & averageResult
End Sub
Este bloque de código calcula el promedio de las celdas en el rango C1:C10 donde las celdas correspondientes en A1:A10 son mayores que 5 y donde las celdas correspondientes en B1:B10 son menores que 10.
Recuerda que puedes añadir más pares de criterios si necesitas filtrar por más condiciones. La función podría tomar la forma `Application.WorksheetFunction.AverageIfs(rango_promedio, rango_criterio1, criterio1, [rango_criterio2, criterio2], …)`. Ten en cuenta que los rangos de criterios deben tener la misma cantidad de filas y columnas que el rango_promedio.
Si hay alguna posibilidad de que los criterios no se cumplan y se produzca un error (por ejemplo, si no hay celdas que cumplan las condiciones especificadas), es prudente manejar errores utilizando `On Error`, así:
Sub CalculateAverageIfsSafely()
On Error Resume Next ' Ignora el error y continúa con la siguiente línea
' ... (El resto del código es igual que el anterior)
If Err.Number <> 0 Then
MsgBox "Error calculando el promedio: " & Err.Description
ElseIf Err.Number = 0 Then
MsgBox "El promedio calculado es " & averageResult
End If
On Error GoTo 0 ' Restablecer el manejo de errores
End Sub
Utilizando `On Error Resume Next`, el código no se detendrá si encuentra un error mientras intenta calcular el promedio. En cambio, verificará si hubo un error. Si `Err.Number` es diferente a cero, sabrás que ocurrió un error y podrás manejarlo adecuadamente.