Haber si puedo ayudarte. Voy a desempolvar mis "mates" y si no recuerdo mal el error absoluto era la diferencia entre la media de mediciones y una de las mediciones y el error relativo era el absoluto entre la media de mediciones o medición. Como este valor suele ser pequeño y sin unidades, se utiliza el porcentaje. Si esto es correcto, vamos allá.
Voy a escribir el código para que se ejecute el sub mediante un botón que te crees y luego le asignas el código. Te creas un módulo y escribes:
Option Explicit
Sub calculo_errores_click()
On Error Resume Next
Dim medición(5) As Single, media As Single, absol As Single, rel As Single, valor As Single
Dim i As Integer, j As Integer
Dim text As String
j = 0
i = 0
'solicito mediciones hasta 5, rellenando el array y aprovecho la variable i como control
Do Until i = 1 Or j = 5
valor = 0
valor = Application.InputBox("Introduzca medición (máximo " & UBound(medición) & "). Mediciones introducidas: " & j _
& vbCrLf & "Cancelar para salir.")
If valor = 0 Then
i = 1
Else:
j = j + 1
medición(j) = valor
End If
Loop
' Si no hay valores, salgo del sub
If j = 0 Then
MsgBox "No se han introducido valores.Abandonando procedimiento", vbOKOnly
Exit Sub
Else:
'le doy el valor a la variable media total de las mediciones hechas y las meto en la variable text para mas tarde
media = 0
For i = 1 To j
media = media + medición(i)
text = text & "- " & medición(i) & vbCrLf
Next i
End If
'solicito con que medición quiero los errores
error:
valor = 0
valor = Application.InputBox("Introduzca la medición a evaluar. Mediciones disponibles: " & vbCrLf & text)
If valor = 0 Then
MsgBox "No se ha introducido medición o la acción ha sido cancelada. Abandonando procedimiento", vbOKOnly
Exit Sub
Else:
'compruebo si la medición introducida es correcta
For i = 1 To j
If valor = medición(i) Then
'hago los cálculos con la medición elegida
'error absoluto
absol = (media / j) - valor
'error absoluto con cuatro decimales
absol = Application.WorksheetFunction.Round(absol, 4)
'si el error absoluto es negativo, lo cambio a positivo
If absol < 0 Then
absol = Abs(absol)
End If
'error relativo con cuatro decimales
rel = Application.WorksheetFunction.Round((absol / valor), 4)
'muestro los resultados finales
MsgBox "El resultado de los errores con la medición " & valor & " es el siguiente:" _
& vbCrLf & vbCrLf & "- Error absoluto: " & absol & vbCrLf & "- Error relativo: " & rel & _
vbCrLf & "- Error relativo porcentual: " & rel * 100 & "%"
Exit Sub
End If
Next i
MsgBox "La medición " & valor & " introducida no es correcta." & "Los valores disponibles son: " & vbCrLf & text
GoTo error
End If
End Sub
Dos cuestiones a tener en cuenta:
- La medición cero no la puedes contemplar. Si quisieses esa opción habría que cambiar la declaración de las variables y poner más instrucciones de control.
- Si quisieras más mediciones cambia el array de 5 por las que necesites (variable medición) y el bucle Do until (variable j) por este mismo valor.
Un saludo desde Sevilla. No te olvides finalizar la pregunta y puntuarla.