lunes, 23 de junio de 2008

Convertir números a letras en Excel II (LWP)

Antes que nada quiero hacer un énfasis especial en que el código a continuación presentado no es de mi autoría sino que ha sido tomado de la La Web del Programador y ya no me acuerdo de que parte pero ahí lo ví hace tiempo y es mejor que el artículo escrito anteriormente en este blog, por lo tanto cualquier duda o pregunta los invito a que visiten LWP y ayuden a esa excelente comunidad.

Ok, ya para entrar en el asunto de explicar cómo se van a convertir los números a letras en Excel les diré que ahora van usar la función =letras(#COL,#FILA) en cualquier celda de Excel, pero previamente deberán haber creado un método o macro que contenga el código que les mostraré a continuación.

Antes que nada y para aquellos que no les gusta buscar mucho por todos lados, les haré una breve explicacioncita de como entrar al editor de Visual Basic de Excel. Yo se que a veces suena tonto y ridículo explicar esto pero los que ya saben no necesitan saber leer esta parte ya que es dirigido a los principiantes o personas no acostumbradas a las interfaces de programación.



Ingresar al Editor de Visual Basic en Excel


En Office 2003, Office XP, Office 2000, etc, singa estos pasos:


  1. Ir al menú "Herramientas"

  2. Ir a "Macro"

  3. Seleccionar "Editor de Visual Basic"



Luego que entren al Editor de Visual Basic seleccionen el libro en el que vayan a necesitar la función que veremos luego y vayan al menú:

  1. Insertar

  2. Módulo



Luego pegan todo el código y después lo guardan y cierran el Editor de Visual Basic. Aclaro de manera especial que si es un libro nuevo en donde van a guardar el código, Excel automáticamente pedirá que se guarde el libro en donde quedará la macro.

Y en la ventanita que se abra pegaran el código siguiente (también pueden hacer click desde ya en "copy to clipboard" para copiar todo este texto)

Dim Texto
Dim Millones
Dim Miles
Dim Cientos
Dim Decimales
Dim Cadena
Dim CadMillones
Dim CadMiles
Dim CadCientos
Dim caddecimales
Texto = Round(Numero, 2)
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, False)
CadMiles = ConvierteCifra(Miles, False)
CadCientos = ConvierteCifra(Cientos, True)
caddecimales = ConvierteDecimal(Decimales)

If Trim(CadMillones) > "" Then
If Trim(CadMillones) = "UN" Then
Cadena = CadMillones & " MILLON"
Else
Cadena = CadMillones & " MILLONES"
End If
End If
If Trim(CadMiles) > "" Then
If Trim(CadMiles) = "UN" Then
CadMiles = ""
Cadena = Cadena & "" & CadMiles & "MIL"
CadMiles = "UN"
Else
Cadena = Cadena & " " & CadMiles & " MIL"
End If
End If
If Trim(CadMiles) > "001" Then
CadMiles = "MIL"
End If
If Decimales = "00" Then
If Trim(CadMillones & CadMiles & CadCientos & caddecimales) = "UN" Then
Cadena = Cadena & "UNO "
Else
If Miles & Cientos = "000000" Then
Cadena = Cadena & " " & Trim(CadCientos)
Else
Cadena = Cadena & " " & Trim(CadCientos)
End If
letra = Trim(Cadena)
End If
Else
If Trim(CadMillones & CadMiles & CadCientos & caddecimales) = "UN" Then
Cadena = Cadena & "UNO " & "CON " & Trim(caddecimales)
Else
If Millones & Miles & Cientos & Decimales = "000000" Then
Cadena = Cadena & " " & Trim(CadCientos) & " PESOS " & Trim(Decimales) & "/100 M.N."
Else
Cadena = Cadena & " " & Trim(CadCientos) & " PESOS " & Trim(Decimales) & "/100 M.N."
End If
letra = Trim(Cadena)
End If
End If

End Function
Function ConvierteCifra(Texto, IsCientos As Boolean)
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 IsCientos = False 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

Function ConvierteDecimal(Texto)
Dim Decenadecimal
Dim Unidaddecimal
Dim txtDecenadecimal
Dim txtUnidaddecimal
Decenadecimal = Mid(Texto, 1, 1)
Unidaddecimal = Mid(Texto, 2, 1)

Select Case Decenadecimal
Case "1"
txtDecenadecimal = "DIEZ"
Select Case Unidaddecimal
Case "1"
txtDecenadecimal = "ONCE"
Case "2"
txtDecenadecimal = "DOCE"
Case "3"
txtDecenadecimal = "TRECE"
Case "4"
txtDecenadecimal = "CATORCE"
Case "5"
txtDecenadecimal = "QUINCE"
Case "6"
txtDecenadecimal = "DIECISEIS"
Case "7"
txtDecenadecimal = "DIECISIETE"
Case "8"
txtDecenadecimal = "DIECIOCHO"
Case "9"
txtDecenadecimal = "DIECINUEVE"
End Select
Case "2"
txtDecenadecimal = "VEINTE"
If Unidaddecimal <> "0" Then
txtDecenadecimal = "VEINTI"
End If
Case "3"
txtDecenadecimal = "TREINTA"
If Unidaddecimal <> "0" Then
txtDecenadecimal = "TREINTA Y "
End If
Case "4"
txtDecenadecimal = "CUARENTA"
If Unidaddecimal <> "0" Then
txtDecenadecimal = "CUARENTA Y "
End If
Case "5"
txtDecenadecimal = "CINCUENTA"
If Unidaddecimal <> "0" Then
txtDecenadecimal = "CINCUENTA Y "
End If
Case "6"
txtDecenadecimal = "SESENTA"

