Convertir números en palabras con Excel 2010 (macro VBA)

Comenzaré por explicar las condiciones sujetas al procedimiento de convertir números o cifras numéricas en palabras (por ejemplo: 123, en palabras sería “ciento veintitres”):

  1. Tener activas las macros en Excel 2010, de lo contrario no funcionará.
  2. La capacidad de cifras a leer es desde 0 hasta  999999999

Para poder utilizar este macro a través de una función, ingresa al editor de Visual Basic (VBA) presionando alt + F11, luego inserta un nuevo módulo como se ve en la imagen:

insertar módulo excel 2010
Ya dentro del módulo debes copiar el siguiente código:

'-----------------------------------------------------------------
Function NUM_TEXTO(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, 1)
    CadMiles = ConvierteCifra(Miles, 1)
    CadCientos = ConvierteCifra(Cientos, 0)
    If Trim(CadMillones) > "" Then
        If Trim(CadMillones) = "UN" Then
            Cadena = CadMillones & " MILLON"
        Else
            Cadena = Trim(CadMillones) & " MILLONES"
        End If
    End If
    If Trim(CadMiles) > "" Then
        Cadena = Cadena & " " & Trim(CadMiles) & " MIL"
    End If
    If Trim(CadMiles & CadCientos) = "UN" And Not Cientos = "000" Then
        Cadena = Cadena & "UNO Y " & Decimales & "/100"
    Else
        If Trim(CadCientos) = "" Then
        Cadena = Cadena & " " & Trim(CadCientos) & "Y " & Decimales & "/100"
        Else
        Cadena = Cadena & " " & Trim(CadCientos) & " Y " & Decimales & "/100"
        End If
    End If
    NUM_TEXTO = Trim(Cadena)
End Function
'-----------------------------------------------------------------
Function ConvierteCifra(Texto, SW)
    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"
                If SW Then
                    txtUnidad = "UN"
                Else
                    txtUnidad = "UNO"
                End If
            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

Y por último para usar esta función solamente debes colocar la función =NUM_TEXTO([NUMERO]), donde “[NUMERO]” es la celda que contiene la cifra en formato numérico o el número en sí, por ejemplo

  • =NUM_TEXTO(14) >> el resultado sería: “CATORCE”
  • =NUM_TEXTO(A1) >> el resultado sería: “CATORCE”, si A1 contiene el número 14

Etiquetas:, , , ,

"Trackback" Enlace desde tu web.

M. Vizcarra

Ing. Industrial, egresado de la Facultad de Ingeniería Industrial y de Sistemas de la Universidad Nacional Hermilio Valdizán de Huánuco, Perú.

