Convertir a cualquier base con VBA
Usa Visual Basic para Aplicaciones para convertir un número en base 10 a cualquier base.
Microsoft Office ofrece una serie de funciones en VBA para convertir un número en base 10 a otra base. Dichas funciones como HEX o OCT tienen como limite máximo el tipo de datos Long.Sin embargo, a veces es interesante y sobre todo en sistemas operativos de 32 bits, convertir números mucho más grandes.
Para este propósito he escrito una función para números enteros cuyo límite está establecido por el tipo de datos Double. El número más grande para este tipo de datos es 1,79769313486232E308 frente a 2.147.483.647.
El código:
Function CBase(Numero_Base_10 As String, Optional Base As Integer) As String
'Convierte un número decimal a otro de máximo 35 de base
Dim n, r, c As Double
Dim esFin As Boolean
Dim strCrt As Variant
strCrt = Array("0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z")
'Si no se pasa el argumento asume el máximo de la matriz
If IsMissing(Base) Then Base = UBound(strCrt)
'Si el usuario es un poquito cabr... corrige el fallo
If Base > UBound(strCrt) Or Base < 2 Then Base = UBound(strCrt)
esFin = False
'Convierte el número al tipo de dato doble
n = CDbl(Numero_Base_10)
'Inicializa el resultado
CBase = ""
Do While Not esFin
c = n / Base 'Cociente
r = (c - Int(c)) * Base 'Resto
CBase = strCrt(r) & CBase
'Si el cociente es menor que la Base acaba
If c < Base Then esFin = True Else n = Int(c)
Loop
'Añade el cociente final
CBase = strCrt(Int(c)) & CBase
End Function
La función está preparada para cualquier base que se quiera. En el código descrito se podría llegar hasta una base de 36. Si se quiere convertir a una base inferior a 36 sólo hay que pasar el parámetro de la base correspondiente, por ejemplo para convertir a hexadecimal el número 562133321251410, simplemente usa CBase( 5621333212514,16) sin modificar la función. Si quieres convertir a una base de por ejemplo 85, debes modificar la función añadiendo más caracteres diferentes a la matriz strCrt.
Agradecimientos:
Jack Daniel's