If Unidaddecimal <> "0" Then
txtDecenadecimal = "SESENTA Y "
End If
Case "7"
txtDecenadecimal = "SETENTA"
If Unidaddecimal <> "0" Then
txtDecenadecimal = "SETENTA Y "
End If
Case "8"
txtDecenadecimal = "OCHENTA"
If Unidaddecimal <> "0" Then
txtDecenadecimal = "OCHENTA Y "
End If
Case "9"
txtDecenadecimal = "NOVENTA"
If Unidaddecimal <> "0" Then
txtDecenadecimal = "NOVENTA Y "
End If
End Select

If Decenadecimal <> "1" Then
Select Case Unidaddecimal
Case "1"
txtUnidaddecimal = "UNO"
Case "2"
txtUnidaddecimal = "DOS"
Case "3"
txtUnidaddecimal = "TRES"
Case "4"
txtUnidaddecimal = "CUATRO"
Case "5"
txtUnidaddecimal = "CINCO"
Case "6"
txtUnidaddecimal = "SEIS"
Case "7"
txtUnidaddecimal = "SIETE"
Case "8"
txtUnidaddecimal = "OCHO"
Case "9"
txtUnidaddecimal = "NUEVE"
End Select
End If
If Decenadecimal = 0 And Unidaddecimal = 0 Then
ConvierteDecimal = ""
Else
ConvierteDecimal = txtDecenadecimal & txtUnidaddecimal
End If
End Function


Para el caso de Office 2007 que en algunas instalaciones no trae consigo habilitado la pestaña (tab o ficha) "Programador" debemos habilitarla haciendo click en el "botón de Office" y luego clickar las "Opciones de Excel" tal como se ve en los siguientes dibujos, y luego marcar la casilla de verificación "Mostrar ficha Programador en la cinta de Opciones". Al hacer esto verán que aparecerá al final de las demás fichas de Excel la ficha que necesitamos para ingresar al Editor de Visual Basic que es el primer icono que aparece a la izquierda con el texto "Visual Basic".


Boton Office
Activar Programador


Para ver un poco más de detalle de como insertar un nuevo módulo en el libro en que queramos la función pueden hacer click aquí para leer un poco más al respecto y complementar este procedimiento.

Una vez hecho todo lo anterior no queda más que guardar en el Editor de Visual Basic, cerrarlo, y luego probar que la función haga su trabajo en una celda cualquiera, asi:

Supongamos que la celda A1 tiene el número 15,958.76
Llamamos a la función letras en la celda A2: =letra(A1)
Y aparecerá el resultado:

Resultado de letra

Importantes notas a destacar

:

  • Puesto que la función muestra PESOS como moneda local no quiere decir que así debe ser siempre, ya que esto debe ser cambiado a cualquiera que sea nuestra moneda local, ya sean DOLARES, QUETZALES, EUROS, SOLES, ETC., al igual que las letras M.N. (Moneda Nacional) que aparece al final del texto. Para efectuar este cambio nada más deberán reemplazar la palabra PESOS de las filas número 61 y 63 por el nombre de su moneda pero sin borrar nada más, y de igual forma, al final de esas mismas líneas de texto aparece M.N. el cual pueden cambiar por lo que mejor les convenga.

  • Me ha pasado en algunas situaciones que he querido ver el Editor de Visual Basic en Office 2007 y simplemente no está porque dependiendo de la instalación que se haya hecho, no siempre se instala por lo cual deberán tener a la mano el CD de instalación de Office 2007 y añadir ese complemento.



Como les mencionaba al principio, los créditos no son míos, no he hecho yo está importante función, nada más me he limitado a compartirla con todos añadiendo algo de contenido. Yo vi hace mucho tiempo el código en La Web del Programador y puesto que la primera vez que publiqué mi ejemplo tenía cierto problema con ciertas cantidades, he decidido poner este nuevo método, aunque si quieren comentar, pues bienvenidos sean sus comentarios.