Comentarios (59)

  • Ricardo del Rio

    |

    Exelente te felicito me puede servir para hacer un sistema que imprima cheques en Exel GRACIAS

    Reply

  • loretum

    |

    Buen día, gracias por compartir este código, había probado otros y ninguno me funcionó mejor que este.

    Reply

  • Rodrigo

    |

    Me sale con la leyenda de 00/100, como es posible que aparezca solo el numero correspondiente en letra???

    Reply

  • Zergio

    |

    Muchas Gracias por compartir esto, me ha servido muchísimo!

    Reply

  • Gregory Solórzano

    |

    Y como hago para que quede guardada?

    Reply

  • SANED

    |

    Gracias por compartir tus conocimientos, me ha sido de mucha ayuda

    Reply

  • Msonic

    |

    Y como le hago para que quede guardada. La cierro y al volver a abrir excel ya no esta la formula….

    Reply

  • ALFREDO GONZALEZ RUIZ

    |

    TENGO UN PROBLEMA, DISEÑE UN PROGRAMITA EN EXCEL CON LA MACRO DE CANTIDADES EN PESOS Y UNA MACRO ANTIGUA DE CONVERTIR NUMEROS A LETRAS, ME VENIA FUNCIONANDO PERO AL CAMBIARA EXCEL 2010 YA NO FUNCIONO, TENGO UN SISTEMA OPERATIVO XP, LE PONGO TU MACRO NUEVA Y FUNCIONA EN MI COMPUTADORA, PERO AL CAMBIAR DE COMPUTADORA DONDE HAY WINDOWS 7, YA NO FUNCIONA, PORQUE ?

    Reply

  • M. Vizcarra

    |

    Revisa las referencias en tu macro, abre el panel Desarrollador y ve a Herramientas/Referencias, tal vez tengas activadas referencias que no tienes en la máquina con windows 7

    Reply

  • Suu..

    |

    hola! excelente info 😉 la utilice y superfunciona :* pero fijate que me dio un problemiita, ahora que ya cerre el excel 2010 no me arroja ningun resultado la formula, como si no la reconociera y la vuelvo a escribir y no la reconoce :/ help me please.. como lo corrijo?

    Reply

  • M. Vizcarra

    |

    Tienes que colocar el código en todos los libros (documentos nuevos) que necesites

    Reply

  • Andro

    |

    MUY BUENO!!! tengo una duda, se podra hacer que lea de las siguiente forma:
    $ 20.10 Veinte pesos 10/100 ???

    Reply

  • Elixita

    |

    hola aqui te dejo mira donde dice” dolares con ” ponle ” pesos con ” pero mira los espacios bien porque sino te da todo junto

    Function Num_texto(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, 1)
        CadMiles = ConvierteCifra(Miles, 1)
        CadCientos = ConvierteCifra(Cientos, 0)
        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(CadMiles & CadCientos) = "UN" Then
            Cadena = Cadena & "UNO CON " & Decimales & "/100"
        Else
            If Miles & Cientos = "000000" Then
                Cadena = Cadena & "" & Trim(CadCientos) & " DOLARES CON " & Decimales & "/100"
            Else
                Cadena = Cadena & "" & Trim(CadCientos) & " DOLARES CON " & Decimales & "/100"
            End If
        End If
        Num_texto = Trim(Cadena)
    End Function
    '-----------------------------------------------------------------
    Function ConvierteCifra(Texto, SW)
        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"
                    If SW Then
                        txtUnidad = "UN"
                    Else
                        txtUnidad = "UNO"
                    End If
                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

    Reply

  • Moises Campos

    |

    Gracias esta buena la macro, excelente por el aporte…

    Reply

  • Marvin Vásquez

    |

    El código original está excelente por que no especifica ningún tipo de moneda.. El tipo de moneda que deseas en mi caso utilizo quetzales, lo hice así: =Num_texto(AG52)&” Quetzales” AG52 = LA CELDA QUE CONTIENE LA CIFRA EN NÚMEROS

    Reply

  • YUYOSO

    |

    PARA QUE NO APAREZCAN LOS 00/100 DEBES BORRAR LA ULTIMA PORCIÓN DE LA LINEA DE CODIGO:
    & Decimales & “/100”
    QUE APARECEN REPETIDA EN 3 LINEAS DE CODIGO Y LISTO.

    Reply

  • JIMMY

    |

    GRACIAS POR LA AYUDA ME PARECE MUY BUENA, PERO AYUDAME CON ALGO, CUANDO SALE LA CIFRA 1,000 LA LEE COMO UN MILUNO COMO CORRIJO ESO, SALUDOS

    Reply

  • Patricio

    |

    Para que te funcione en cualquier libro de excel abierto debes guardar las macros como complementos

    Si ya guardaste las marcros, abrelo y copia los módulos de las macros en un libro nuevo por el editor de Visual Basic, despues guarda el libro nuevo pero en la ventana de Guardar Como, en Tipo de Archivo, guardalo como “Complemento de Microsoft Excel”.

    Cuando tengas ese complemento guardado, abre excel y vé a Herramientas, Complementos, agregar complemento, alli buscas el archivo que acabas de guardar y listo. Asi las macros funcionaran en cualquier libro de excel que este abierto.

    A mi me funcionó espero a ustedes tambien…

    Salu2

    Reply

  • Rodrigo

    |

    Quisiera saber si existe una macro como esta para cifras más grandes que 999,999,999, la idea sería que leyera cifras de 12 dígitos, esposible?

    Reply

  • Williams Alfonzo

    |

    Excelente información, muy útil y de fácil acceso.

    Reply

  • Carlos Garcia

    |

    Disculpa una rutina en donde NO coloque ni dolares y pesos, seria el numero con decimales completo, por ejemplo:
    1,534.52 = un mil quinientos treinta y cuatro punto cincuenta y dos

    Reply

  • SANDRA VALERIA

    |

    ME SUPER ENCANTO POR QUE NOS AIIDO MUCHO EN EL TRABAJO II NOS SOLUCCIONO LAS DUDAS QUE TENEMOS.. GRACIAS :-) (Y)

    Reply

  • CUAUHTEMOC VILLA

    |

    EXCELENTE PROGRAMA, SOLO UNA PREGUNTA, COMO HAGO PARA QUE LA CANTIDAD ME QUEDE ENTRE PARENTESIS, ASI COMO, AGREGAR M.N.
    EJEMPLO: 4,200.33 QUE QUEDE ASI: (CUATRO MIL DOSCIENTOS PESOS 33/100 M.N.)

    Reply

  • Rafael

    |

    ¿ y como quito los centimos solo necesito numeros simples

    Reply

  • Roland T.S.

    |

    De todos los codigos que encontre este me sirvio mas, pero de todos modos tuve que acerle unas cuantas modificaciones para que me saliera como yo queria. Se agradece mucho al autor o autores. Saludos de Iquitos-Peru

    Reply

  • alex

    |

    Buen aporte muchas gracias me ayudo mucho

    Reply

  • Herwin Velaochaga

    |

    yo uso dos tipos de monedas, nuevos soles y dolares americanos

    Reply

  • M. Vizcarra

    |

    Para todos lo que desean poner su tipo de moneda les sugiero concatenar la formula, de esta manera =Num_Texto(A1) & " dolares americanos"

    Reply

  • Alejandro

    |

    Muchas gracias excelente aportación, tenía un código que incluía en complementos, pero ocasionalmente se des-habilitaba en Excel 2010, ahora veo luz al final del camino…

    Reply

  • Rolando

    |

    Muchas gracias por el aporte. FUNCIONA EXCELENTE. Trabajo con calificaciones de alumnos que van de 0 a 100 puntos y la planilla de notas no acepta decimales, solo acepta numero enteros. Es decir, que se debe aplicar el redondeo al numero superior o inferior. Por ejemplo: una nota de 60,5 se redondea a 61 y 60,4 se redondea a 60. Necesito convertir estos números en palabras que muestren el texto el numero redondeado, es decir 60,5 el texto debe decir “SESENTA Y UNO”.

    Agradece su ayuda en este punto.

    Reply

  • M. Vizcarra

    |

    Bueno, supongamos que la nota 60.5 ó 60.4 lo tengas en la celda “A1”, entonces colocaré esta formula (que es un poco larga pero no altera el macro) en la celda “B1”:
    =IZQUIERDA(Num_texto(REDONDEAR(A1,0)),LARGO(Num_texto(REDONDEAR(A1,0)))-7)
    Funciona bastante bien espero que te sirva

    Reply

  • Rolando

    |

    Muchas gracias, funciona EXCELENTE

    Reply

  • Manuel

    |

    Excelente aporte le modifique algunos puntos gracias a q Ud ya habia hecho el codigo muy bien por ejm en los puntos de q al final deberia decir nuevos soles y los decimales separados con la letra Y 20/100 N.S y ademas le cambie en las denominaciones de los importes por q salia ejm CINCUENTA Y SIETE y no CINCUENTISIETE solo eso nada mas por lo demas genial ahorra un montos de tiempo gracias …!!!

    Reply

  • ANGELES VILCHIS

    |

    Muchas gracias, deberas que gente como tu, nadie. me he encontrado con formulas que hay que bajar y solo bajan virus, pero en fin mil gracias por la ayuda que todos nosotros nos sirve. (Y)

    Reply

  • Robinson Tene

    |

    Hola q tal muchas gracias por el aporte tuyo,muy bueno si fueras tan amable de ayudarme para sacar con decimales en letras ejemplo.
    7,50 SIETE COMA CINCUENTA..

    Reply

  • luis Caudillo

    |

    Para agregar el tipo de moneda agreguenlo en la siguiente linea, en mi caso en Moneda Nacional:

    Else
    If Miles & Cientos = “000000” Then
    Cadena = Cadena & “” & Trim(CadCientos) & ” DOLARES CON ” & Decimales & “/100 M.N.”
    Else
    Cadena = Cadena & “” & Trim(CadCientos) & ” DOLARES CON ” & Decimales & “/100 M.N.”
    End If

    Reply

  • Yosbin

    |

    Sinceramente gracias por aportar me servio de mucho.

    Reply

  • Pepe

    |

    Disculpen, me quede en el copiado del codigo en el modulo, no entendi en donde hay que colocar la funcion =Num_Texto([NUMERO])… alguien me ayuda?

    Reply

  • Vicente Q.G.

    |

    Buena hermano…..

    Reply

  • Edison

    |

    Excelente aporte, pero una consulta como hago para revertir, quisiera que mi archivo no tenga macros?

    Reply

  • Jessica

    |

    Muchas gracias excelente aporte! solo una pregunta, soy profesora y necesito colocar en diplomas las notas de mis chicos y deben ir así: 9,34 nueve coma treinta y cuatro…que le debo cambiar?

    Reply

  • MAURICIO

    |

    FELICITACIONES!!!! EXCELENTE. FUNCIONÓ PERFECTO.

    Reply

  • wILLY

    |

    Muchas Gracias funciono a la perfeccion

    Reply

  • RICHAR RODRIGUEZ

    |

    Felicitaciones, excelente ayuda pero necesito que me de de la siguiente forma 8,23 ocho punto veintitres.

    Reply

  • miguel

    |

    Muchas gracias. Tu script me sirvio mucho y me ahorro verdaderamente mucho tiempo de programacion y busqueda!!! Mil gracias!

    Reply

  • Jairo David

    |

    excente aporte hermano por casualidad tienes creado otro algoritomo para convertir lo contrario o regresar al estado anterior de texto a numero

    Reply

  • Richard

    |

    Gracias por compartir esta información me sirvió de mucho tu aporte.

    Reply

  • Marco

    |

    Hola M. Vizcarra… me puedes ayudar, quiero poder escoger entre pesos y dólares en el siguiente campo, pero que se pueda ver de la siguiente forma

    20,914.80 = VEINTE MIL NOVECIENTOS CATORCE PESOS CON 80/100 CENTAVOS M.N.
    20,914.80 = VEINTE MIL NOVECIENTOS CATORCE DOLARES CON 80/100 CENTAVOS M.E.

    Else
    If Miles & Cientos = “000000” Then
    Cadena = Cadena & “” & Trim(CadCientos) & ” PESOS CON ” & Decimales & “/100 M.N.”
    Else
    Cadena = Cadena & “” & Trim(CadCientos) & ” PESOS CON ” & Decimales & “/100 M.N.”
    End If

    Reply

  • Niels

    |

    ¡ Excelente ! trabaja muy bien, gracias por compartirlo

    Reply

  • GLADYS

    |

    Me encantó, muuuuy util – grcaias

    Reply

  • raul

    |

    hay alguna macro o complemento para números de 10 o mas dígitos
    9.999.999.999.oo 99.999.999.999.oo 999.999.999.999.oo la hay?

    Reply

  • ALVARO FERNANDEZ

    |

    exelente….

    Reply

  • ALVARO FERNANDEZ

    |

    Estimado M.Vizcarra, el aporte que hiciste es muy bueno, solo que tengo um pequeño inconveniente, copie tal cual toda el codigo pero al digitar 1.000.000 un millon en texto me refleja “UN MILLONES” en letras, es el unico problema que tengo…., estimo que debe ser de corregir en la primera parte del codigo

    If Trim(CadMillones) > “” Then
    If Trim(CadMillones) = “UN” Then
    Cadena = CadMillones & ” MILLON”
    Else
    Cadena = Trim(CadMillones) & ” MILLONES”
    End If
    End If

    Porfavor si me pudieras ayudar en esto te lo agradeceria, por lo demas solo darte las gracias porque es una gran ayuda tu aporte…

    Reply

  • ANDJECO

    |

    Muy buena la información ya la modifique funcionan excelente Recibe Bendiciones por esa ayuda gracias

    Reply

  • Gonzalo Sabag

    |

    Gracias por la información. Funciona excelente.
    Saludos.

    Reply

  • JAIRO

    |

    EXCELENTE TRABAJO, MUY UTIL DE VERDAD.
    AYÚDEME CON ALGO, NECESITO QUE LOS NUMEROS ME SALGAN EN LETRAS, EJEMPLO: 7,05 SIETE COMA CERO CINCO. 9,28 NUEVE COMA VEINTIOCHO 5,00 CINCO COMA CERO CERO.
    MIL GRACIAS POR SU AYUDA.

    Reply

Deja un comentario