En la red se puede encontrar muchos de estos “codigos”, algunos permiten manejar varias monedas, dólares, Euros etc. Uno de los más usados y mas que excelente es el de Mauricio Baeza, ¡100% hecho en México!, desde entonces han surgido muchas variantes y modificaciones; pero muy pocos sitios o casi nunguno muestran como usarlos.
Vamos a empezar, primero necesitamos el código, vamos a usar este que al parecer el autor es Saúl López con una pequeña modificación de ByPaco para que aparezca Pesos y M.N., haciendo una pequeña modificación al código para que aparezca “SON:” como se usa aquí en México.
Function PesosMN(tyCantidad As Currency) As String
Dim lyCantidad As Currency, lyCentavos As Currency, lnDigito As Byte, lnPrimerDigito As Byte, lnSegundoDigito As Byte, lnTercerDigito As Byte, lcBloque As String, lnNumeroBloques As Byte, lnBloqueCero
Dim laUnidades As Variant, laDecenas As Variant, laCentenas As Variant, I As Variant 'Si esta como Option Explicit
tyCantidad = Round(tyCantidad, 2)
lyCantidad = Int(tyCantidad)
lyCentavos = (tyCantidad - lyCantidad) * 100
laUnidades = Array("UN", "DOS", "TRES", "CUATRO", "CINCO", "SEIS", "SIETE", "OCHO", "NUEVE", "DIEZ", "ONCE", "DOCE", "TRECE", "CATORCE", "QUINCE", "DIECISEIS", "DIECISIETE", "DIECIOCHO", "DIECINUEVE", "VEINTE", "VEINTIUN", "VEINTIDOS", "VEINTITRES", "VEINTICUATRO", "VEINTICINCO", "VEINTISEIS", "VEINTISIETE", "VEINTIOCHO", "VEINTINUEVE")
laDecenas = Array("DIEZ", "VEINTE", "TREINTA", "CUARENTA", "CINCUENTA", "SESENTA", "SETENTA", "OCHENTA", "NOVENTA")
laCentenas = Array("CIENTO", "DOSCIENTOS", "TRESCIENTOS", "CUATROCIENTOS", "QUINIENTOS", "SEISCIENTOS", "SETECIENTOS", "OCHOCIENTOS", "NOVECIENTOS")
lnNumeroBloques = 1
Do
lnPrimerDigito = 0
lnSegundoDigito = 0
lnTercerDigito = 0
lcBloque = ""
lnBloqueCero = 0
For I = 1 To 3
lnDigito = lyCantidad Mod 10
If lnDigito <> 0 Then
Select Case I
Case 1
lcBloque = " " & laUnidades(lnDigito - 1)
lnPrimerDigito = lnDigito
Case 2
If lnDigito <= 2 Then
lcBloque = " " & laUnidades((lnDigito * 10) + lnPrimerDigito - 1)
Else
lcBloque = " " & laDecenas(lnDigito - 1) & IIf(lnPrimerDigito <> 0, " Y", Null) & lcBloque
End If
lnSegundoDigito = lnDigito
Case 3
lcBloque = " " & IIf(lnDigito = 1 And lnPrimerDigito = 0 And lnSegundoDigito = 0, "CIEN", laCentenas(lnDigito - 1)) & lcBloque
lnTercerDigito = lnDigito
End Select
Else
lnBloqueCero = lnBloqueCero + 1
End If
lyCantidad = Int(lyCantidad / 10)
If lyCantidad = 0 Then
Exit For
End If
Next I
Select Case lnNumeroBloques
Case 1
PesosMN = lcBloque
Case 2
PesosMN = lcBloque & IIf(lnBloqueCero = 3, Null, " MIL") & PesosMN
Case 3
PesosMN = lcBloque & IIf(lnPrimerDigito = 1 And lnSegundoDigito = 0 And lnTercerDigito = 0, " MILLON", " MILLONES") & PesosMN
End Select
lnNumeroBloques = lnNumeroBloques + 1
Loop Until lyCantidad = 0
PesosMN = "SON: (" & PesosMN & IIf(tyCantidad > 1, " PESOS ", " PESO ") & Format(Str(lyCentavos), "00") & "/100 M.N.)"
End Function
Bien, ahora que ya tenemos el código vamos a insertarlo en nuestra hoja de trabajo de Microsoft Excel. Recomendable trabajar en un libro nuevo.
Hacemos clic en Herramientas->Macros->Editor de Visual Basic, o simplemente presionando Alt+F11

