Hace años conocí a una persona que no sabía hacer medias ponderadas con Excel; hoy esa persona es una referencia dentro de este ecosistema de Inteligencia Artificial, Big Data, Machine Learning, Unsupervised Learning… total, una referencia en la venta de humo porque me imagino que seguirá sin saber hacer una media ponderada en Excel con el SUMAPRODUCTO y por eso realizo esta entrada en homenaje a esas grandes locomotoras que echan humo y más humo pero que ahí siguen. Además también es útil para varias cosas más como:

  • Crear nuestra propia función en Excel.
  • Emplear rangos en funciones de Excel.
  • Crear sumas acumuladas con un bucle en nuestra función.
  • Emplear funciones propias de Excel en nuestra función de Visual Basic.

La función es sencilla y replica la forma habitual de hacer medias ponderadas en Excel con el SUMAPRODUCTO del dato del que deseamos calcular la media por el campo de ponderación dividido por la suma del campo de ponderación:

Public Function MEDIAPONDERADA(Valor As Range, Ponderacion As Range)

    If Valor.Rows.Count <> Ponderacion.Rows.Count Then
        MEDIAPONDERADA = "Tamaños distintos de rango"
        Exit Function
    ElseIf Valor.Rows.Count = 1 Then
        MEDIAPONDERADA = "Solo un número no se puede"
        Exit Function
    End If

    Dim acum As Double
    Dim i As Long
    Dim dato As Double
    
    acum = 0
    For i = 1 To Valor.Rows.Count
        dato = Valor.Cells(i).Value * Ponderacion.Cells(i).Value
        acum = acum + dato
    Next i

    MEDIAPONDERADA = acum / Excel.WorksheetFunction.Sum(Ponderacion)

End Function

Esta función la ponéis en el libro de macros personal y cuando escribáis =MEDIAPONDERADA ya la tendréis a vuestra disposición en todas las sesiones de Excel. Saludos.