Convertir Numeros a Letras en Excel


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

Abrimos el editor de Visual Basic

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

Insertando el Modulo para pegar el codigo

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

pegamos el codigo

codigo pegado

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)

Imagen final

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”

  1. Muy bueno y muy facil de aplicar.. mil gracias…..

  2. Excelente contribución. Ya había probado varios tutoriales y este es el unico que sirve perfecto.
    Muchisimas Gracias!!!

  3. Mil gracias!!!! esta perfecto :D

  4. se agradece mucho una contribucion como esta. me sirvio muy bien. saludos cordiales

  5. Excelente aporte, gracias me saco de un apuro.

  6. Muchas gracias por el aporte, la verdad es que si me ahorro mucho trabajo, aparte de cometer errores. Mil gracias

  7. VRamirez says:

    NO TENGO PALABRAS PARA AGRADECER A “MAURICIO BAEZA”, “SAUL LOPEZ”, “MARIO OLIN” POR COMPARTIR CONOCIMIETNOS DIOS LOS BENDECIRA UN MONTON…. :0)

  8. Sr. es Ud. lo máximo, gracias por compartir su conocimiento,es Ud. atododar mil gracias

  9. Excelente, le hice unos pequeños ajustes para la aplicación de la moneda en Chile, quedo perfecto.

  10. muchas gracias me sirvo bastante espero que todos fueran asi como tu amigo gracias

  11. muy buena herramienta, me saco de apuros.
    gracias señores

  12. 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.

  13. ANTONIO MÉNDEZ BAÑUELOS says:

    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!

  14. Agradecemos tu aporte Antonio.

  15. 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

  16. JUAN TAPIA says:

    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.

Leave a Reply

Tu dirección de correo electrónico no será publicada. Los campos necesarios están marcados *

*

Puedes usar las siguientes etiquetas y atributos HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>