104 comentarios

  1. MARIO MUY INTERESANTE Y ME PARECE QUEES UN POCO MAS LARGO PERO EL FIN ES LO QUE SE BUSCA, MUCHAS GRACIAS Y SIGUE ASI

    ResponderEliminar
  2. esta muy padre esta macro, soló que hay un detalle ¿que pasa cuando son números cerrados y números menores de 10; ejem: 1,2,3,4,5,6,7,8,9,10,11,12,etc, etc al 100 y de ahí de cien en cien? para explicarme mejor si pongo el # 1 deberia aparecer (UN PESO 00/100 M.N.) y en el caso de 100 ó MIL (CIEN PESOS 00/100 M.N.) (MIL PESOS 00/100 M.N.) lo cual no es así...... Me podrías ayudar por favor??

    ResponderEliminar
  3. Perdón me falto un cero es antes de 100..

    ResponderEliminar
  4. lupsi08:

    para solucionar tu problema tienes que corregir la linea 43...

    dice:
    If Decimales = "00" Then
    debe decir:
    If Decimales = "" Then

    sólo quita los dos ceros que estan dentro de las comillas...

    ResponderEliminar
  5. GRACIAS ME SIRVIO DE MUCHO, ME PUEDEN AYUDAR QUIERO QUE LA CANTIDAD EN LETRAS APAREZCA ENTRE PATENTESIS $10.00 (DIEZ PESOS 00/100 M.N.) Y SI TENGO QUE MODIFICARLE ALGO DONDE DEBO DE ENTRAR EN EL MODULO...GRACIAS

    ResponderEliminar
  6. Hice varias pruebas y es mas efectiva, pero solo un caso no funcionó, escribí 1,000,000.00 y queda la celda en blanco, creo que no hay ningun comando para esta cifra.

    Como lo inserto?

    ResponderEliminar
  7. Además siempre pone "uno" en lugar de "UN".

    ResponderEliminar
  8. Todo eso esta excelente, pero mi duda es:
    en el caso de calificaciones los decimales suben al siguiente numero entero al menos que sea reprobatoria no sube: ejemplo:
    6.5 = 7
    8.8 = 9
    pero si es reprobatoria no se incrementa:
    5.9 = 5
    5.6 = 5
    donde debo modificar para que se pueda redondear?
    de antemanogracias.

    ResponderEliminar
  9. muy interesante y muy bien hecho

    ResponderEliminar
  10. causa mil gracias por publicar y explicar esta funcion me has salvado la vida menos mal que hay personas como tu que no son eqoistas muchas gracias

    ResponderEliminar
  11. como hago para que me deje instalarar el visual basic me sale esto Memoria insuficiente

    Gracias

    ResponderEliminar
  12. Probablemente sea un error de Windows o quien sabe si tu maquina no posee suficientes recursos, o quiza Office necesite ser reinstalado. Prueba reinstalar Office en version completa.

    ResponderEliminar
  13. :???: buena aportacion para los q trabajan Excel, aunque, como puedo hacerle para que, cada ves que abra Excel o un nuevo libro, me carge el Codigo o llevarlo a una Lap.
    saludos.

    ResponderEliminar
  14. Para hacer que cargue el código cada vez que abras Excel, necesitas insertar el módulo en el libro de macros PERSONAL.XLS de Excel, que es un libro especial de Excel que se abre cada vez que inicias Excel. Este libro de macros personal sirve sólo para eso, guardar código que necesitas que esté disponible cada vez que abras Excel.

    Por otra parte, puedes insertar el código en un módulo en el libro en donde vayas a trabajar para que esté disponible incluso si mueves el archivo a diferentes máquinas. Sólo te advertiría que el nivel de seguridad de macros debe estar en "bajo" para que el código se ejecute sin ningún problema o de lo contrario, recibirás un mensaje de advertencia en donde dice que el libro contiene macros que podrían poner en riesgo la seguridad, aunque te diré que el código aqui presentado es 100% seguro y no es malicioso, simplemente sirve a su propósito: convertir números a letras.

    Busca en este mismo blog algo sobre el libro de macros personal y otras cosas relacionadas que he escrito, te daría los enlaces pero ando corto de tiempo asi que has una búsqueda.

    Saludos y buena suerte BTito.

    ResponderEliminar
  15. aun no lo he logrado no me funciona ...porfa necesito ayuda :cry:

    ResponderEliminar
  16. dice que hay un error de complicacion: que se ha detectado un nombre ambiguo
    pasa con las siguietes palabras
    letra
    convietedecimal
    conviertecifra
    y no se como modificarlo para que logre funcionar

    ResponderEliminar
  17. y tambien con esta
    Function RecurseNumber(N As Long) As String
    help me!!!!

    ResponderEliminar
  18. No se lo que has hecho André, pero acabo de probarlo y funciona correctamente. Probaste insertar un módulo nuevo en el Editor de Visual Basic, y pegaste ahi éste código??.

    Lee cuidadosamente y pruebalo. Recuerda: Insertar un Módulo Nuevo y pegar.

    ResponderEliminar
  19. hola si me funciona pero un ejemplo si pongo 100.25 me aparece correctamente "cien pesos con 25/100 m.n.) pero si pongo 100 solo me aparece cien sin la palabra pesos ni 00/100 m.n de antemano gracias por la ayuda

    ResponderEliminar
  20. Buen dia,

    Te Cuento que me acabas de salvar la vida con esto, pero tengo una duda, en mi trabajo tengo que t5rabajar con miles de millones, es decir ; 79.326.458.782,16 pero al aplicar la formula solo me toma hasta millones y no pasa de ahi .... me puedes ayudar ... Gracias

    ResponderEliminar
  21. MARIO, MIS SINCERAS FELICITACIONES POR ESTE PROGRAMA, SI QUE ES DE MUCHA UTILIDAD.
    QUISIERA QUE POR FAVOR ME AYUDARAS CON LO SIGUIENTE:
    EN MI CASO, EN EL RESULTADO DE PASAR DE NUMEROS A LETRAS, BEDE SALIR LA PALABRA PESOS M/CTE...PERO TENGO UN PROBLEMA CUANDO ESCRIBO UN NUMERO CERRADO COMO POR EJEMPLO: $25.000.000 = AL TRADUCIR EN LETRAS, ME SALE= VEINTICINCO MILLONES PESOS M/CTE....ME HACE FALTA LA PALABRA "DE", ANTES DE LA PALABRA PESOS.....DE ANTEMANO LE AGRADEZCO SU VALIOSA COLABORACION.

    ResponderEliminar
  22. MARIO BUENOS DIAS....ESTE PROGRAMA ES BASTANTE UTIL Y MUY COMPLETO, PERO QUISIERA QUE POR FAVOR ME AYUDARAS CON OTRA INCONSISTENCIA=

    -CUANDO QUIERO CONVERTIR LA CIFRA 1.000.000 NO ME SALE NADA (SALE O)

    DE NUEVO GRACIAS POR ESTE UTIL PROGRAMA Y DE ATEMANO LE AGRADEZCO POR SU VALIOSA COLABORACION.

    ResponderEliminar
  23. Eugenia Ma. Peña19 de enero de 2009, 7:11

    Buen dia

    Probe la funciones estan muy bien
    solo tengo el siguiente problema con los numero enteros no me aparece "00/100 M.N"

    probe cambia como lo suguiere lo siguiente
    (( If Decimales = “00? Then
    (( debe decir:
    (( If Decimales = “” Then

    PERO NO CAMBIA LA FORMA. CONTINUA SIN COLOCAR 00/100M.N.
    QUE PUEDO HACER ???

    ResponderEliminar
  24. No responde al valor de 1.000.000
    Ademas necesito que salga por ej: 21 = veintiun pesos no veintiuno pesos
    de igual forma 4.000.000 cuatro millones de pesos no cuatro millones pesos.......se que puedes ojala tenga pronta respuesta de esto...la idea es perfeccionarlo

    ResponderEliminar
  25. He copiado la macro, pero al ejecutarla me dice: "se esperaba fin de la funcion".¿ que estoy haciendo mal? ayudenme por favor

    Gracias

    Xuliux , desde México

    ResponderEliminar
  26. hola mario, primero kiero felicitarte x tu aporte q haces.
    mas, tengo una duda, x ejemplo si yo pongo en una celda 100, entonces la formula solo te da la palabra CIEN, mas no como esperaba q saliera: CIEN NUEVOS SOLES 00/100 MN, esto solo es en los casos en q pongo un numero entero sin decimales, q es lo q tengo q hacer para q todo el texto salga completo?, agradecere tu respuesta.

    ResponderEliminar
  27. Encerio te agradezco, y yo que me creia bueno en excel pero tu eres una eminencia te agradezco mucho encerio.. enseñame mas... gracias, gracias

    ResponderEliminar
  28. Muchas gracias, excelente y facil de usa. Douglas Espindola - Bogota Colombia
    :lol:

    ResponderEliminar
  29. QUE TALAMIGO: por lo que veo todos saben de lo que hablan, sin embargo hay personas como yo que estamos en cero y he tratado de hacer todo tal y como lo indicas pero no puedo hacer funcionar el macro, pudieras explicarlo con naranjas y manzanaz, es decir, sin omitir paso alguno?. Gracias de antemano.

    ResponderEliminar
  30. gracias por tener ese corazon de colaborador, pero a mi no me ha funcionado ¿ que estare haciendo mal?.

    te agradesco si puedes enviarme un archivo ebn excel con el codigo incluido para intentarlo de nuevo

    ResponderEliminar
  31. humberto escobar recinos14 de abril de 2009, 6:28

    como le hago para que me salga entre parentesis las letras

    ResponderEliminar
  32. humberto escobar recinos14 de abril de 2009, 6:31

    como le hago para que la macros me funciones cada que abra un libro de excel

    ResponderEliminar
  33. muy bueno, es lo que estaba buscando. Pero tengo un pequeño problema. :oops:
    La funcion no se graba con el archivo, o sea que cuando grabo el archivo y lo cierro, cuando lo vuelvo a abrir y quiero utilizar la funcion, me dice #¿NOMBRE?. Que me aconsejan? :shock:
    Tengo Microsoft Exel 2007.

    ResponderEliminar
  34. Muchas gracias, su código me ayudó bastante y la explicación es lo suficientemente clara, ahora puedo emitir los cheques con mayor agilidad y sin errores.

    Mil gracias :mrgreen:

    ResponderEliminar
  35. me gustaria que me mandaran guias de como hacer macros desde la mas facil hasta la mas dificil o si hay algun libro donde lo puedo conseguir y cual es el autor
    bueno me despido y la verdad tienen muy buenos tips

    ResponderEliminar
  36. Gracias por compartirnos de manera desinteresada tus conocimientos. Una herramienta muy útil. Las explicaciones muy claras. Felicidades.

    ResponderEliminar
  37. LA VERDAD SOY NUEVO EN ESTO Y SE ME HACE DIFICIL ENTENDER COMO FUNCIONA ESTA MACRO SOY SOLO UN AFICIONADO Y ME GUSTARIA SABER COMO FUNCIONA LA CONVERSIÓN DE NUMEROS A LETRAS EN EXCEL TAL VEZ ME PODRIAS ENVIAR UN EJEMPLO EN EL MISMO PROGRAMA PARA QUE LO PUEDA COMPRENDER DE ANTEMANO TE LO AGRADECERIA DEMASIADO Y QUE DIOS TE SIGA DANDO SABIDURIA
    gracias por tener ese corazon de colaborador, pero a mi no me ha funcionado ¿ que estare haciendo mal?.
    DIOS TE BENDIGA MI MAIL ES FREDYGINES@HOTMAIL.COM

    ResponderEliminar
  38. He copiado tu macro y funciona perfectamente (es la macro que tiene 298 items), pero necesito un favor....cuando se pone una valor sin decimales no a parece la siguiente leyenda 00/100 y yo necesito ayuda sobre esto, porque si necesito que me aparesca dicha leyenda...me podrian a yudar por favor.

    ResponderEliminar
  39. Para que ponga el valor sin decimales correctamente, lean por favor más arriba viene la solución.
    Ahora yo necesito ayuda, cuando se pone unicamente 1, ahi sale 0, no sale nada mas que 0. ¿Alguien sabe como resolverlo?

    Gracias

    ResponderEliminar
  40. CREO QUE LO QUE HICISTE NOS SIRVIO DE GRAN AYUDAD A MUCO HOY AMI ME HA SERVIDO DEMACIOADO, YA QUE TE AHORRAS MUCHO TIEMPO Y EL CAMBIO ES AUTOMATICO LO UNICO QUE SE DEBE HACER ES REVIZAR LA CANTIDAD.
    MUCHAS GRACIAS ERES UNA PERSONA GENIO.

    ResponderEliminar
  41. QUE TAL OJALA ALGUIEN PUEDA RESPONDER A MI PREGUNTA POR FAVOR:
    Necesito saber como hacer para que cuando la cantidad sea en miles, especificamente mil, en letra me aparezca UN MIL, EJEMPLO:
    1,935.36 ( UN MIL NOVECIENTOS TREINTA Y CINCO PESOS 36/100 M.N.)
    POR QUE SOLO APARECE MIL
    OTRA COSA, AL PONER 1 Ó 1,000,000 NO ME REGRESA NADA EN LETRAS

    YO CAMBIE EN EL CODIGO DE LAS LINEAS EN DONDE APARECE "UNO " PARA QUE NO ME PONGA AL FINAL 'UNO' SINO 'UN', PERO NO SE EN Q MAS ME PUEDE AFECTAR???

    ResponderEliminar
  42. OYE MARIO!! :roll: YA LEI MAS ARRIBA Y LA VERDAD NO VEO SOLUCION PARA 1 Ó 1,000,000 :cry:
    YA PUDE RESOLVER LO DE 'UN MIL', PERO SIGO BUSCANDO COMO HACER P Q ME SALGA CON LETRA UN PESO Y UN MILLON DE PESOS
    GRACIAS :lol:

    ResponderEliminar
  43. muy buen programa me facilito mucho mi trabajo solo que he tenido un error hasta ahorita los numeros cerrados no me agrega el 00/100 M.N. y ya modifique la linea 43 y sigo teniendo el mismo problema que puedo hacer al respecto gracias

    ResponderEliminar
  44. Excelente aportación, muchísimas gracias me ayudó muchísimo. Espero no tener problemas para ejecutarlo, según con lo que he leido en preguntas y respuestas casi se resuelve todo lo que me tenía preocupada. Muchas gracias!!!!!

    ResponderEliminar
  45. solo tengo una pregunta que creo que ha sido la de todos o la de la mayoría, que pasa con 1,000,000.00? Si por favor me ayudan? Gracias de antemano.

    ResponderEliminar
  46. hola yo tengo una pregunta

    a mi no m funciona el programa no se en que este mal pero no m funciona necesito ayuda urgente :sad:

    ResponderEliminar
  47. hola gracias tu macro me ha servido mucho en mi trabajo pero necesito que la cantidad con letra vaya entre parentesis, logre poner el parentesis del final peno no he podido poner el de inicio ojala me pueda ayudar. y como podria poner para que quede un y no uno gracias

    ResponderEliminar
  48. como podré combinar dos bancos de datos de cinco columnas de datos en excel cada una en un archivo de Microsoft Excel

    ResponderEliminar
  49. Buenos dias, mil gracias por este gran trabajo ejecutado, te comento que pude solocionar mi problema de conversion de numero a letras gracias a tus detalladas explicaciones, soy novata en programacion y me sirvieron de gran ayuda.
    saludos.

    ResponderEliminar
  50. Hola, acabo de encontrar tu espacio, despues de mucho leer y buscar entendi tu idea, la hice y claro qeu funciona!!! solo encontre un detalle, talvez sea error mio, ya que yo no soy programador ni nada por el estilo, solo busco herramientas que me ayuden en mis quehaceres y talvez pueda ser un error mio.
    El punto que vi es que si manejas cantidades sin fracciones no te agerga la frase "PESOS" al final del texto ya convertido. De otra maera, esq ue si por ejemplo pongo 123456.78 el texto sale correcto pero si pongo solo 123456 le falta al final la leyebda PESOS.

    saludos y gracias por la informacion.

    ResponderEliminar
  51. muy buen programa me facilito mucho mi trabajo solo que he tenido un error hasta ahorita los numeros cerrados no me agrega el 00/100 M.N. que puedo hacer al respecto gracias

    ResponderEliminar
  52. Hola, acabo de encontrar tu espacio, despues de mucho leer y buscar entendi tu idea, la hice y claro qeu funciona!!! solo encontre un detalle, talvez sea error mio, ya que yo no soy programador ni nada por el estilo, solo busco herramientas que me ayuden en mis quehaceres y talvez pueda ser un error mio.
    El punto que vi es que si manejas cantidades sin fracciones no te agerga la frase “PESOS” al final del texto ya convertido. De otra maera, esq ue si por ejemplo pongo 123456.78 el texto sale correcto pero si pongo solo 123456 le falta al final la leyebda PESOS.

    ResponderEliminar
  53. Hola a todos, quisera ver sia lguien em puede ayudar ya que no tengo experiencia en visual, hago todos los pasos pero al escribir =letras(a1) para ver si funciona me remite al visual nuevamente y me marca el siguente error:

    Error de compilacion:

    Se esperaba: Numero de linea o etiqueta o declaracion o fin de la instruccion.

    Alguien podra ayudarme?

    ResponderEliminar
  54. convertirle en letras 1005706887

    ResponderEliminar
  55. Excelente ayuda para NO programadores. Mil gracias.

    ResponderEliminar
  56. Para todo aquello que tuvieron el mismo problema que yo con el numero 1 que decía uno pesos, 1,000 mil pesos y 1, 000,000.00 uno millos. Le agrego donde pueden hacer los cambio para que lo corrijan y se escriba correctamente un peso 00/100 un mil pesos 00/100 un millón pesos 00/100.
    Linea 32 If Trim(CadMiles) = "UN" Then Poner "UNO"
    Linea 44 If Trim(CadMillones & CadMiles & CadCientos & caddecimales) = "UN" Then Poner "UNO"
    Linea 045.Cadena = Cadena & "UNO " Poner "UN"
    La linea 55 y 56 hacer el mismo procedimiento que 44 y 45
    Linea 174 txtUnidad = "UNO" Poner "UN"
    Linea 274 txtUnidaddecimal = "UNO" Poner "UN"

    ResponderEliminar
  57. Mi campeon, es un gran trabajo lo que has hecho. Sin lugar a dudas esta excelente, ya lo aplique, y le hice las modificaciones que hace alfalfa y realmente si surte buenos resultados.
    GRACIAS

    ResponderEliminar
  58. HOLA MARIO, SOY NUEVA EN ESTO, PERO METI TU FORMULA Y ME SALE: Se esperaba: Numero de linea o etiqueta o declaracion o fin de la instruccion.

    EN QUE ME EQUIVOQUE, POR FAVOR AYUDAME

    ResponderEliminar
  59. GEMELOS2 excelente trabajaso amigo... mil gracias. Y a ti mario por subir la macro

    ResponderEliminar
  60. Hola Mario, me podrias enviar tu macros que convierte números a letras en Excel,
    hace tiempo usaba lotus 123, ahoa que necesito hacer una factura en Excel y se me complica por la presion del tiempo en mi trabajo, sino seria mucha molestia con sus cambios corregidos, Gracias

    ResponderEliminar
  61. Hola, soy principiante, seguí las instrucciones, pero tengo el siguiente mensaje y no puedo continuar "Error de compilación" "Se esperaba: número de línea, o etiqueta o declaración o fin de instrucción". Gracias por tu ayuda.

    ResponderEliminar
  62. Ya solucione mi problema, muchas gracias, haces un bien a la humanidad con esta función :grin: :razz: :razz:
    besos!

    ResponderEliminar
  63. Hola.
    Alguien me puede ayudar se los agradeceria mucho, ya realice todo el procedimiento todo esta muy bien pero cuando es una cantidad cerrada por ejemplo 20.00 solo aparece veinte, yo quisiera que apareciera veinte pesoso 00/100 MN.
    Cuando hay centavos la cantidad con letra aparece completa ejemplo 20.05 veinte pesos 05/100 MN.
    Solo ocurre cuando no hay centavos.
    Gracias por su ayuda.

    ResponderEliminar
  64. gracias por la macro despues de las modificaciones sirbe a la perfecion

    ResponderEliminar
  65. muy buena la formular pero me pasa lo siguiente la cifra es 124.334 y en letras me pone ciento veinticuatro mil trescientos treinta y tres, sorry me equivoque en el posteo de arriba la probe con otros archivos y en todo que quita 1 peso jajaja quien me puede ayudar????????

    ResponderEliminar
  66. muy buena la formular pero me pasa lo siguiente la cifra es 124.334 y en letras me pone ciento veinticuatro mil trescientos treinta y cuatro, la probe con otros archivos y en todo que quita 1 peso jajaja quien me puede ayudar????????

    ResponderEliminar
  67. Muy pero muy bueno.. gracias ... me has ahorrado 100 hrs. de transcripcion. felicidades

    ResponderEliminar
  68. Estimado, de corazon le agradezco por la colaboracion, buscando por internet encontre esta web, maravilloso el ejemplo, desde Chile un abrazo y un eterno agradecimiento

    ResponderEliminar
  69. hola.. tambien queria darte las gracias... ya que para mi tambien me ahorraste 1000 de hrs de trabajo extra, por que trabajo mucho con cifras¿¿¿, pero solo queria hacer una pregunta..

    Como puedo hacerle para que el resultado de la traduccion de numeros a letras aparezca entre parentesis, asi como cuando sean cantidades sin centavos tambien aparezcan las palabras PESOS 00/100 M.N.
    POR EJEMPLO : CUANDO PONES 1,000.00 SOLO APARECE "MIL" COMO PUEDO HACER PARA QUE TRADUZCA "UN MIL PESOS 00/100 M.N."
    ASI COMO POR EJEMPLO TIENES 2,500.00 QUE TRADUZCA PARA QUEDAR DE LA SIGUIENTE MANERA (DOS MIL QUINIENTOS PESOS 00/100 M.N.) YA QUE AL REALIZAR LA TRADUCCION SOLO PONE "DOS MIL QUINIENTOS"
    MUHCAS GRACIAS DE ANTEMANO..

    ResponderEliminar
  70. Esta super tu aporte, tiene un problemita para 1,000,000 (un millon) pero es superable.

    ResponderEliminar
  71. tengo un problema con el millon y trabajo con miles de millones pliss ayudemee necesito eso urgente

    ResponderEliminar
  72. ya realicé todo el procedimiento que se menciona, pero cuando quiero probarlo me sala #¿NOMBRE?, que podrá ser

    ResponderEliminar
  73. ya realicé todo el procedimiento que se menciona, pero cuando quiero probarlo me sale #¿NOMBRE?, que podrá ser

    ResponderEliminar
  74. Hola mario gracias por tu aporte se que funciona bien pero ami no me ha funcionado, mira copie los codigo en el visual basic en un modulo nuevo cuando lo grabo me dice ke lo debo grabar con marco ok asi lo hago pero al momento de poner la formula me dice ke error de Copilacion y me dice ke Los comentarios solamente pueden aparecer despues de end,end sub, end function o end property y al darle aceptar me abre automaticamente el visual basic y me posiciona en la siguiente linea
    Function ConvierteCifra(Texto, IsCientos As Boolean)
    Ubicacion es Lin 70, Col 4
    me la resalta en amarillo, alo mejor esta algo mal, pero ya revise una por una las lineas de esta pagina y no le encuentro el error si puedieran ayudarme se los agradeceria
    atte xhaparro_dguez

    ResponderEliminar
  75. no me pudieron ayudar bye:(27 de mayo de 2010, 10:11

    : :cry: muchas grasias no pude encontrar lo q pude bye

    ResponderEliminar
  76. Muy bueno, pero cuando llamo a esa funcion me sale la leyenda ¡NOMBRE?
    y no he podido darle solución, te agradecería me ayudes. Gracias
    Oscar

    ResponderEliminar
  77. Me sale el siguiente error, por favor ayudeme. gracias
    Error de compilacion
    Se esperaba: # de linea o etiqueta o declaracion o fin de la instruccion.

    ResponderEliminar
  78. gracias es de gran apoyo la aportacion de la funcion que estan dadando ya que fumciona muy bien

    ResponderEliminar
  79. Excelente función, pero al escribir 1,000,000.00, me sale cero. Por favor, me puede decir que hacer. Gracias.

    ResponderEliminar
  80. HOLA:
    MUY BUENA FUNCION. PERO AL PONER 1 o 1,000,000, NO ME SALE NADA.
    COMO LO ARREGLO. GRACIAS. :roll:

    ResponderEliminar
  81. NO ME SALE!!!! NO SE XQ.... SERIA MAS FACIL SI ALGUIEN PUEDE MANDARME UN FORMATO YA HECHO!!! JEJEJE SALUDS

    ResponderEliminar
  82. hey maestro la formula es un exito ya la estoy usando y a funcionado bien pero yo quisiera saber si le podar agregar la palabra con te explico

    las letras salen asi
    un mil doscientos veinticinco 56/100
    y yo necesito asi
    un mil doscientos veinticinco con 56/100
    gracias y talvez puedes ayudarme

    ResponderEliminar
  83. :?: Mil gracias por la fórmula, es excelente. Pero tengo el problema que al poner 1.00 o 1,000,000.00 no hace nada la función. Me podrias ayudar. Gracias.

    ResponderEliminar
  84. Hola muy buenos tus aportes para que los que somos usuarios de Excel pero que no contamos con una buena base en sistemas podamos mejorar nuestro desempeño.
    Tengo un problema que tal vez me puedas solucionar:
    nececito una funcion que redondee en el numero que yo fije. Para que cuando un numero cualquiera tenga decimales mayores a 25 la funcion me de el numero mayor.
    Por esiguiente y si es menor el numero entero menor.
    Por ejemplo que 1.20 de como resultado 1 y que 25,30 de como resultado 26.
    Muchas gracias, espero tu ayuda. saludos

    ResponderEliminar
  85. Hola:
    Soy juan del d.f. seguí el paso a paso pero cuando ingreso el número en una celda y en otra le doy la funcion =letra(i6) por ejemplo me dice que hay un error en la etiqueta y se espera una instrucción final tengo el office 2003 que necesito hacer para que funcione

    ResponderEliminar
  86. Necesito saber como puedo realizar en excel que en una determinada colunma establecida pueda poner el famoso texto predictivo, osea al colocar las letras vaya filtrando las palabras asociadas a esas letras, de una determinada lista de nombres.
    Desde ya agradezco su colaboracion. Atte

    ResponderEliminar
  87. hola disculpen una forma facil de poder convertir numeros a letras en exel es que no puedo o que me puedan mandar un ejemplo?

    ResponderEliminar
  88. una pregunta mi amigo...la mia pienso es mas sencilla...cmo se puede poner las cantidades en numero pero en " ()" parentesis.

    ResponderEliminar
  89. Que macro tan util , realmente me ayudo mucho , muchas Gracias!!!

    ResponderEliminar
  90. como hago para miles de millones ejemplo (12.459.000.000)

    ResponderEliminar
  91. Muy buen trabajo muy util.saludos!

    ResponderEliminar
  92. digite todo el programa pero me marca errores, no sus programador por ,lo tanto no entiendo que esta mal. si me puedes ayudar muchas gracias

    ResponderEliminar
  93. Quisiera transforma las notas a texto:
    Ejemplo
    nota texto
    6,5 seis, cinco
    3,0 tres , cero
    4,1 cuatro, uno etc
    Sólo debo usar desde la nota uno a la nota siete.
    Agradecería muchísimo vuestra colaboración. Un agradecido Profesor

    ResponderEliminar
  94. AMIGO, MUY BUEN APORTE, NECESITO QUE LAS LA FORMULA ME BOTE EXACTAMENTE ASI..... GRACIAS

    las letras salen asi
    un mil doscientos veinticinco 56/100
    y yo necesito asi
    un mil doscientos veinticinco con 56/100
    gracias y talvez puedes ayudarme

    ResponderEliminar
  95. amigo que salga asi porfas, si puedes me envias un mail

    las letras salen asi
    un mil doscientos veinticinco 56/100
    y yo necesito asi
    un mil doscientos veinticinco con 56/100
    gracias y talvez puedes ayudarme

    ResponderEliminar
  96. Muchas Gracias, me ahorraste horas de teclear

    ResponderEliminar
  97. muy bueno el aporte pero no lo puedo ejecutar ya que me sale lo siguiente cuendo le aplico la formula o funcion que dices ERROR DE COMPILACION SE ESPERABA NUMERO DE LINEA O ETIQUETA O DECLARACION O FIN DE LA INSTRUCCION te voy a agradecer mucho el que me ayudes a corregirlo para poderlo usar, de antemano te lo agradezco infinitamente :neutral:

    ResponderEliminar
  98. hola que tambien me aparece Error de compilacion se esperaba numero de la linea ......por favor me podrias ayudar demas que luego que pego el scrip como guardo o ejecuto el macro , por favor ayuda

    ResponderEliminar
  99. HOLA LA FORMULA ESTA EXCELENTE PERO SOLO APLICA EN CANTIDADES CON DECIMALES?, EJEMPLO: SI LA CANTIDAD ES $ 215.12 PONE: DOSCIENTOS QUINCE PESOS 12/100 M.N. PERO SI LA CANTIDAD ES: $ 215.00 SOLO PONE: DOSCIENTOS QUINCE, COMO HAGO PARA QUE AUN SIN DECIMALES PONGA LA TERMINACION: PESOS 00/100 M.N.?

    SALUDOS Y GRACIAS

    LAURA HERRERA

    ResponderEliminar
  100. Antonio Liñan Soto22 de marzo de 2011, 9:26

    LA FORMULA ES MUY BUENA PERO UNA OBSERVACION CUANDO LA CANTIDAD ES CON DECIMALES APARECE TODO COMPLETO Y CON EL NOMBRE DE LA MONEDA, PERO CUANDO LA CANTIDAD SALE SIN DECIMAL NO APARECE COMO POR EJEMPLO: 00/100 NUEVO SOLES QUE ES LO QUE SE TIENE QUE PONER DE TODAS MANERAS EN LA FACTURA ESPERO ME AYUDEN CON ESTA OBSERVACION, MUCHAS GRACIAS...

    ResponderEliminar
  101. Muchas felicidades esta padrisima, me sirvio y muchooooo :razz:

    ResponderEliminar