Por cierto, si te copias el código de abajo en un libro excel (como macro) tendrás fórmulas directas personalizadas.
La que tú quieres es esta (periodicidad en tu caso sería 12):
(Log((aportacion * rentabilidad + aportacion + capital_final * rentabilidad) / (aportacion * rentabilidad + aportacion + capital_inicial * rentabilidad)) + 2 * capital_inicial * Pi) / (Log(1 + rentabilidad) * periodicidad)
Imagino que se puede simplificar la fórmula pero así era más sencillo en vba.
Function calc_CAPITAL_INICIAL(capital_final As Double, rentabilidad As Double, num_años As Double, aportacion As Double, Optional periodicidad As Double) As Double
If periodicidad = 0 Then
periodicidad = 1
End If
rentabilidad = (1 + rentabilidad) ^ (1 / periodicidad) - 1
num_años = num_años * periodicidad
calc_CAPITAL_INICIAL = (capital_final - aportacion * ((1 + rentabilidad) ^ (num_años + 1) - (1 + rentabilidad)) / rentabilidad) / (1 + rentabilidad) ^ num_años
End Function
Function calc_CAPITAL_FINAL(capital_inicial As Double, rentabilidad As Double, num_años As Double, aportacion As Double, Optional periodicidad As Double) As Double
If periodicidad = 0 Then
periodicidad = 1
End If
rentabilidad = (1 + rentabilidad) ^ (1 / periodicidad) - 1
num_años = num_años * periodicidad
calc_CAPITAL_FINAL = capital_inicial * (1 + rentabilidad) ^ num_años + aportacion * ((1 + rentabilidad) ^ (num_años + 1) - (1 + rentabilidad)) / rentabilidad
End Function
Function calc_APORTACION(capital_inicial As Double, capital_final As Double, rentabilidad As Double, num_años As Double, Optional periodicidad As Double) As Double
If periodicidad = 0 Then
periodicidad = 1
End If
rentabilidad = (1 + rentabilidad) ^ (1 / periodicidad) - 1
num_años = num_años * periodicidad
calc_APORTACION = (capital_final - capital_inicial * (1 + rentabilidad) ^ num_años) * rentabilidad / ((1 + rentabilidad) ^ (num_años + 1) - (1 + rentabilidad))
End Function
Function calc_NUM_AÑOS(capital_inicial As Double, capital_final As Double, rentabilidad As Double, aportacion As Double, Optional periodicidad As Double) As Double
If periodicidad = 0 Then
periodicidad = 1
End If
rentabilidad = (1 + rentabilidad) ^ (1 / periodicidad) - 1
'num_años = num_años * periodicidad
calc_NUM_AÑOS = (Log((aportacion * rentabilidad + aportacion + capital_final * rentabilidad) / (aportacion * rentabilidad + aportacion + capital_inicial * rentabilidad)) + 2 * capital_inicial * Pi) / (Log(1 + rentabilidad) * periodicidad)
End Function
Function calc_RENTABILIDAD(capital_inicial As Double, capital_final As Double, num_años As Double, aportacion As Double, Optional periodicidad As Double) As Double
If periodicidad = 0 Then
periodicidad = 1
End If
'rentabilidad = (1 + rentabilidad) ^ (1 / periodicidad) - 1
num_años = num_años * periodicidad
Dim min As Double
Dim max As Double
Dim aux As Double
Dim resul As Double
max = 1
min = -1
aux = 0.05
Do While max - min > 0.0001
resul = capital_final - (capital_inicial * (1 + aux) ^ num_años + aportacion * ((1 + aux) ^ (num_años + 1) - (1 + aux)) / aux)
If resul > 0 Then
min = aux
Else
max = aux
End If
aux = (max + min) / 2
Loop
calc_RENTABILIDAD = (1 + aux) ^ periodicidad - 1
End Function