Option Explicit
Private Sub cmdCalcular_Click()
' Declarar las variables a utilizar:
Dim B As Integer ' Para los bucles.
Dim lngFactores() As Long ' Este array alojará los factores en los que se
' descompone el número.
Dim NFacts As Long ' Número de factores que han aparecido.
Dim Numero As Long ' El número que se utiliza para llevar a cabo
' las operaciones.
Dim strTmp As String ' Una ayudita para, después, construir una cadena
' de texto que se mostrará en un cuadro de mensaje.
' Si el número no es entero, convertirlo y mostrarlo redondeado en el TextBox.
txtNumero = CLng(Val(txtNumero))
' Se asigna el número del TextBox a la variable.
Numero = Val(txtNumero)
' Si el número es inferior a 2 ( y mayor que 0), el número está en un factor.
If Numero >= 0 And Numero < 2 Then
ReDim lngFactores(0)
lngFactores(0) = Numero
GoTo FIN
End If
' Si el numero es negativo, calcular como si fuese uno positivo.
If Numero < 0 Then Numero = -Numero
B = 2
While B <= Numero ' Bucle.
If Numero Mod B = 0 Then ' Si el numero se puede dividir por B, significa que B
' es un factor.
ReDim Preserve lngFactores(NFacts) ' Redimensionar la variable que guarda
' los factores.
lngFactores(NFacts) = B ' Guardar el factor en la variable.
NFacts = NFacts + 1 ' Ahora hay un factor más.
Numero = Numero \ B ' Se divide el número para buscar otros divisores.
Else
' Si B no es factor, probar con el siguiente número.
B = B + 1
End If
Wend
' Ahora todos los factores del número están en la variable lngFactores.
' Vamos a hacer que aparezcan en un mensaje multipliándose entre ellos.
' (2 * 2 * 3 ...)
' Para ello se recorre el array, por medio de un bucle, y se van colocando
' en una variable de cadena.
For B = 0 To UBound(lngFactores)
strTmp = strTmp & lngFactores(B) & " * "
Next B
' Una vez construida la cadena, se muestra el mensaje mostrando los factores.
MsgBox "El número " & Val(txtNumero) & " descompuesto es: " & Mid(strTmp, 1, Len(strTmp) - 3)
End Sub
Codigo sacado de el guille -->
http://www.elguille.info/colabora/vb2005/XabiO_Descomponer.htm