Bueno, te pongo el codigo aqui (lo acabo de hacer); la explicacion del algoritmo usada esta arriba, falta mejorar, ya haslo tu...:
Private Sub Form_Load()
Dim Numero As Double
Dim Fraccion As String
Numero = 123.135
Fraccion = cFraccion(Numero) 'Obtiene la fraccion sin simplificar
MsgBox "La fracion de " & Numero & " es " & Simplificar(Fraccion) 'Simplifica la Fracion
End
End Sub
Function cFraccion(Rac As Double) 'Rac: Racional
Dim sRac As String 'la cadena que contiene a Rac
Dim Num As Long 'Numerador
Dim Den As Long 'Denominador
Dim nDec As Integer
sRac = Str(Rac) 'Convierte en cadena
nDec = 0 'cifras decinamales a cero por defecto
If InStr(1, sRac, ".") <> 0 Then 'Observa si tiene el punto decimal
nDec = Len(Mid(sRac, InStr(1, sRac, ".") + 1)) 'Cuenta el Numero de Decimales
End If
Num = Rac * Potencia(10, nDec)
Den = Potencia(10, nDec)
cFraccion = Num & "/" & Den
End Function
Function Simplificar(ByVal Fraccion As String)
Dim Aux, A, B As Long
Dim Den, Num As Long
Dim MCD As Integer
'Recorta y obtiene el Numerador y Denominador
Num = Val(Mid(Fraccion, 1, InStr(1, Fraccion, "/") - 1))
Den = Val(Mid(Fraccion, InStr(1, Fraccion, "/") + 1))
A = Num
B = Den
If Num = 0 Or Den = 0 Then Simplificar = "0": Exit Function
'############# Busca el Maximo Comun Divisor - Algoritmo de euclides para hacerlo...
While (B <> 0)
Aux = A Mod B
A = B
B = Aux
Wend
'############
MCD = A 'Asigna el Valor del Maximo C. D
Simplificar = Num / MCD & "/" & Den / MCD 'Divide el Num y Den por el MCD, y lo convierte en cadena
End Function
Function Potencia(ByVal n As Integer, ByVal A As Integer)
'haya la potencia de un numero: "n" elevado a la "a"
Potencia = n
For i = 1 To A - 1
Potencia = Potencia * n
Next i
End Function
Lo que hace es por ejemplo: 123.135
saca el Numerador: 123135 y Denominador: 1000
ahora ese resultado lo simplifica y lo muestra...
alguna duda?