¿Cómo usar la función WorksheetFunction.AverageIfs en VBA?

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.

Conoce nuestra tienda

Ver más productos

Mejora tu nivel y logra tus objetivo

Excel

Excel cursos

Access

cursos de Access

Power BI

cursos power BI

Ayúdanos a hacer crecer el proyecto

Deja un comentario