Es importante que cierres todos los libros que tengas abierto y dejes abierto solo el libro en el que estas trabajando ya que podría dificultarte encontrar tu libro en el explorador de proyectos (lado izquierdo de tu pantalla, si no lo ves presiona Ctrl+R)
Una vez abierto el editor de Visual Basic nos vamos a Insertar->Modulo

En la ventana que se abre pegamos el codigo de la macro


Listo, ya tenemos nuestro macro listo para trabajar, cerramos el editor de Visual Basic, lo puedes hacer con Alt+Q y regresamos a Microsoft Excel
Vamos a probarlo, en la celda A1 ponemos un importe, yo pondré 1500.21, abajo, en la celda A2 ponemos =PesosMN(A1)

Bien, si pudiste hacer el ejercio hasta aquí, ya puedes ponerlo en todos tus libros de trabajo, buena suerte.
via: Gonzalo Conta
66 Responses to “Convertir Numeros a Letras en Excel”

Muy bueno y muy facil de aplicar.. mil gracias…..
Excelente contribución. Ya había probado varios tutoriales y este es el unico que sirve perfecto.
Muchisimas Gracias!!!
Mil gracias!!!! esta perfecto
se agradece mucho una contribucion como esta. me sirvio muy bien. saludos cordiales
Excelente aporte, gracias me saco de un apuro.
Muchas gracias por el aporte, la verdad es que si me ahorro mucho trabajo, aparte de cometer errores. Mil gracias
NO TENGO PALABRAS PARA AGRADECER A “MAURICIO BAEZA”, “SAUL LOPEZ”, “MARIO OLIN” POR COMPARTIR CONOCIMIETNOS DIOS LOS BENDECIRA UN MONTON…. :0)
Sr. es Ud. lo máximo, gracias por compartir su conocimiento,es Ud. atododar mil gracias
Excelente, le hice unos pequeños ajustes para la aplicación de la moneda en Chile, quedo perfecto.
muchas gracias me sirvo bastante espero que todos fueran asi como tu amigo gracias
muy buena herramienta, me saco de apuros.
gracias señores
Me gustó, andaba buscando la mejor de estas sintáxis, aunque menos de un peso no lo hacia bien, ya lo corregí, y para evitar lo de un millon (1,000,000.00) lo coloqué dentro de una función SI, con eso quedó perfecto!! ahora si jala de maravilla, felicidades por su colaboracion.
Function PesosMN(tyCantidad As Currency) As String
Dim lyCantidad As Currency, lyCentavos As Currency, lnDigito As Byte, lnPrimerDigito As Byte, lnSegundoDigito As Byte, lnTercerDigito As Byte, lcBloque As String, lnNumeroBloques As Byte, lnBloqueCero
Dim laUnidades As Variant, laDecenas As Variant, laCentenas As Variant, I As Variant ‘Si esta como Option Explicit
tyCantidad = Round(tyCantidad, 2)
lyCantidad = Int(tyCantidad)
lyCentavos = (tyCantidad – lyCantidad) * 100
laUnidades = Array(“UN”, “DOS”, “TRES”, “CUATRO”, “CINCO”, “SEIS”, “SIETE”, “OCHO”, “NUEVE”, “DIEZ”, “ONCE”, “DOCE”, “TRECE”, “CATORCE”, “QUINCE”, “DIECISEIS”, “DIECISIETE”, “DIECIOCHO”, “DIECINUEVE”, “VEINTE”, “VEINTIUN”, “VEINTIDOS”, “VEINTITRES”, “VEINTICUATRO”, “VEINTICINCO”, “VEINTISEIS”, “VEINTISIETE”, “VEINTIOCHO”, “VEINTINUEVE”)
laDecenas = Array(“DIEZ”, “VEINTE”, “TREINTA”, “CUARENTA”, “CINCUENTA”, “SESENTA”, “SETENTA”, “OCHENTA”, “NOVENTA”)
laCentenas = Array(“CIENTO”, “DOSCIENTOS”, “TRESCIENTOS”, “CUATROCIENTOS”, “QUINIENTOS”, “SEISCIENTOS”, “SETECIENTOS”, “OCHOCIENTOS”, “NOVECIENTOS”)
lnNumeroBloques = 1
Do
lnPrimerDigito = 0
lnSegundoDigito = 0
lnTercerDigito = 0
lcBloque = “”
lnBloqueCero = 0
For I = 1 To 3
lnDigito = lyCantidad Mod 10
If lnDigito 0 Then
Select Case I
Case 1
lcBloque = ” ” & laUnidades(lnDigito – 1)
lnPrimerDigito = lnDigito
Case 2
If lnDigito <= 2 Then
lcBloque = " " & laUnidades((lnDigito * 10) + lnPrimerDigito – 1)
Else
lcBloque = " " & laDecenas(lnDigito – 1) & IIf(lnPrimerDigito 0, ” Y”, Null) & lcBloque
End If
lnSegundoDigito = lnDigito
Case 3
lcBloque = ” ” & IIf(lnDigito = 1 And lnPrimerDigito = 0 And lnSegundoDigito = 0, “CIEN”, laCentenas(lnDigito – 1)) & lcBloque
lnTercerDigito = lnDigito
End Select
Else
lnBloqueCero = lnBloqueCero + 1
End If
lyCantidad = Int(lyCantidad / 10)
If lyCantidad = 0 Then
Exit For
End If
Next I
Select Case lnNumeroBloques
Case 1
PesosMN = lcBloque
Case 2
PesosMN = lcBloque & IIf(lnBloqueCero = 3, Null, ” MIL”) & PesosMN
Case 3
PesosMN = lcBloque & IIf(lnPrimerDigito = 1 And lnSegundoDigito = 0 And lnTercerDigito = 0, ” MILLON”, ” MILLONES”) & PesosMN
End Select
lnNumeroBloques = lnNumeroBloques + 1
Loop Until lyCantidad = 0
PesosMN = “====(” & PesosMN & IIf(tyCantidad >= 1, ” PESOS, “, ” CERO PESOS, “) & Format(Str(lyCentavos), “00″) & “/100 M.N.)====”
End Function
Luego se coloca la funcion, asi:
=SI(A1=1000000,”===UN MILLÓN DE PESOS, 00/100 M.N.===”,PesosMN(A1)) para quien guste ocuparlo, espero les sirva para sus facturas o cheques aquí en México. Saludos!
Agradecemos tu aporte Antonio.
Buenos dias, alguien sabe corregir el error este
73,001.56 UN PESO 56/100 M.N.
asi me lo pone :S
este es el codigo que uso yo
Function ConvierteNumLetra(Numero)
Dim Texto
Dim Millones
Dim Miles
Dim Cientos
Dim Decimales
Dim Cadena
Dim CadMillones
Dim CadMiles
Dim CadCientos
Texto = Numero
Texto = FormatNumber(Texto, 2)
Texto = Right(Space(14) & Texto, 14)
Millones = Mid(Texto, 1, 3)
Miles = Mid(Texto, 5, 3)
Cientos = Mid(Texto, 9, 3)
Decimales = Mid(Texto, 13, 2)
CadMillones = ConvierteCifra(Millones)
CadMiles = ConvierteCifra(Miles)
CadCientos = ConvierteCifra(Cientos)
If Trim(CadMillones) > ” ” Then
If Trim(CadMillones) = “UN” Then
Cadena = CadMillones & ” MILLON”
Else
Cadena = CadMillones & ” MILLONES”
End If
End If
If Trim(CadMiles) > “” Then
Cadena = Cadena & ” ” & CadMiles & ” MIL”
End If
If Trim(CadCientos) = “UN” Then
Cadena = “UN PESO ” & Decimales & “/100 M.N.”
Else
If Miles & Cientos = “000000″ Then
Cadena = Cadena & ” ” & Trim(CadCientos) & ” DE PESOS ” & Decimales & “/100 M.N. ***)”
Else
Cadena = Cadena & ” ” & Trim(CadCientos) & ” PESOS ” & Decimales & “/100 M.N. ***)”
End If
End If
ConvierteNumLetra = Trim(Cadena)
End Function
Function ConvierteCifra(Texto)
Dim Centena
Dim Decena
Dim Unidad
Dim txtCentena
Dim txtDecena
Dim txtUnidad
Centena = Mid(Texto, 1, 1)
Decena = Mid(Texto, 2, 1)
Unidad = Mid(Texto, 3, 1)
Select Case Centena
Case “1″
txtCentena = “CIEN”
If Decena & Unidad “00″ Then
txtCentena = “CIENTO”
End If
Case “2″
txtCentena = “DOSCIENTOS”
Case “3″
txtCentena = “TRESCIENTOS”
Case “4″
txtCentena = “CUATROCIENTOS”
Case “5″
txtCentena = “QUINIENTOS”
Case “6″
txtCentena = “SEISCIENTOS”
Case “7″
txtCentena = “SETECIENTOS”
Case “8″
txtCentena = “OCHOCIENTOS”
Case “9″
txtCentena = “NOVECIENTOS”
End Select
Select Case Decena
Case “1″
txtDecena = “DIEZ”
Select Case Unidad
Case “1″
txtDecena = “ONCE”
Case “2″
txtDecena = “DOCE”
Case “3″
txtDecena = “TRECE”
Case “4″
txtDecena = “CATORCE”
Case “5″
txtDecena = “QUINCE”
Case “6″
txtDecena = “DIECISEIS”
Case “7″
txtDecena = “DIECISIETE”
Case “8″
txtDecena = “DIECIOCHO”
Case “9″
txtDecena = “DIECINUEVE”
End Select
Case “2″
txtDecena = “VEINTE”
If Unidad “0″ Then
txtDecena = “VEINTI”
End If
Case “3″
txtDecena = “TREINTA”
If Unidad “0″ Then
txtDecena = “TREINTA Y ”
End If
Case “4″
txtDecena = “CUARENTA”
If Unidad “0″ Then
txtDecena = “CUARENTA Y ”
End If
Case “5″
txtDecena = “CINCUENTA”
If Unidad “0″ Then
txtDecena = “CINCUENTA Y ”
End If
Case “6″
txtDecena = “SESENTA”
If Unidad “0″ Then
txtDecena = “SESENTA Y ”
End If
Case “7″
txtDecena = “SETENTA”
If Unidad “0″ Then
txtDecena = “SETENTA Y ”
End If
Case “8″
txtDecena = “OCHENTA”
If Unidad “0″ Then
txtDecena = “OCHENTA Y ”
End If
Case “9″
txtDecena = “NOVENTA”
If Unidad “0″ Then
txtDecena = “NOVENTA Y ”
End If
End Select
If Decena “1″ Then
Select Case Unidad
Case “1″
txtUnidad = “UN”
Case “2″
txtUnidad = “DOS”
Case “3″
txtUnidad = “TRES”
Case “4″
txtUnidad = “CUATRO”
Case “5″
txtUnidad = “CINCO”
Case “6″
txtUnidad = “SEIS”
Case “7″
txtUnidad = “SIETE”
Case “8″
txtUnidad = “OCHO”
Case “9″
txtUnidad = “NUEVE”
End Select
End If
ConvierteCifra = txtCentena & ” ” & txtDecena & txtUnidad
End Function
que tal que herramienta tan exelente, gracias y felicidades ,buen trabajo, yo casi no se de computacion y me saco de un gran apuro, y lo unico que me pregunto es porque no biene ya en exel de seguro a muchisima gente le facilitaria la vida, nuevamente gracias y haste luego.