Esto se resuelve de dos maneras con algoritmos genéticos VBA o por una variación de la simulación de montecarlo, desafortunadamente a un no entiendo bien la programación de los primeros así que voy a usar la segunda opción, te explico se primero como puedes ver en la imagen la macro no busca la solución exacta sino aquellas que tiendan a aproximarse a 0 por asignación de valores aleatorios en las 4 variables, se hacen 1000 simulaciones y la macro descarta los números negativos así como los valores con resultados mayores a 0.10, ya que los calcula hace un filtro de valores repetidos en las 3 primeras columnas (porque se van a generar valores repetidos) y te deja ordenados de menor a mayor los resultados dejando en primer lugar el valor más próximo a 0
y esta es la macro
Sub datos()
cant = InputBox("cantidad de soluciones?")
If cant = vbNullString Then GoTo sal
Range("b4").CurrentRegion.ClearContents
Set soluciones = Range("b4").Resize(cant, 8)
matriz = soluciones
For i = 1 To 1000
atras:
Randomize
f = 1 + Rnd * (10 - 1)
k = 1 + Rnd * (100 - 1)
d = 1 + Rnd * (100 - 1)
re = 1 + Rnd * (100 - 1)
Formula = 1 / Sqr(f)
Formula2 = -2 * WorksheetFunction.Log(((k / d) / 3.71) + (2.51 / (re * Sqr(f))))
resultado = Formula2 - Formula
If resultado < 0 Or resultado > 0.05 Then GoTo atras
matriz(i, 1) = k
matriz(i, 2) = d
matriz(i, 3) = re
matriz(i, 4) = f
matriz(i, 5) = Formula2
matriz(i, 6) = Formula
matriz(i, 7) = Formula2 - Formula
Next i
With soluciones
Range(.Address) = matriz
.Sort key1:=Range(.Columns(7).Address), order1:=xlAscending
.RemoveDuplicates Columns:=Array(1, 2, 3)
.Cells(0, 1) = "K"
.Cells(0, 2) = "D"
.Cells(0, 3) = "RE"
.Cells(0, 4) = "F"
.Cells(0, 5) = "LADO IZQ. DE LA FORMULA"
.Cells(0, 6) = "LADO DER. DE LA FORMULA"
.Cells(0, 7) = "RESULTADO"
.Rows(0).Font.Bold = True
.CurrentRegion.EntireColumn.AutoFit
End With
sal:
Erase matriz
Set soluciones = Nothing
End Sub