¿Cómo encontrar el número factorial usando VBA?

No estoy seguro de entender su pregunta (si la hay) pero aquí está su código revisado (y en funcionamiento):

Sub factorial ()
Dim I como entero
Hecho oscuro como entero
Dim n As Integer

n = 5
hecho = 1

Para I = 1 a n
hecho = hecho * I
Siguiente yo

Hecho de MsgBox

End Sub

Dado que es un poco absurdo escribir un procedimiento que siempre da el mismo resultado, sería mejor tener algo como esto:

Función factorial (n como entero) como entero
Dim I como entero
Hecho oscuro como entero

hecho = 1

Para I = 1 a n
hecho = hecho * I
Siguiente yo

Función final

A continuación, podría llamar es como cualquiera

MsgBox (factorial (6))

o

dim myNumber como entero
myNumber = factorial (6)

utilizando QB64, una variante de QBasic para los sistemas operativos modernos:
usa el cero-sacrificio y la matemática de precisión arbitraria usando matrices. Coloca el resultado en el portapapeles, elimina los ceros al final y pone “* 10 ^” más la potencia exponencial resultante. Punto decimal asumido siguiendo el dígito más a la izquierda. Rendimiento razonable y preciso.

‘* codeguy’s superfactorial
REDIM fac # (0)
Factorial fac # (), 100, 10, poder #
IMPRESIÓN de poder #
Factorial SUB (fac # (), n &, numdigits%, poder #)
poder # = 0
fac # (0) = 1
permanecer # = 0
stx & = 0
slog # = 0
NumDiv # = 10 ^ numdigits%
PARA fac # = 1 TO n &
slog # = slog # + LOG (fac #) / LOG (10)
FOR x & = 0 TO stx &
fac # (x &) = fac # (x &) * fac # + permanecer #
tx # = fac # (x &) MOD NumDiv #
permanecer # = (fac # (x &) – tx #) / NumDiv #
fac # (x &) = tx #
SIGUIENTE
SI permanecen #> 0 ENTONCES
stx & = UBOUND (fac #) + 1
REDIM _PRESERVE fac # (stx &)
fac # (stx &) = permanecer #
permanecer # = 0
TERMINARA SI
SIGUIENTE

scanz & = LBOUND (fac #)
HACER
IF scanz & IF fac # (scanz &) ENTONCES
SALIR HACER
MÁS
scanz & = scanz y + 1
TERMINARA SI
MÁS
SALIR HACER
TERMINARA SI
LAZO
F $ = “”
FOR x & = UBOUND (fac #) TO scanz & STEP -1
m $ = LTRIM $ (RTRIM $ (STR $ (fac # (x &))))
IF x &
MIENTRAS QUE LEN (m $) m $ = “0” + m $
ENCAMINARSE A
TERMINARA SI
F $ = F $ + m $
IMPRIMIR m $; “”;
power # = power # + LEN (m $)
SIGUIENTE
p & = LEN (F $)
MIENTRAS MID $ (F ​​$, p &, 1) = “0”
p & = p & – 1
ENCAMINARSE A
F $ = IZQUIERDA $ (F ​​$, p &)
power # = power # + (scanz & * numdigits%) – 1
_CLIPBOARD $ = F $ + “* 10 ^” + MID $ (STR $ (INT (power #)), 2)
PRINT slog #
END SUB

93326215443944152681699238856266700490715968264381621468592963895217599993229915608941463976156518286253697920827223758251185210916864 * 10 ^ 157