Convertir números a texto

última versión 20160127

Una de las funciones que más se echa en falta en Excel es una que permitiese convertir un número en letras, me explico, que permitiese expresar un número que se le facilitase como argumento como un texto.

Especialmente indicado para esos casos de ...
total: 12021.35
asciende el presente presupuesto a la cantidad de doce mil veintiun euros con treinta y cinco céntimos

Supongo que las particularidades de cada idioma hacen que esto no sea una prioridad para Microsoft, también hacen que no sea inmediato adaptar una solución al español de las que existen en diferentes idiomas.

Hace tiempo, con la llegada del Euro, tuve que adaptar una función inicialmente pensada para pesetas (femenino y sin decimales), le añadí algunos argumentos para poder adaptarlo a cualquier unidad entera y fraccionaria, en masculino y femenino, porque el español tienen género para todas las cosas.

La conclusión de todo ello es la función que adjunto, y que espero que resulte de utilidad a los visitantes de esta web.

 

Los argumentos de la función NumLetra son los siguientes:

 

  • Número el número a convertir, OBLIGATORIO
  • NumDecimales número de decimales a considerar para pasar a texto. Como a veces el número provendrá de una operación, es importante este redondeo (por defecto cero)
  • Unidad nombre de la unidad principal, se pondrá detrás de la parte entera (euros, dólares, pesos, coronas, ...)
  • UdFracc nombre de la unidad fraccionaria, se pondrá detrás de los decimales (céntimos, centavos, centésimas, milésimas, ...)
  • Conexión texto que separará la parte entera de la decimal (por ejemplo, tres euros "CON" quince céntimos, cuatro "coma" tres)
  • Cero tratamiento a dar cuando tenemos un cero ( cero euros con diez céntimos, o simplemente diez céntimos) 0: 0.00->""; 1: 0.00->"cero unidades con cero céntimos";  2: 0.00 0->"cero unidades"; 3: 0.00->"cero céntimos" (por defecto: 0)
  • UD_un_uno_a género para la unidad principal (cuarenta y un, cuarenta y uno, cuarenta y una) 1: 1->"un" 2: 1->"uno" 3: 1->"una" (por defecto: 1)
  • Fracc_un_uno_a género para la unidad fraccionaria 1: 1->"un" 2: 1->"uno" 3: 1->"una" (por defecto: 1)
  • UnMil permite indicar el tratamiento cuando tenemos una unidad de millar. Verdadero 1000->"un mil", Falso 1000->"mil" 
  • Millar_un_uno_a género para los millares (cuarenta y un mil, cuarenta y uno mil, cuarenta y una mil) 1: 1->"un" 2: 1->"uno" 3: 1->"una" (por defecto: 1)
 

Para comprender mejor el funcionamiento tal vez unos ejemplos resulten más claros que cualquier explicación:

ejemplos generales

Ejemplos de la función combinada con otros textos

Si no sabes qué hacer con el archivo que se descarga mira esta página donde se explica qué hacer con un archivo .bas

Si te resulta de gran utilidad y quieres agradecérmelo de alguna manera, siempre puedes invitarme a algo

y por supuesto si necesitas más, tal vez te interese Ya sé Excel, pero necesito más

AdjuntoTamaño
File numeroaletra20160127.rar3.25 KB

Temática: 

Etiquetas: 

Comentarios

Re: Convertir números a texto

Imagen de Rafa GP
Quiero agradecerte esta función que me ha ayudado bastante, solo quisiera, si es posible que me dijeses, como evitar que salga la palabra "un" delante de los miles. Ejemplo, si pongo 1250 me sale "un mil doscientos cincuenta" y querria que saliera "mil doscientos cincuenta" Si puedes ayudarme, sería estupendo, gracias por adelantado Rafa GP

nueva versión

Imagen de pacomegia

Acabo de corregir éste problema. Versión 20071003 (año mes día)

He añadido la fecha al final del nombre del archivo para identificar la versión. He hecho bastantes pruebas, pero si detectas algún otro problema no dudes en comentarlo aquí para resolverlo.

------
Ya sé Excel, pero necesito más ahora en pdf

 

 

------
Ya sé Excel, pero necesito más.

Re: nueva versión

Imagen de alexxandroz

SALUDOS desde mi cubil felino!

Felicidades por este estupendo trabajo Paco, me ha hecho tanto bien que he decidido invitarte algo pronto!

Ahora con mi duda; radico en méxico donde para la moneda usamos el siguiente formato;

$3,530.40 (SON TRES MIL QUINIENTOS TREINTA PESOS 40/100 M.N.)

¿cómo podría hacer que me diera este resultado tu función?

----------------------------

Gracias de antemano!

EXCEL-ENTUSIASTIC!

 

CARPE DIEM!

Re: nueva versión

Imagen de JoaoM

Casi casi me dormi leyendo casi todo el tema.

 

Resulta que tengo un Modulo con una funcion para pasa rnumero a letras con solo 70 lineas y llega hasta 999.999.999.999.999,00

 

Por ahí tengo otra de solo 57 lineas y llegas hasta 921.999.999.999.999,00

género y número

Imagen de pacomegia

seguro que se puede optimizar

¿pero esas alternativas también pueden escribir el resultado con género y número?

41321000 

cuarenta y UN millones trescientAS veintiUNA mil líneas

 

------
Ya sé Excel, pero necesito más.

Re: género y número

Imagen de visitante

Talves si, tendria un expert oen la materia verificar en las lineas

Te lo dejo acá

'Función programada inicialmente por Héctor Miguel (un gran experto en la materia)

Function EnLetras(Valor, Optional ByVal Tipo As Byte = 1) As String 'funcion Principal
  If Not IsNumeric(Valor) Then
    EnLetras = "¡ La referencia no es valor o... 'excede' la precisión !!!":
Exit Function
  End If: Dim Moneda As String, Fracs As String, Cents As Integer
  If Int(Abs(Valor)) = 1 Then Moneda = " bolivar" Else Moneda = " bolivares"
  If Right(Letras(Abs(Int(Valor))), 6) = "illón " Or _
Right(Letras(Abs(Int(Valor))), 8) = "illones " Then Moneda = "de" & Moneda
  Cents = Application.Round(Abs(Valor) - Int(Abs(Valor)), 2) * 100
  If Cents = 1 Then Fracs = " centimo" Else Fracs = " centimos"
  If Cents = 0 Then Fracs = "" Else Fracs = " con " & Letras(Cents) & Fracs
  EnLetras = Letras(Int(Abs(Valor))) & Moneda & Fracs
  If Valor < 0 Then EnLetras = "menos " & EnLetras
  If Tipo = 2 Then EnLetras = UCase(EnLetras) 'TODO MAYUSCULAS '
  If Tipo = 3 Then EnLetras = StrConv(EnLetras, vbProperCase) '1ª letra MAYUSCULA '
  If Tipo = 4 Then EnLetras = UCase(Left(EnLetras, 1)) & Mid(EnLetras, 2) 'SOLO la 1ª letra de 1ª palabra en mayuscula'
  EnLetras = "(" & EnLetras & ")"
End Function
Private Function Letras(Valor) As String ' Función Auxiliar [uso 'exclusivo'de la funcion 'principal'] '
  Select Case Int(Valor)
    Case 0: Letras = "cero"
    Case 1: Letras = "un"
    Case 2: Letras = "dos"
    Case 3: Letras = "tres"
    Case 4: Letras = "cuatro"
    Case 5: Letras = "cinco"
    Case 6: Letras = "seis"
    Case 7: Letras = "siete"
    Case 8: Letras = "ocho"
    Case 9: Letras = "nueve"
    Case 10: Letras = "diez"
    Case 11: Letras = "once"
    Case 12: Letras = "doce"
    Case 13: Letras = "trece"
    Case 14: Letras = "catorce"
    Case 15: Letras = "quince"
    Case Is < 20: Letras = "dieci" & Letras(Valor - 10)
    Case 20: Letras = "veinte"
    Case Is < 30: Letras = "veinti" & Letras(Valor - 20)
    Case 30: Letras = "treinta"
    Case 40: Letras = "cuarenta"
    Case 50: Letras = "cincuenta"
    Case 60: Letras = "sesenta"
    Case 70: Letras = "setenta"
    Case 80: Letras = "ochenta"
    Case 90: Letras = "noventa"
    Case Is < 100: Letras = Letras(Int(Valor \ 10) * 10) & " y " & Letras(Valor Mod 10)
    Case 100: Letras = "cien"
    Case Is < 200: Letras = "ciento " & Letras(Valor - 100)
    Case 200, 300, 400, 600, 800: Letras = Letras(Int(Valor \ 100)) & "cientos"
    Case 500: Letras = "quinientos"
    Case 700: Letras = "setecientos"
    Case 900: Letras = "novecientos"
    Case Is < 1000: Letras = Letras(Int(Valor \ 100) * 100) & " " & Letras(Valor Mod 100)
    Case 1000: Letras = "mil"
    Case Is < 2000: Letras = "mil " & Letras(Valor Mod 1000)
    Case Is < 1000000: Letras = Letras(Int(Valor \ 1000)) & " mil"
      If Valor Mod 1000 Then Letras = Letras & " " & Letras(Valor Mod 1000)
    Case 1000000: Letras = "un millón "
    Case Is < 2000000: Letras = "un millón " & Letras(Valor Mod 1000000)
    Case Is < 1000000000000#: Letras = Letras(Int(Valor / 1000000)) & "  millones  "
      If (Valor - Int(Valor / 1000000) * 1000000) _
        Then Letras = Letras & Letras(Valor - Int(Valor / 1000000) * 1000000)
    Case 1000000000000#: Letras = "un billón "
    Case Is < 2000000000000#
      Letras = "un billón " & Letras(Valor - Int(Valor / 1000000000000#) * 1000000000000#)
    Case Else: Letras = Letras(Int(Valor / 1000000000000#)) & " billones "
      If (Valor - Int(Valor / 1000000000000#) * 1000000000000#) _
        Then Letras = Letras & " " & Letras(Valor - Int(Valor / 1000000000000#) * 1000000000000#)
  End Select
End Function

 

Voy buscand oel de 50 y algo de lineas para dejarlo aca tambien

Re: género y número

Imagen de JoaoM

Mis 2 mensages anteriores , dicen; Enviado por visitante, estando yo registrado y conectado como JoaoM (mi nick)

 

Lo otro que quiero pedirte paco; si por algo haces alguna modificacion a alguna de los 2 macros o a las 2 PARA MEJORARLAS sin que aumente muchas lineas, sube dichas macros para bajarlas con tu enmienda, siempre y cuando sea para que sirvan para los 2 generos ¿seguro?

 

Gracias

Re: nueva versión

Imagen de visitante

Dejo con 60 lineas

 

Function numletr(value)
  If Int(value) = 1 Then
  numletr = "un bolivar con " & Int(Round(((value - Int(value)) * 100))) & "/Centimos"
  Else
   numletr = Num2Text(value) & " Bolivares con " & Int(Round(((value - Int(value)) * 100))) & "/Centimos"
End If
End Function

Public Function Num2Text(ByVal value As Double) As String
fraccion = value - Int(value)
value = Int(value)
    Select Case value
        Case 0: Num2Text = "Cero"
        Case 1: Num2Text = "Uno"
        Case 2: Num2Text = "Dos"
        Case 3: Num2Text = "Tres"
        Case 4: Num2Text = "Cuatro"
        Case 5: Num2Text = "Cinco"
        Case 6: Num2Text = "Seis"
        Case 7: Num2Text = "Siete"
        Case 8: Num2Text = "Ocho"
        Case 9: Num2Text = "Nueve"
        Case 10: Num2Text = "Diez"
        Case 11: Num2Text = "Once"
        Case 12: Num2Text = "Doce"
        Case 13: Num2Text = "Trec"
        Case 14: Num2Text = "Catorce"
        Case 15: Num2Text = "Quince"
        Case Is < 20: Num2Text = "Dieci" & Num2Text(value - 10)
        Case 20: Num2Text = "Veite"
        Case Is < 30: Num2Text = "Veinti" & Num2Text(value - 20)
        Case 30: Num2Text = "Treinta"
        Case 40: Num2Text = "Cuarenta"
        Case 50: Num2Text = "Cincuenta"
        Case 60: Num2Text = "Sesenta"
        Case 70: Num2Text = "Setenta"
        Case 80: Num2Text = "Ochenta"
        Case 90: Num2Text = "Noventa"
        Case Is < 100: Num2Text = Num2Text(Int(value \ 10) * 10) & " y " & Num2Text(value Mod 10)
        Case 100: Num2Text = "Cien"
        Case Is < 200: Num2Text = "Ciento " & Num2Text(value - 100)
        Case 200, 300, 400, 600, 800: Num2Text = Num2Text(Int(value \ 100)) & "cientos"
        Case 500: Num2Text = "Quinientos"
        Case 700: Num2Text = "Setecientos"
        Case 900: Num2Text = "Novecientos"
        Case Is < 1000: Num2Text = Num2Text(Int(value \ 100) * 100) & " " & Num2Text(value Mod 100)
        Case 1000: Num2Text = "Mil"
        Case Is < 2000: Num2Text = "Mil " & Num2Text(value Mod 1000)
        Case Is < 1000000: Num2Text = Num2Text(Int(value \ 1000)) & " Mil"
            If value Mod 1000 Then Num2Text = Num2Text & " " & Num2Text(value Mod 1000)
        Case 1000000: Num2Text = "Un _Millón"
        Case Is < 2000000: Num2Text = "Un Millón " & Num2Text(value Mod 1000000)
        Case Is < 1000000000000#: Num2Text = Num2Text(Int(value / 1000000)) & " Millones"
            If (value - Int(value / 1000000) * 1000000) Then Num2Text = Num2Text & " " & Num2Text(value - Int(value / 1000000) * 1000000)
        Case 1000000000000#: Num2Text = "Un Billón"
        Case Is < 2000000000000#: Num2Text = "Un Billón " & Num2Text(value - Int(value / 1000000000000#) * 1000000000000#)
        Case Else: Num2Text = Num2Text(Int(value / 1000000000000#)) & " Billones"
            If (value - Int(value / 1000000000000#) * 1000000000000#) Then Num2Text = Num2Text & " " & Num2Text(value - Int(value / 1000000000000#) * 1000000000000#)
        End Select
  End Function

Nùmero con letra dollres

Imagen de Guadalupe

Encontre ese archivo y agradezco mucho el apoyo, 

sin embargo, me pasa algo similar, como lo cambias a dolares, llevo el siguiente avance, pero ya me atore en la cuestion del seguimiento despues del nùmero 15, espero el apoyo que puedan brindarme, gracias.

End If: Dim Moneda As String, Fracs As String, Cents As Integer

  If Int(Abs(Valor)) = 1 Then Moneda = " dollar" Else Moneda = " dollares"

  If Right(Letras(Abs(Int(Valor))), 6) = "illón " Or _

Right(Letras(Abs(Int(Valor))), 8) = "illones " Then Moneda = "de" & Moneda

  Cents = Application.Round(Abs(Valor) - Int(Abs(Valor)), 2) * 100

  If Cents = 1 Then Fracs = " cent" Else Fracs = " cents"

  If Cents = 0 Then Fracs = "" Else Fracs = " with " & Letras(Cents) & Fracs

  EnLetras = Letras(Int(Abs(Valor))) & Coin & Fracs

  If Valor < 0 Then EnLetras = "menos " & EnLetras

  If Tipo = 2 Then EnLetras = UCase(EnLetras) ' TODO EN MAYUSCULAS '

  If Tipo = 3 Then EnLetras = StrConv(EnLetras, vbProperCase) ' Todo Como Nombre Propio '

  If Tipo = 4 Then EnLetras = UCase(Left(EnLetras, 1)) & Mid(EnLetras, 2) 'Primera letra en mayuscula SOLAMENTE '

  EnLetras = "(" & EnLetras & ")"

End Function

Private Function Letras(Valor) As String ' Función Auxiliar [uso 'exclusivo'de la funcion 'principal'] '

  Select Case Int(Valor)

    Case 0: Letras = "zero"

    Case 1: Letras = "one"

    Case 2: Letras = "two"

    Case 3: Letras = "three"

    Case 4: Letras = "four"

    Case 5: Letras = "five"

    Case 6: Letras = "six"

    Case 7: Letras = "seven"

    Case 8: Letras = "eight"

    Case 9: Letras = "nine"

    Case 10: Letras = "ten"

    Case 11: Letras = "eleven"

    Case 12: Letras = "twelve"

    Case 13: Letras = "thirteen"

    Case 14: Letras = "fourteen"

    Case 15: Letras = "fifteen"

    Case Is < 20: Letras = "dieci" & Letras(Valor - 10)

    Case 20: Letras = "veinte"

    Case Is < 30: Letras = "veinti" & Letras(Valor - 20)

    Case 30: Letras = "treinta"

    Case 40: Letras = "cuarenta"

no puedo insertar modulo bas

Imagen de Mauro

Hola Pacomegia, veo que realizaste un modulo para convertir numeros de moneda a texto, soy nuevo en esto, descargue tu modulo, tengo excel 2016 en una mac y no logro ver la opcion de insertar modulo, agradeceria tu ayuda. tambien me gustaria saber como convertir numeros de medidas a letras, ejemplo: 10,20 m ( diez metros con 20 centimetros). gracias y saludos

Esta función convierte

Imagen de pacomegia

Esta función convierte números a texto (no sólo monedas). en los argumentos de la función le puedes indicar las unidades, pueden ser euros, dólares, pesos, soles, metros, horas, días, tomates o pimientos.

Son estos argumentos de la función:

  • Unidad nombre de la unidad principal, se pondrá detrás de la parte entera (euros, dólares, pesos, coronas, ...)
  • UdFracc nombre de la unidad fraccionaria, se pondrá detrás de los decimales (céntimos, centavos, centésimas, milésimas, ...)

Sobre cómo importar un módulo bas en VBA, una vez que abras el editor de Visual Basic es prácticamente igual en Mac que en Windows

http://www.necesitomas.com/archivo_bas_excel

Aunque parece que la versión 2016 para mac tiene algunas limitaciones en el editor de vba

Si no puedes importar el archivo directamente, puedes abrirlo con un editor de texto y copiar el contenido y pegarlo en módulo que crees a mano.

 

------
Ya sé Excel, pero necesito más.

Re: Convertir números a texto

Imagen de visitante

12.459.698         1048,896        15.970,452           101.596.789,45      

789.985.620        75.986.100      200.000.000.000    147.125.8  

0.458      1.489.369      47.896.300.000       25.000.500.000

como se escriben en letra estas cifras   

Re: Convertir números a texto

Imagen de visitante

en el caso de mexico como le hago para insertar una palabra antes de los decimales ej:

11,500.50

once mil quiniento pesos 50/100

 

saludos

Re: Convertir números a texto

Imagen de visitante

El Utilizar la preposicion UN en la oracion de "un mil docientos cincuenta" es lo correcto, otro ejemplo es "Un millon", no se dice "millon" solamente.

NUMERO A LETRAS POR SEPARADO

Imagen de JULIOBAUTISTA

Buenos dias Francisco, me puede ayudar con la inquietud que tengo de convertir nuemero a letras pero por separado .  ejemplo:  011124 =  CERO UNO UNO UNO DOS CUATRO .   gracias de antemano por tu genealidad amigo . saludos desde El Salvador.

 

Re: Convertir números a texto

Imagen de Rafa GP
Muchas gracias por arreglarlo, no se si me vas a mandar a paseo,pero ahora con la última modificación el problema es que cuando pones 1 solo sale la unidad elegida, sin embargo cuando pones 1.000.000 si sale "un millón". Ejemplo. 1 = "euros" (euros es la unidad elegida por mí) y debiera salir "un euro" De todas manera con lo que ya me has proporcionado, me ahorras un montón de trabajo, es muy raro que utilice solo el "1", pero si no es muy complicado para ti arreglarlo, quedaría perfecto. De nuevo muchas gracias. Rafa GP

problema con valores por defecto

Imagen de pacomegia

No te mando a paseo, porque con los fallos que detectas la función queda cada vez mejor. Gracias.

Parece que había un problema con el valor por defecto del argumento UD_un_uno_a

He creado una nueva versión 20071004 que soluciona este problema.

------
Ya sé Excel, pero necesito más ahora en pdf

 

 

------
Ya sé Excel, pero necesito más.

me ahorró mucho tiempo

Imagen de juandudas
Muchas gracias Paco por la función. Cada vez que tengo que cambiar los precios de una oferta, por ejemplo para aplicar un descuento de un 5% a todos los precios, antes los tenía que escribir de nuevo en letra uno por uno. Ahora se hace sólo y sin posibilidad de equivocarte. Sólo lamento no haberlo tenido antes, porque cada vez que me acuerdo del tiempo que he perdido con esto...

mi cabeza es un mar de dudas

Re: Convertir números a texto

Imagen de MIGUEL10

Una macro con mucha utilidad.

He probado la versión 20071004 y funciona bien, salvo para números como :

1.000.000.000 = UN MIL EUROS

2.000.000.000 = DOS MIL EUROS

1.111.111.111 = UN MIL CIENTO ONCE MILLONES CIENTO ONCE MIL CIENTO ONCE EUROS. En este caso sobraría el UN del principio.

Espero que te ayude a mejorarla.

Saludos

 

 

nueva versión

Imagen de pacomegia

He actualizado la versión de la función para corregir estos problemas que me comentas.

la versión actual es la de la fecha de hoy 20080316

Muchas gracias por tus comentarios


 

------
Ya sé Excel, pero necesito más ahora en pdf

 

------
Ya sé Excel, pero necesito más.

Re: Convertir números a texto

Imagen de coriano

Coriano Soy un novato y no sé que hacer con el adjunto además me pregunto si los decimales pueden ir entre paréntesis Ejplo.    8.23   Ocho (23/100) los números que manejo van del 1 al 10 como máximo

Coriano

Re: Convertir números a texto

Imagen de pacomegia
El archivo .bas contiene una función personalizada para Excel y para que funcione hay que importarlo al libro en que lo vayas a utilizar, o bien a tu libro de macros personal para que esté disponible en todos los libros que utilices.
aquí tienes más información:
 
Respecto de convertir únicamente la parte entera a texto, indica en la función que no quieres decimales (cero decimales o no pongas ningún argumento), luego hay que añadirle la parte decimal, por ejemplo, suponiendo que el número está en la celda A1, concatena los textos para conseguir el resultado deseado:
 
=CONCATENAR(NumLetra(A1);" (";TEXTO((A1-ENTERO(A1))*100;"00");"/100)")
 
Esto funciona si la función NumLetra está en el mismo libro.

si la función está en tu libro de macros personal, puede tener un aspecto parecido a este:

=CONCATENAR(PERSONAL.XLSB!NumLetra(A1);" (";TEXTO((A1-ENTERO(A1))*100;"00");"/100)")

------
Ya sé Excel, pero necesito más ahora en pdf

 

------
Ya sé Excel, pero necesito más.

Re: Convertir números a texto

Imagen de coriano

Soy coriano nuevamente y he tenido el siguiente problema utilizo la fórmula concatenar que me indicaste pero con algunos números me sale la palabra "un" , por ejplo. 4.55 cuatro  un 55/100;     8.9 ocho un 90/100. No necesito ninguna palabra entre el entero y los decimales. Los números que manejo van desde el 1 al 10 como máximo. Es para calificaciones de notas. Desde ya gracias.

Coriano

Re: Convertir números a texto

Imagen de pacomegia

Se trataba de un fallo con el redondeo, que cuando no se indicaban decimales no sumaba bien. En cualquier caso no te interesa redondear, sino utilizar la parte entera del número.

Para evitar este redondeo de la función, genera el texto sólo de la parte entera de la nota, mediante la función ENTERO

algo como esto.

=CONCATENAR(PERSONAL.XLSB!NumLetra(ENTERO(A1));" (";TEXTO((A1-ENTERO(A1))*100;"00");"/100)")

De todas formas, he puesto otra nueva versión corregida 20080401

------
Ya sé Excel, pero necesito más ahora en pdf

 

------
Ya sé Excel, pero necesito más.

Re: Convertir números a texto

Imagen de coriano

Pacomegia eres un genio. Con tu ayuda resolví algo que no pensé que siendo un novato podía hacerlo. Muy agradecido quedó "IMPECABLE".

Coriano

Re: Convertir números a texto

Imagen de jasr

Cambio los parametros de decimales a 2 y no me los convierte a texto... solo convierte la parte entera.... que tengo que modificar mas?

Re: Convertir números a texto

Imagen de Pleiades

Hola!

Que tal?

Soy un poco nueva en ésto de introducir datos en el macro. He intentado acceder al archivo.bas pero no me deja. Metí en el VBàsic un código de esos de los que comentais en los foros pero me pasa los números a pesos (en letras, claro) y otro me lo pasaba pero en pesetas. 

Así que me gustaría saber si alguien me podría pasar la fórmula buena para que me salga en euros, ya me entendeis, en masculino y que lea los decimales (los céntimos).

Os lo agradecería porque con tantos códigos y tantas fórmulas me estoy volviendo loca ;- |)

Muchísimas gracias.

                                                                                                                 Pleiades.

unos ejemplos

Imagen de pacomegia

Hola

Pienso que en vez de explicarlo, tal vez sea más práctico que te adjunte un archivo con algunos ejemplos.

He puesto diferentes casos, con masculinos y femeninos. Si necesitas alguna aclaración no dudes en preguntar.

------
Ya sé Excel, pero necesito más ahora en pdf

 

------
Ya sé Excel, pero necesito más.

Gracias

Imagen de Ernesto

Se que esto es un tema muy viejo, pero muchas gracias por el archivo lo necesitaba bastante, la mayoria de los que encontraba no servian para montos grandes

Re: Convertir números a texto

Imagen de Pleiades

"Toc, toc" ... se puede?

Hola que tal!

Vale me estoy dando cuenta que soy bastante novatilla con el excel. He intentado buscar la manera de instalar las fórmulas que me pasaste en documentos que ya tenía hechos, lo he intentado en documentos nuevos, pero no hay manera, me sale un mensaje que dice " la función no tiene argumento".

Que hago para poder instalarlo en excel?

Muchas gracias por ayudarme.

Pleiades.

una pregunta

Imagen de pacomegia

Depende del uso que vayan a tener los archivos en los que utilices esta función.

¿Son archivos que sólo utilizas tú en tu ordenador, o los vas a enviar a otras personas o los compartes en la red de una oficina?

En el primer caso, si sólo lo vas a utilizar tú, yo guardaría la función en el libro de macros personal, mira en este enlace más sobre cómo crear tu libro de macros personal
 

En el segundo caso, si varias personas van a utilizar el archivo en ordenadores diferentes, tal vez lo mejor sea que guardes la función en el propio archivo, para que esté disponible allá donde vaya el libro sin tener que obligar a terceras personas a cambiar sus configuración, ni a tener que añadir cosas a su libro de macros personal.

En cualquier caso, aquí te explico qué hacer con el archivo .bas que contiene la función


 

------
Ya sé Excel, pero necesito más ahora en pdf

 

------
Ya sé Excel, pero necesito más.

Re: Convertir números a letras (Libro de macros personal)

Imagen de Pleiades

Hola Paco Megia!
 
Mira, cuando tú lo explicas parece tan sumamente fácil que ya me había hecho ilusiones de que ya lo tenía, pero no sé lo que debo hacer mal porque no me sale la fórmula. He seguido los pasos para hacerlo en libro de macros personal:
 Herramientas>Macros>grabar macro
en la lista desplegable: Libro de macros personal
Selecciono la opción Libro de macros personal.
Escribo una letra en la celda A1, he puesto la letra A                                                                         Detengo la grabación de la macro pulsando el botón "detener gabación", que tiene una imagen de un cuadrado, como el stop de un reproductor de música.
Y ... ya está.                                                                                                                                                         Para ver la macro que he grabado, accedo al editor de Visual Basic, Alt F11 y en el explorador de proyectos aparece Personal.xls que es el libro de macros personal. Abro módulos.  Ahí sale:
Sub Macro1()
'
' Macro1 Macro
' Macro grabada el 12/06/2008 por (mi nombre de usuario)
'
'
    Range("A1").Select
    ActiveCell.FormulaR1C1 = "A"
    Range("A2").Select
End Sub
Pues con todo ésto, la formula no esta para poder pasar los números a letras.
Ya te dije que era un poco novata pero creo que no tiene que ser tan dificil, hay algo que me falta, seguro, verdad?
Me ayudarás por favor?
Muchas gracias por todo.
Pleiades.

Ahora importa el archivo bas

Imagen de pacomegia

Ya tienes creado el libro de macros personal. Ahora sólo necesitas poner en él la función que convierte los números a letras.

para ello tendrás que importar al libro de macros personal el archivo .bas que contiene la función.

En el editor de visual Basic, sobre el libro personal.xls, selecciona importar archivo y selecciona el archivo numeroaletra.bas que has descargado de esta página

suerte.

------
Ya sé Excel, pero necesito más ahora en pdf

 

------
Ya sé Excel, pero necesito más.

Re: Convertir números a texto

Imagen de Pleiades

Vale!!!

Ya lo he hecho, y sabes qué?

FUNCIONA!!! Ahora solo falta que me lo pase a euros.

He marcado 123,56 y me pone ciento veinticuatro.

Yo quiero:  ciento veintitres euros con cincuenta y seis céntimos.

Bueno, ya me estoy acercando, espero conseguirlo antes de que me salgan más canas! jejeje

A ver si ésto tiene solución Paco Megia!

Muchas gracias, eres un sol.

Pleiades.

argumentos

Imagen de pacomegia

si no le pones argumentos a la función por defecto redondea sin decimales y no tiene unidades.

para que sea como dices, prueba lo siguiente:

NumLetra(celda_con_tu_número;2;"euros";"céntimos";"con")

el primer argumento es el número a convertir

el segundo argumento el número de decimales

y luego vienen las unidades para la prte entera y decimal y la palabra para unirlas

 

gracias por lo de sol, poca cosa al lado de las Péyades

------
Ya sé Excel, pero necesito más ahora en pdf

 

------
Ya sé Excel, pero necesito más.

Re: Convertir números a texto

Imagen de Pleiades

Hola!

Que tal el fín de semana?

Bueno, todo lo que me has explicado ha salido bien, ahora solo falta que las letras me salgan en mayúsculas y todo será "perfecto". He intentado combinar la fórmula de pasar de "num. a letras" con la fórmula de "pasar a mayúsculas" pero  nada, no me dejaba.

Que puedo hacer paco Megia?

Muchísimas gracias.

Pleiades. 

MAYUSC

Imagen de pacomegia

En teoría si pones todo el conjunto que pasa de número a letra como argumento de la función MAYUSC sí debería pasarlo todo a mayúsculas.

algo parecido a esto, bueno, con los argumentos que necesites

=MAYUSC(PERSONAL.XLSB!NumLetra(celda_con_tu_número;2;"euros";"centimos";"con"))
 

Prueba con esto y si no funciona coméntame qué error te aparece.

------
Ya sé Excel, pero necesito más ahora en pdf

 

------
Ya sé Excel, pero necesito más.

Re: MAYUSC

Imagen de iguana

Hola disculapa la molestia esta funcion me seria de mucha ayuda pero no encuentro como aplicarla, es decir no se que cambiar en la macro para que tome los valores de donde lo necesito ni tampoco se como ejecutarla, el problema es que tampoco tengo mucho conocimiento acerca de las macros, si no es demasiada molestia me podrias enviar un archivo de que tendria que cambiar y como hacer para ejecutar la macro.

Desde ya muchisimas gracias

Re: Convertir números a texto

Imagen de Pleiades

FANTÁSTICO!!!

Va perfecto! Oye, muchísimas gracias por todo. Si tengo dudas sobre alguna otra cosa ya se donde acudir.

Muchas gracias por todo, eres un SOL !!!

Pleiades.

Re: Convertir números a texto

Imagen de Daniel_86

hola, estaba leyendo atentamente sus comentarios, pero les tengo una pregunta - desafío xd

 

miren el archivo adjunto,

 

como puede quedar correctamente escrito todo sin que diga las palabras como cabernicola xd ?
 

ojala puedan ayudarme, me he quebrado la cabeza en hacer lo que falta hacer

 

saludos

Puedes corregir esto porfa

Imagen de solid_snake
Mira a mi me parece excelente lo que has hecho y solo te hago una pequeña observacion: cuando coloco 1 me gustaria que apareciera "uno" en lugar del "un" que aparece normalmente si me puedes ayudar me harias un gran favor pero si no igual se te agradece (^_^)

Re: Puedes corregir esto porfa

Imagen de pacomegia

para este caso puse en la función numletra un par de argumentos (los dos últimos argumentos de la función) que controlan en género tanto de la parte entera como de la parte decimal, estos argumentos son;

UD_un_uno_a   (para la parte entera)  y    Fracc_un_uno_a (para la parte fraccionaria)
 

Si este argumento se omite, o es igual a 1, devuelve "un"

Si es igual a 2, devuelve "uno"

Si es igual a 3, devuelve "una"

------
Ya sé Excel, pero necesito más ahora en pdf

 

 

------
Ya sé Excel, pero necesito más.

Re: Convertir números a texto

Imagen de PiraTec

Pacomegia.... un fenómeno!!!  un consulta.

En los valores por defecto de la fórmula no se pueden colocar valores tales como: 2 decimales, "pesos";  "centavos; "con"; 1, 1 y 1 de manera que si solo seleccionamos la celda de origen el resto de las variables la tome directamente de los valores por defecto. Gracias por la respuesta.

Y yo pensé que sabía algo de Excel!!!

---------- Y yo pensé que sabía algo de Excel!!!

Re: Convertir números a texto

Imagen de pacomegia

Sí, sólo tienes que modificar ligeramente el código, que para eso lo he dejado sin proteger.

Entra en el editor de Visual Basic ( [Alt] [F11] )

después de una serie de líneas comentadas están las instrucciones que establecen los valores por defecto.

'Valores por defecto:
    If IsMissing(NumDecimales) Then NumDecimales = 0
    If IsMissing(Unidad) Then Unidad = ""
    If IsMissing(UdFracc) Then UdFracc = ""

    If IsMissing(Conexión) Then Conexión = ""
    If IsMissing(Cero) Then Cero = False
    If UD_un_uno_a = 0 Then UD_un_uno_a = 1
    If Frac_un_uno_a = 0 Then Frac_un_uno_a = 1

cambia estos valores por los que necesites, por ejemplo:

'Valores por defecto:
    If IsMissing(NumDecimales) Then NumDecimales = 2
    If IsMissing(Unidad) Then Unidad = "Pesos"
    If IsMissing(UdFracc) Then UdFracc = "centavos"

    If IsMissing(Conexión) Then Conexión = "con"
    If IsMissing(Cero) Then Cero = 1
    If UD_un_uno_a = 0 Then UD_un_uno_a = 1
    If Frac_un_uno_a = 0 Then Frac_un_uno_a = 1

 

Te recomiendo que en una línea comentada indiques que has cambiado los valores por defecto, por si en el futuro vuelves a entrar en el código recuerdes los cambios hechos ahora.

un saludo.

------
Ya sé Excel, pero necesito más ahora en pdf

 

------
Ya sé Excel, pero necesito más.

Re: Convertir números a texto

Imagen de PiraTec

Hola, Pacomegia. He cambiado los valores que dices pero al introducir la fórmula no toma por defecto esos valores, es decir, si  solo uso la celda de referencia; la función introducida queda =PERSONAL.XLS!NumLetra(B3) al dar enter, en lugar de =PERSONAL.XLS!NumLetra(B3;2;"pesos";"centavos";"con";1;1;1) que es con la opción de rellenar manualmente todos los campos de la función.

---------- Y yo pensé que sabía algo de Excel!!!

pues llevas razón

Imagen de pacomegia

pues llevas toda la razón del mundo.

Vamos a probar otra cosa:

vamos a establecer los valores por defecto a la vez que se definene los argumentos de la función:

así quedaría de esta manera:

Public Function NumLetra(Número As Double, Optional NumDecimales As Integer = 2, _
                    Optional Unidad As String = "pesos", Optional UdFracc As String = "centavos", _
                    Optional Conexión As String = "con", Optional Cero As Boolean = False, _
                    Optional UD_un_uno_a As Integer = 1, Optional Frac_un_uno_a As Integer = 1)


 

Parece que para variables tipo integer Excel sí pasa un argumento, y éste es cero, con lo que la función IsMissing no detecta que falta el argumento. Con las cadenas de texto tampoco es que falte el argumento, sino que se trataría de una cadena en blanco "".

 

Gracias por detectar este problema con los valores por defecto. Lo corregiré en el módulo y lo probaré en diferentes versiones, luego subiré una nueva versión a la web.

De momento adjunto un archivo con la función que "funciona" bien para pesos y centavos.

------
Ya sé Excel, pero necesito más ahora en pdf

 

 

------
Ya sé Excel, pero necesito más.

Re: Convertir números a texto

Imagen de careli

Hola alguien me puede ayudar con algo muy sencillo. Necesito una función para convertir número a textos, estoy haciendo varias planillas de calificaciones. La nota va desde el  número  1 a 5 y al lado debe ir escrito en texto. Ej. 1   uno    

Me podrían enviar paso a paso porque no entiendo bien programación.

Desde ya muchas gracias.

Re: Convertir números a texto

Imagen de luz

hola. agradesco mucho que compartan su conocimiento. y espero no sea mucho pedir..... se podra pones 45/100 para 45 centavos?? hablo en el caso de pesos.

Re: decimales como fracción

Imagen de luz

Gracias. Ya habia probado con esa respuesta solo que me marca error en la formula :-(,  y la verdad en excel no me se vomer mucho. el error se queda despues de 'texto1' (marcado en negrita)...... que sera??  mil gracias

Re: decimales como fracción

Imagen de pacomegia

comprueba los paréntesis.

prueba por un lado cada parte de la fórmula, primero pasar a letra la parte entera y en otra celda la parte decimal. Cuando funciones bien es el momento de unirlas con la función CONCATENAR

 

parte entera (suponiendo que el número está en la celda A1 y que la función está en el libro de macros personal):
=PERSONAL.XLSB!NumLetra(ENTERO(A1)

 

con la parte decimal del número:
=CONCATENAR(TEXTO((A1-ENTERO(A1))*100;"00"); " / 100")

 

con todo a la vez:

=CONCATENAR(PERSONAL.XLSB!NumLetra(ENTERO(A1));" (";TEXTO((A1-ENTERO(A1))*100;"00");"/100)")
 

 

Prueba con esto a ver si encontramos dónde está el problema.

------
Ya sé Excel, pero necesito más ahora en pdf

 

 

------
Ya sé Excel, pero necesito más.

Re: decimales como fracción

Imagen de alexxandroz

GRACIAS; ya logré hacerlo para formato de pesos méxicanos!

 

=MAYUSC("(SON " & PERSONAL.XLSB!NumLetra(A1,,"Pesos ") & TEXTO((A1-TRUNCAR(A1)*100),"00") & "/100 M.N. )")

 

Todo bien

EXCEL-ENTUSIASTIC!

 

CARPE DIEM!

Re: Convertir números a texto

Imagen de csvmorris

HOOLA ME FUNCIONO DE MARAVILLA ESTA NUEVA, PERO MEOCURRIO ALGO EXTRAÑO, TE PLATICO .....FORMULE MIS FORMATO REQUERIDOS, Y TODO FUE UN EXITO CON EL MACROS, PERO AL PASAR A OTRA CPU EL ARCHIVO REALIZADO Y MODIFICAR LA CANTIDAD, NO LA MODIFICA, Y ME MARCA UN ERROR......GULP... GULP A QUE SE DEBE?.......HAY ALGO ADICIONAL QUE DEBA HACER? PARA QUE FUNCIONE EN OTRA COMPUTADORA?............GRACIAS

 

FECILIDADES POR LA PAGINA ES DE GRAN UTILIDAD...

Re: Convertir números a texto

Imagen de pacomegia

¿dónde guardaste la función?

Si está en el libro de macros personal sólo funciona en el mismo equipo.

Si están en el libro que enviaste a la otra máquina, debería funcionar, pero las macros deben estar habilitadas para que funcione. Revisa el nivel de seguridad por si acaso.

 

Después de probar esto coméntanos si se resolvió el problema.

------
Ya sé Excel, pero necesito más ahora en pdf

 

------
Ya sé Excel, pero necesito más.

Re: Convertir números a texto

Imagen de MICKY-PEAP

HOLA A TODOS, POR FAVOR TENDRAN EL FILE DE EXCEL ME  LO PODRAN PASAR O DE DOEN LO PUEDO BAJAR GRACIAS.

YO LO NECESITO DE LA SIGUINET MANERA:

 

1142.63 = UN MIL CIENTO CUARENTA Y DOS CON 63/100 DOLARES AMERICANOS

Ó

1142.63 = UN MIL CIENTO CUARENTA Y DOS CON 63/100 NUEVOS SOLES

 

 SALUDOS

MIL GRACIAS

 

 

MICKY.

LIMA-PERU

 

Re: Convertir números a texto

Imagen de pacomegia

el tema de los 63/100 ya estaba comentado en algún envío anterior;

se debe conseguir separando la parte entera, que es la que se convierte a texto, de la parte decimal a la que se le da el formato de fracción de 100

por ejemplo (suponiendo que el número está en la celda A5):

=CONCATENAR(PERSONAL.XLSB!NumLetra(ENTERO(A5);;;;;;;;VERDADERO);" con ";TEXTO((A5-ENTERO(A5))*100;"00");"/100 Nuevos Soles")

 

para conseguir que ponga "un mil", he incluído un nuevo parámetro en la función, lo que supone una nueva versión del archivo 20081202, para poder elegir si queremos que aparezca "un mil cuatrocientos" o "mil cuatrocientos".

 Adjunto un archivo de ejemplo.

------
Ya sé Excel, pero necesito más ahora en pdf

 

 

------
Ya sé Excel, pero necesito más.

centimos 61/100

Imagen de JoaoM

Paco, no se si eta bien, pero M resulta cierto

colocando 61/centimos.

ahora sobre lo un mil, si seria mil y no un mil.

otra cosa es el un mil y otra es dos mil.

 

 siendo la cifra de (un mil quinientos) se ve mejor en cualquier parte mil quinientos, pero quitándolo la palabra un como se haría para dos mil? (2500) dos mil quinientos).

 

Lo cierto es que si me coloca mil quinientos, pero no dos mil quinientos

 

Re: Convertir números a texto

Imagen de giovacif

Hola pacomegia mucho gusto, quiero comentarte que he seguido paso a paso este blog, y te comento que todo me ha funcionado a la perfección, el problema que he tenido es que grabo el archivo, me salgo y cuando lo quiero volver a usar me da error en la formula Y me indica que la formula tiene texto no reconocido y lo he puesto tal y como lo has indicado, será que me puedes ayudar a resolver este problemita??  Gracias y saludos.

Activar macros

Imagen de pacomegia

Tiene toda la pinta de que las macros del libro están deshabilitadas.

Comprueba el nivel de seguridad.

En la versión 2007, la extensión del archivo debe ser .xlsm para indicar que el libro contiene macros.

 

Aunque se trate de una función personalizada, Excel no distingue entre esto y una macro, todo lo que sea programado en vba lo considera con el nombre genérico de "macros" y se le aplican las condiciones de seguridad.

 

prueba con esto y  me comentas si ha funcionado, o si por el contrario el problema es otro y continúa sin funcionar.

un saludo.

------
Ya sé Excel, pero necesito más ahora en pdf

 

------
Ya sé Excel, pero necesito más.

Re: Convertir números a texto

Imagen de Jeison

hola como estas, duda  cuando guardaste la macros la guardaste en un excel en el cual isiste una prueba para hacerlo funcionar. ¿ al guardar e intentar utilizarlo lo isite en el mismo doc. excel o abriste uno nuevo?

 

te explico la funcion solo se puede utilizar en el archivo excel donde proyectaste la funcion si quieres hacerlo en un nuevo doc.. debes realizar el mismo procedimiento. en cada uno de ellos. bueno aqui les dejo una funcion en MN . para uqien la quiera compartir.

 

se expresa asi

5.000 = cinco mil pesos.

tal cual y lo lees. eliminando el molesto "son:" que aparese tipicamente a un principio

 

FUNCION:

 

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 = LCase(PesosMN & IIf(tyCantidad > 1, " PESOS ", " PESO "))
End Function

 

Re: Convertir números a texto

Imagen de visitante

yo copio la furmula en la macro pero como hago para que salga las letras porque me sale  #¿nombre? les agradezco se urgente muchas gracias

 

asistente para fórmula

Imagen de pacomegia

Depende de dónde hayas puesto el código de la función, en qué libro, la llamada a la función puede necesitar también el nombre del libro.

Para hacer una referencia correcta a la fórmula, utiliza el asistente para fórmulas (el botón fx que aparece junto a la barra de fórmulas) y crea una fórmula de prueba
Busca la función dentro de la categoría definidas por el usuario

Fíjate cómo se ha escrito la fórmula en la celda.

por ejemplo, si la función está en el libro de macros personal, en la versión 2007 tendrá este aspecto:
=PERSONAL.XLSB!NumLetra(... )

------
Ya sé Excel, pero necesito más ahora en pdf

 

------
Ya sé Excel, pero necesito más.

Re: Convertir números a texto

Imagen de giovacif

Tienes toda la razón, los niveles de seguridad indican que han desabilitado los macros, me fui a opciones, los active y ya funcionan, no sabes cuanto te agradezco la ayuda porque esto me ha servido muchísimo, tengo algunas otras dudas por allí, pero tal vez más adelante te estaré molestando. De nuevo Gracias.   Saludos.

: Convertir números a texto POR FAVOR

Imagen de alexxxxo

Hola, les agradecería si pudieran eneivrme el archivo para copnvertir numeros a texto con la denominación de moneda mexicana. Por ejemplo $1,567.98 = (un mil quinientos sesenta y siete pesos 98/100)

SI no es mucho pedir ojala venga con las instrucciones.Salvaran una vida.

Gracias

SAludos

Alexx

Los Mochis, Sinaloa, México

Re: Convertir números a texto

Imagen de visitante

Mil gracias por esta macro...de verdad me ha sido de gran ayuda, tenía un rato intentando hacerlo manual. 

Re: Convertir números a texto

Imagen de visitante

Acabo de utilizar la función NumeroaLetra de tu página web para un presupuesto de una oferta técnica y me ha venido estupendamente.

Gracias por hacernos las cosas más fáciles.

Javier

Convertir números a texto

Imagen de visitante

que tal, buenas tardes, ya probe el codigo y si funciona muy bien, lo unico es.... si yo quiero que tambien la parte decimal se transcriba, porque lo voy a ocupar no para cantidades refiriendose a dinero, sino a cantidades de areas de terreno, como puedo modificar la formula, mas o menos le entendi y ya pone metros en lugar de pesos y centimetoros tambien, pero no puedo hacer que me cambien las decimales a texto... me podrias ayudar??? mil gracias y excelente trabajo.

para eso está el argumentoUdFracc

Imagen de pacomegia

para eso está el argumento de la unidad fraccionaria que he llamado UdFracc

la función podría quedar algo así:

=NumLetra( CeldaConTuValor ; 2 ; "metros" ; "centímetros" ; "con")

por ejemplo, para un valor de 45.876245 mostraría lo siguiente:

cuarenta y cinco metros con ochenta y ocho centímetros

(redondea a dos decimales)

------
Ya sé Excel, pero necesito más ahora en pdf

 

------
Ya sé Excel, pero necesito más.

Re: para eso está el argumentoUdFracc

Imagen de mgm25

Lo primero agradecerte el compartir el codigo, funciona perfectamente, quisiera saber si se puede escribir el numero entre parentesis despues del texto, es decir, CINCO MIL DOSCIENTOS EUROS CON DIEZ CENTIMOS (5.200,10 €), gracias nuevamente.

concatenar

Imagen de pacomegia

esto es como cualquier otra función de Excel, puedes combinar las que necesites en una fórmula más complicada dentro de una celda.

para esto que propones, puedes emplear la función CONCATENAR, como primer argumento la función que convierte a letras, y luego añades los argumentos que necesites para espacios, paréntesis, símbolo de euro, etc.

También dispones de la función TEXTO que convierte un número en un texto con un formato especificado.

podría quedar todo parecido a esto (suponiendo que el número está en la celda A1, y que la función está en el libro de macros personal):

=CONCATENAR(PERSONAL.XLSB!NumLetra(A1;2;"euros";"céntimos";"con");" ";TEXTO(A1;"(# ###.##€)"))

------
Ya sé Excel, pero necesito más ahora en pdf

 

------
Ya sé Excel, pero necesito más.

Re: concatenar

Imagen de mgm25

Muchas gracias, funciona perfectamente. Tengo otra cosilla, si la casilla que quiero transformar a texto tiene como numero 0,00 €, me deja la casilla de texto en blanco, no escribe nada. Esto ya es rizar el rizo, ante todo darte las gracias por este estupendo codigo.

Re: concatenar

Imagen de pacomegia

la función NumLetra tiene un argumento llamado "cero" que permite elegir si se quiere mostrar el texto cero o no. pon este argumento igual a  verdadero (o a uno).

argumentos de la función personalizada

respecto del número, prueba con un formato # ##0.00  para que ponga los ceros.

------
Ya sé Excel, pero necesito más ahora en pdf

 

------
Ya sé Excel, pero necesito más.

Re: concatenar

Imagen de mgm25

Muchas gracias pacomegia funciona todo bien

Re: concatenar

Imagen de visitante

Que tal.. Necesito tener así, es con promedios:

 

8,04

OCHO CON CERO CUATRO

 

Espero su ayuda..

 

GRACIAS.!!!!

Re: concatenar

Imagen de alexxandroz

Duda: que ventaja supone usar la función CONCATENAR, en vez de el símbolo "&"?

 

A mi me es más fácil usar &, pero creo que la función pueda tener alguna ventaja!

Gracias

EXCEL-ENTUSIASTIC!

 

CARPE DIEM!

Re: concatenar

Imagen de pacomegia

Sinceramente yo también suelo utilizar el símbolo &

 

------
Ya sé Excel, pero necesito más.

Re: Convertir números a texto

Imagen de visitante
Hola, muchas gracias por la función, es justo lo que estaba buscando. Solo me queda saber una cosa, como puedo poner texto a la derecha e izquierda de la cantidad en letra? Es decir, yo quiero que al final me salga esto y este junto: La minuta asciende a la cantidad de "valor en letra del nº", salvo error u omision Es que tengo poca idea de excel y no se como poner texto a los lados de una funcion. Saludos y gracias

Re: Gema

Imagen de visitante

Hola , ante todo muchisimas gracias, solo me falta saber como hacer para que las letras me salgan en mayusculas. Muchas Gracias.

Re: Convertir números a texto

Imagen de visitante

Sr. Megia: Gracias por su trabajo, por fin he conseguido pasar números a letras, despues de mucho buscar, pero he encontrado un problemilla, ¡cómo no! dirian algunos que me conocen.

¿Como hacer para cuando el texto es demasiado largo, lo ponga en dos lineas? ocurre cuando la cantidad es grande o hay que ponerla al final de la linea. Me estoy refiriendo en Excell.

Espero su ayuda y le agradezco la paciencia con tantos informáticos desinfomados.

Saludos. Vicente 

Re: Convertir números a texto

Imagen de pacomegia

para mostrar textos en varias líneas, yo emplearía la opción de "Ajustar Texto"

Se encuentra dentro de las opciones de formato de celda, en la pestaña Alineación

Esto ajusta el texto al ancho de la celda, aumentando el alto de la fila (así que necesitarás una celda ancha)

lo tienes en la pestaña inicio

ajustar texto en la pestaña inicio

y también en el formato de celdas (menú contextual de la celda)

ajustar celda en una celda en Excel

------
Ya sé Excel, pero necesito más ahora en pdf

 

------
Ya sé Excel, pero necesito más.

Re: Convertir números a texto

Imagen de visitante

Sr. Megia, Saludos:

He probado su sugerencia, resulta, pero en una sola celda, si ampliamos el Ancho de Columna en esa celda entonces de deshace el formato del documento, sería bueno poder aplicar el ajuste de texto a varias columnas a la vez, como si de una sola celda se tratara, ¿Es posible?

La anterior pregunta creia que no se había enviado, grata sorpresa para mi, al ver su contestación. Feliz día desde ARAGON.

combinar celdas

Imagen de pacomegia

Es posible combinar varias celdas para que se aplique el formato como a una sola.

para ello, se seleccionan las celdas que se quieren combinar y luego en propiedades de celda>alineación se marca la opción Combinar.

También hay unos botones en la cinta de opciones para combinar y descombinar celdas

combinar celdas en Excel

Respecto de los comentarios anónimos, tardan un poco en publicarse porque los apruebo manualmente para prevenir el spam.
Los usuarios registrados sí publican inmediatamente sus comentarios, y pueden crear temas nuevos en el foro.
además, pueden recibir un aviso por email cuando alguien contesta a sus preguntas.

------
Ya sé Excel, pero necesito más ahora en pdf

 

------
Ya sé Excel, pero necesito más.

Re: combinar celdas

Imagen de visitante

Sr. Megia: Soy Vicente de nuevo.

Me temo que no puedo aprovechar su solución, porque mi Excell es 2003 y sus imagenes son de 2007 por lo que he podido ver en un portatil que tiene mi hija, me resisto a actualizar la versión,  por que cambian bastantes cosas de una version a otra de Excell, en fin, sino queda otro remedio y hay que actualizarse, lo haremos.

Un abrazo.  Vicente

en 2003 es igual

Imagen de pacomegia

Vicente: en la versión 2003 es igual.

Sólo hay que seleccionar las celdas a combinar, y luego en el menú contextual (el del botón secundario del ratón) elegir la opción
Formato de Celdas. Ahí también está la opción de combinar celdas

combinar celdas en Excel es igual en la versión 2003 y en la versión 2007

------
Ya sé Excel, pero necesito más ahora en pdf

 

------
Ya sé Excel, pero necesito más.

Re: en 2003 es igual

Imagen de visitante

Sr.Megia:   Por fin lo consegui, solo me faltaba marcar la opción de combinar celdas.

Muchisimas gracias, cada vez que entre en Excell me acordare de Ud.

Un abrazo.  Vicente.

 

 

Re: Convertir números a texto

Imagen de xoan ninguen

¡Ay... cómo somos los seres humanos...!

No habiendo suficientes versiones de esta función, ahí va la mía, que he depurado un poquito hasta el extremo, con lo que he ido aprendiendo... muy bonito y muy salado. No cuelgo el enlace a mi página porque no me parece muy profesional, pero es cuestión de hacer una búsqueda en el GranHermanool y supongo que aparecerá en breve.

(OJO! Sólo admite hasta 3 decimales en la parte fraccionaria)

 

Y en segundicia (la primicia la dejé en MrExcel forum...), también la dejo en Inglés (torticero, pero en inglés, lo he traducido a cañón, sin esmerarme mucho... y sin revisar, lo dejo por si a alguno le interesa).

[Edición: No podía ser tan fácil... la versión Inglesa escribe en inglés con la denominación castellana: 1 Billón = 10^12... lo que ellos llaman Trillion. Corrigido y reposteado. Y ya de paso, añadido Millardo a la versión Española, por eso de adaptarse a los dictados de la RAE].

 

 

Option Explicit

'APIs para obtener información del PC
Public Declare Function GetLocaleInfo Lib "kernel32" Alias "GetLocaleInfoA" (ByVal Locale As LongByVal LCType As Long,ByVal lpLCData As StringByVal cchData As LongAs Long
Public Declare Function SetLocaleInfo Lib "kernel32" Alias "SetLocaleInfoA" (ByVal Locale As LongByVal LCType As Long,ByVal lpLCData As StringAs Long

'APIs para obtener datos de usuario y PC 
'Uso de las llamadas a API para obtener la configuración regional del sistema
'Llamada a API GetLocalInfo
Public Const LOCALE_USER_DEFAULT = &H400   'separador decimal para números
Public Const LOCALE_SCURRENCY = &H14        'símbolo de moneda local
Public Const LOCALE_SINTLSYMBOL = &H15        'intl símbolo monetario
Public Const LOCALE_SMONDECIMALSEP = &H16        'separador decimal monetario
Public Const LOCALE_SMONTHOUSANDSEP = &H17        'separador millar monetario
Public Const LOCALE_SMONGROUPING = &H18        'Separador de listas monetario o ¿Número de grupos en grupo?
Public Const LOCALE_ICURRDIGITS = &H19        '# digitos moneda local o ¿Número de grupos en grupo?
Public Function GetValueCR(sCte As IntegerAs String
    Dim sBuffer As String, lBufferLen As Long
    
    lBufferLen = 50
    sBuffer = VBA.Space(lBufferLen)
    If (GetLocaleInfo(LOCALE_USER_DEFAULT, sCte, sBuffer, lBufferLen)) Then
        GetValueCR = VBA.Left(sBuffer, VBA.InStr(sBuffer, VBA.Chr(0)) - 1)
    Else
        GetValueCR = ""
    End If

End Function

Public Function DeterminaConfiguracionEquipo(Parametro AsStringAs StringSub Probando()
    Dim strCadena As String
    strCadena = fALetra(106.5, "")       'Cells(2, 1).Value)
    VBA.MsgBox strCadena
End Sub

 

Public Function fALetra(ByRef dbValor As Double, _
                        Optional ByRef strMoneda As String = "EURO", _
                        Optional ByRef strFraccionMoneda AsString = "CÉNTIMO", _
                        Optional ByRef strConcatenador AsString = "CON", _
                        Optional ByRef intDecimales As Integer= 2) As String
    
    Application.Volatile (False)
    Dim strSeparadorMiles As String, strSeparadorDecimales AsString
    Dim strAbsoluto As String, strDecimales As String
    Dim lgAbsoluto As Long, dbDecimales As Double
    Dim strCadena As String, strCadenaFinal As String
    Dim Cientos As Long, Miles As Long, Millones As Long, Millardos As Long
    Dim strCadenaBillones As String, strCadenaMillardos AsString, strCadenaMillones As String, _
        strCadenaMiles As String, strCadenaCientos As String, strCadenaDecimales As String
    Dim lgMultiplicador As Long
    
    'Si se leen números (procedentes de fuentes externas) que no se corresponden con la configuración numérica del usuario
    'strSeparadorMiles = GetValueCR(15)
    'strSeparadorDecimales = GetValueCR(14)
    '

    If strMoneda = "" Then strMoneda = ""
    If VBA.Len(VBA.CStr(dbValor)) = 1 Then 'Caso unidades
        lgAbsoluto = VBA.Abs(VBA.Fix(dbValor))
    Else
        lgAbsoluto = VBA.Abs(VBA.Fix(dbValor))
    End If
    
    Cientos = (lgAbsoluto - 1000 * (lgAbsoluto \ 1000))
    Miles = (lgAbsoluto - 1000000 * (lgAbsoluto \ 1000000)) \ 1000
    Millones = (lgAbsoluto - 1000000000 * (lgAbsoluto \ 1000000000)) \ 1000000
    Millardos = (lgAbsoluto - Millones * 1000000 - Miles * 1000 - Cientos) \ 1000000000
    strCadenaCientos = ConvierteCifra(Cientos)
    strCadenaCientos = VBA.IIf(VBA.Right(strCadenaCientos, 2) = "UN" And VBA.UCase(VBA.Right(strMoneda, 1)) = "A", _
                               strCadenaCientos & "A", strCadenaCientos)
    strCadenaCientos = VBA.IIf(VBA.InStr(1, strCadenaCientos, "CIENTOS") > 0 And VBA.UCase(VBA.Right(strMoneda, 1)) = "A", _
                               VBA.Replace(strCadenaCientos, "CIENTOS", "CIENTAS"), strCadenaCientos)
    
    strCadenaMiles = ConvierteCifra(Miles)
    strCadenaMillones = ConvierteCifra(Millones)
    strCadenaMillardos = ConvierteCifra(Millardos)
    
    If VBA.Abs(dbValor) > 999999999999.99 Then
        If VBA.Trim(strCadenaBillones) = "UN" Then
            strCadena = strCadenaBillones & " BILLóN"
        Else
            strCadena = strCadenaBillones & " BILLONES"
        End If
    End If
    
    If VBA.Abs(dbValor) > 999999999.99 Then
        strCadena = VBA.IIf(VBA.Trim(strCadenaMillardos) = "UN", _
                            strCadena & " MILLARDO", strCadena & " " & strCadenaMillardos & " MILLARDOS")
    End If
    
    If VBA.Abs(dbValor) > 999999.99 Then
        strCadena = VBA.IIf(VBA.Trim(strCadenaMillones) = "UN", _
                            strCadenaMillones & " MILLÓN", strCadena & " " & strCadenaMillones & " MILLONES")
    End If

    If VBA.Abs(dbValor) > 999.99 Then
        If VBA.Trim(strCadenaMiles) = "UN" Then
            strCadena = strCadena & " MIL"
        ElseIf VBA.Trim(strCadenaMiles) = "" Then
            strCadena = strCadena
        Else
            strCadena = strCadena & " " & strCadenaMiles & " MIL"
        End If
    End If
    
    intDecimales = VBA.IIf(intDecimales > 3, 3, intDecimales)
    lgMultiplicador = VBA.Val(1 & VBA.String(intDecimales, "0"))
    dbDecimales = (VBA.Abs(dbValor) - VBA.Abs(Fix(dbValor))) * lgMultiplicador
    If strMoneda <> "" Then
        If VBA.Abs(Int(dbValor)) = "0" Then
            strCadena = "CERO " & VBA.UCase(strMoneda) & "S"
        ElseIf Abs(Int(dbValor)) = "1" Then
            strCadena = VBA.IIf(VBA.UCase(VBA.Right(strMoneda, 1)) = "A", "UNA", "UN")
            strCadena = strCadena & " " & VBA.UCase(strMoneda)
        Else
            strCadena = strCadena & " " & strCadenaCientos & " " & VBA.UCase(strMoneda) & "S"
        End If

        Select Case VBA.Round((dbDecimales), 0)
            Case Is = 1 'Una fracción monetaria
                strCadena = strCadena & " " & strConcatenador & " " & _
                            VBA.IIf(VBA.UCase(VBA.Right(strFraccionMoneda, 1)) = "A", "UNA", "UN") & " " & strFraccionMoneda
            Case Is > 1 'Hay fracción monetaria
                strCadenaDecimales = ConvierteCifra(VBA.Round((dbDecimales), 0))
                strCadenaDecimales = VBA.IIf(VBA.Right(strCadenaDecimales, 2) = "UN" And VBA.UCase(VBA.Right(strFraccionMoneda, 1)) = "A", _
                                             strCadenaDecimales & "A", strCadenaDecimales)
                strCadenaDecimales = VBA.IIf(VBA.InStr(1, strCadenaDecimales, "CIENTOS") > 0 And VBA.UCase(VBA.Right(strMoneda, 1)) = "A", _
                                           VBA.Replace(strCadenaDecimales, "CIENTOS", "CIENTAS"), strCadenaDecimales)
                strCadena = strCadena & " " & strConcatenador & " " & strCadenaDecimales & " " & strFraccionMoneda & "S"
        End Select
    Else
        If Abs(Int(dbValor)) = "0" Then
            strCadena = ""
        ElseIf Abs(Int(dbValor)) = "1" Then
            strCadena = "UNO"
        Else
            strCadena = strCadena & " " & strCadenaCientos
        End If

        Select Case VBA.Round((dbDecimales), 0)
            Case Is = 1
                strCadena = strCadena & " " & strConcatenador & " " & " UNO"
            Case Is > 1
                strCadenaDecimales = ConvierteCifra(VBA.Round((dbDecimales), 0))
                strCadena = strCadena & " " & strConcatenador & " " & strCadenaDecimales
        End Select
        
    End If
    
    strCadenaFinal = VBA.Trim(strCadena)
    If dbValor < 0 Then strCadenaFinal = "MENOS " & strCadenaFinal
    fALetra = VBA.Replace(strCadenaFinal, "  ", " ")

End Function

Public Function ConvierteCifra(ByVal lgValor As LongAsString
    Dim strCentena As String, strDecena As String, strUnidadAs String
    Dim matrizUnidades As Variant
    Dim matrizDecena As Variant
    Dim matrizDecenas As Variant
    Dim matrizDecenasY As Variant
    Dim matrizCentena As Variant

    matrizUnidades = Array("", "UN", "DOS", "TRES", "CUATRO", "CINCO", "SEIS", "SIETE", "OCHO", "NUEVE")
    matrizDecena = Array("", "ONCE", "DOCE", "TRECE", "CATORCE", "QUINCE", "DIECISEIS", "DIECISIETE", "DIECIOCHO", "DIECINUEVE")
    matrizDecenas = Array("", "DIEZ", "VEINTE", "TREINTA", "CUARENTA", "CINCUENTA", "SESENTA", "SETENTA", "OCHENTA", "NOVENTA")
    matrizDecenasY = Array("", "", "VEINTI", "TREINTA Y ", "CUARENTA Y ", "CINCUENTA Y ", _
                           "SESENTA Y ", "SETENTA Y ", "OCHENTA Y ", "NOVENTA Y ")
    matrizCentena = Array("", "", "DOSCIENTOS", "TRESCIENTOS", "CUATROCIENTOS", "QUINIENTOS", _
                          "SEISCIENTOS", "SETECIENTOS", "OCHOCIENTOS", "NOVECIENTOS")
    
    Dim Unidad As Integer, Decena As Integer, Centena AsInteger
    Centena = lgValor \ 100
    Decena = (lgValor - Centena * 100) \ 10
    Unidad = (lgValor - Centena * 100 - Decena * 10)
    
    strUnidad = VBA.IIf(Decena <> 1, matrizUnidades(Unidad), matrizDecena(Unidad))
    
    strDecena = VBA.IIf(Decena > 1, matrizDecena(Unidad), strDecena)
    strDecena = VBA.IIf(Unidad > 0, matrizDecenasY(Decena), matrizDecenas(Decena))
    
    strCentena = VBA.IIf(Centena = 1, "CIEN", matrizCentena(Centena))
    strCentena = VBA.IIf(Centena = 1 And (Decena + Unidad > 0), "CIENTO", matrizCentena(Centena))
    ConvierteCifra = strCentena & " " & strDecena & strUnidad

End Function

 

 

 

'....... EN LA LENGUA DE LA PÉRFIDA ALBIÓN ...................

 

'La función en versión inglesa:
Public Function fNumbersToText(ByRef dbValue As Double, _
                        Optional ByRef strCurrency As String = "EURO", _
                        Optional ByRef strFractionCurrency AsString = "CENTS", _
                        Optional ByRef strConcatenator AsString = "WITH", _
                        Optional ByRef intDecimals As Integer= 2) As String
    
    Application.Volatile (False)

    Dim strAbsolut As String, strDecimals As String
    Dim lgAbsolut As Long, dbDecimals As Double
    Dim strStringText As String, strFinalString As String
    Dim Hundreds As Long, Thousands As Long, Millions As Long, Billions As Long
    Dim strStringTextBillones As String, strStringTextBillionsAs String, strStringTextMillions As String, _
        strStringTextThousands As String, strStringTextHundreds As String, strStringTextDecimals AsString
    Dim lgMultiply As Long
    
    If strCurrency = "" Then strCurrency = ""
    If VBA.Len(VBA.CStr(dbValue)) = 1 Then 'Unities
        lgAbsolut = VBA.Abs(VBA.Fix(dbValue))
    Else
        lgAbsolut = VBA.Abs(VBA.Fix(dbValue))
    End If
    
    Hundreds = (lgAbsolut - 1000 * (lgAbsolut \ 1000))
    Thousands = (lgAbsolut - 1000000 * (lgAbsolut \ 1000000)) \ 1000
    Millions = (lgAbsolut - 1000000000 * (lgAbsolut \ 1000000000)) \ 1000000
    Billions = (lgAbsolut - Millions * 1000000 - Thousands * 1000 - Hundreds) \ 1000000000
    strStringTextHundreds = fConvertQuantity(Hundreds)
    strStringTextThousands = fConvertQuantity(Thousands)
    strStringTextMillions = fConvertQuantity(Millions)
    strStringTextBillions = fConvertQuantity(Billions)
    
    If VBA.Abs(dbValue) > 999999999999.99 Then
        If VBA.Trim(strStringTextBillones) = "UN" Then
            strStringText = strStringTextBillones & " TRILLION"
        Else
            strStringText = strStringTextBillones & " TRILLIONS"
        End If
    End If
    
    If VBA.Abs(dbValue) > 999999999.99 Then
        strStringText = VBA.IIf(VBA.Trim(strStringTextBillions) = "ONE", _
                            strStringText & " BILLION", strStringText & " " & strStringTextBillions & " BILLIONS")
    End If
    
    If VBA.Abs(dbValue) > 999999.99 Then
        strStringText = VBA.IIf(VBA.Trim(strStringTextMillions) = "ONE", _
                            strStringTextMillions & " MILLION", strStringText & " " & strStringTextMillions & " MILLIONS")
    End If

    If VBA.Abs(dbValue) > 999.99 Then
        If VBA.Trim(strStringTextThousands) = "ONE" Then
            strStringText = strStringText & " THOUSAND"
        ElseIf VBA.Trim(strStringTextThousands) = "" Then
            strStringText = strStringText
        Else
            strStringText = strStringText & " " & strStringTextThousands & " THOUSAND"
        End If
    End If
    
    intDecimals = VBA.IIf(intDecimals > 3, 3, intDecimals)
    lgMultiply = VBA.Val(1 & VBA.String(intDecimals, "0"))
    dbDecimals = (VBA.Abs(dbValue) - VBA.Abs(Fix(dbValue))) * lgMultiply
    If strCurrency <> "" Then
        If VBA.Abs(Int(dbValue)) = "0" Then
            strStringText = "ZERO" & " " & VBA.UCase(strCurrency) & "S"
        ElseIf Abs(Int(dbValue)) = "1" Then
            strStringText = "ONE" & " " & VBA.UCase(strCurrency)
        Else
            strStringText = strStringText & " " & strStringTextHundreds & " " & VBA.UCase(strCurrency) & "S"
        End If

        Select Case VBA.Round((dbDecimals), 0)
            Case Is = 1 'One monetary fraction
                strStringText = strStringText & " " & strConcatenator & " " & "ONE" & " " & strFractionCurrency
            Case Is > 1 'More than one monetary fraction
                strStringTextDecimals = fConvertQuantity(VBA.Round((dbDecimals), 0))
                strStringText = strStringText & " " & strConcatenator & " " & strStringTextDecimals & " " & strFractionCurrency & "S"
        End Select
    Else
        If Abs(Int(dbValue)) = "0" Then
            strStringText = ""
        ElseIf Abs(Int(dbValue)) = "1" Then
            strStringText = "ONE"
        Else
            strStringText = strStringText & " " & strStringTextHundreds
        End If

        Select Case VBA.Round((dbDecimals), 0)
            Case Is = 1
                strStringText = strStringText & " " & strConcatenator & " " & " ONE"
            Case Is > 1
                strStringTextDecimals = fConvertQuantity(VBA.Round((dbDecimals), 0))
                strStringText = strStringText & " " & strConcatenator & " " & strStringTextDecimals
        End Select
        
    End If
    
    strFinalString = VBA.Trim(strStringText)
    If dbValue < 0 Then strFinalString = "MINUS " & strFinalString
    fNumbersToText = VBA.Replace(strFinalString, "  ", " ")

End Function

Public Function fConvertQuantity(ByVal lgValue As LongAsString
    Dim strHundreds As String, strTens As String, strUnity AsString
    Dim matrizUnityes As Variant
    Dim matrizTens As Variant
    Dim matrizTenss As Variant
    Dim matrizTenssY As Variant
    Dim matrizHundreds As Variant

    matrizUnityes = Array("", "ONE", "TWO", "THREE", "FOUR", "FIVE", "SIX", "SEVEN", "EIGHT", "NINE")
    matrizTens = Array("", "ELEVEN", "TWELVE", "THIRTEEN", "FOURTEEN", "FIFTEEN", "SIXTEEN", "SEVENTEEN", "EIGHTEEN", "NINETEEN")
    matrizTenss = Array("", "TEN", "TWENTY", "THIRTY", "FOURTY", "FIFTY", "SIXTY", "SEVENTY", "EIGHTY", "NINETY")
    matrizTenssY = Array("", "", "TWENTY ", "THIRTY ", "FOURTY ", "FIFTY ", "SIXTY ", "SEVENTY ", "EIGHTY ", "NINETY ")
    matrizHundreds = Array("", "ONE HUNDRED", "TWO HUNDREDS", "THREE HUNDREDS", "FOUR HUNDREDS", "FIVE HUNDREDS", _
                          "SIX HUNDREDS", "SEVEN HUNDREDS", "EIGHT HUNDREDS", "NINE HUNDREDS")
    
    Dim Unity As Integer, Tens As Integer, Hundreds As Integer
    Hundreds = lgValue \ 100
    Tens = (lgValue - Hundreds * 100) \ 10
    Unity = (lgValue - Hundreds * 100 - Tens * 10)
    
    strUnity = VBA.IIf(Tens <> 1, matrizUnityes(Unity), matrizTens(Unity))
    
    strTens = VBA.IIf(Tens > 1, matrizTens(Unity), strTens)
    strTens = VBA.IIf(Unity > 0, matrizTenssY(Tens), matrizTenss(Tens))
    
    strHundreds = matrizHundreds(Hundreds)
    fConvertQuantity = strHundreds & " " & strTens & strUnity

End Function

 


-----------------------------------------------------------------

www.TrazEX.com (soluciones sobre Excel)

Re: Convertir números a texto

Imagen de xoan ninguen

Límite de la función ±9.999.999.999,999 (casi 10 millardos -negativos o positivos-, con tres decimales en la precisión decimal)

 

Adjunto un módulo que se puede importar con la última corrección (1 Millardo, 1 Millón, que se expresan con el "UN" delante)... 

Un día entero depurando código.

 

[Por implementar:

> que en la parte decimal se puedan definir más cifras

> que se pueda superar el límite de los millardos en la cifra a convertir]

 

Propicios días

-----------------------------------------------------------------

www.TrazEX.com (soluciones sobre Excel)

Re: Convertir números a texto

Imagen de visitante

muchisimas gracias...me encantó tu mensaje de la macro, eso me dió ánimos, para adecuarla a mis necesidades (sin saber maccros).

 

Abachos, Fátima desde México

Re: Convertir números a texto

Imagen de visitante

hola me funcion npereo yo necesito convertir cntidades de numeros naturales y bajas ejemplo 8.25 quiero que salga  en letras ocho con veite y cinco o tambien puede ser ocho con 25 puedes enviarme el codigo  que ya la cache como usar y todo lo emas lo no se es como hacer el copdigo gracias

Re: Convertir números a texto

Imagen de visitante

Buenas tardes me encanto su funcion pero hay un problema a lo que guardo me sale una ventana d error y dspues de habilitar las macros y las funciones de VBA en excel, guardo m vuelve a salir lo mismo, y por ultimo cierro y abro el documento y me sale en la celda que inserte la funcion NumLetrar el error de #NOMBRE? entonces que podría hacer para poder hacer funcionar el NumLetra le agradecería su pronta respuesta porque en verdad lo necesito :'( Muchas gracias por su atención ;) 

Re: Convertir números a texto

Imagen de pacomegia

¿dónde se guarda la función?

Para que esté disponible para todos los libros, es mejor ponerla en el libro de macros personal (sólo estaría disponible en ese PC)

Si sólo se va a utilizar en un libro concreto, entonces se debería guardar en ese libro (hay que guardarlo con extensión xlsm para que tenga macros), así estaría disponible para ese libro, aunque se abra desde otra máquina.

Mira también esta entrada: qué hacer con un archivo .bas

 

------
Ya sé Excel, pero necesito más.

Re: Convertir números a texto

Imagen de visitante

Hola. Un saludo

En primer lugar darte las gracias por compartir esta rutina, para la gente que como yo tenemos muy poca idea de programación

Te queria hacer una pregunta por si es fácil de solucionar.

Hay un caso en el que el "un" - "uno" no funciona bien. Es cuando la cantidad no tiene descripción.

Por ejemplo: 101.401. Manejando los argumentos, me saldria "ciento un mil cuatrocientos un" o "ciento uno mil cuatrocientos uno".

Entiendo que lo correcto seria "ciento un mil cuatrocientos uno". Hay alguna posibilidad sencilla de corregir esto.

Muchas gracias por tu atención

Al abrir de nuevo excel ya no está

Imagen de María

Hola, siguiendo todos tus pasos conseguí lo que me proponía, pero hoy al abrir de nuevo la hoja y actualizar los datos me da error. He intentado poner la fórmula en otra celda pero ya no está. ¿Qué ha podido pasar? ¿Qué tengo que hacer para que no se elimine cuando cierre excel?

Comprueba la configuración

Imagen de pacomegia

Comprueba la configuración del centro de confianza en las opciones de Excel, por defecto las macros están deshabilitadas.

 

Comprueba las configuración de ubicaciones de confianza (también está en la configuración del centro de confianza)

 

Comprueba que has guardado el archivo en un formato que permita macros, por ejemplo xlsm, para que no borre el contenido del código VBA al guardar y cerrar el archivo.

 

------
Ya sé Excel, pero necesito más.

Un, Uno

Imagen de Piurexroa

Hola, hay alguna manera de que diga por ejemplo

41001 (Cuarenta y un mil uno)

porque al poner ese monto me pone (Cuarenta y un mil un), tampoco quiero que diga (Cuarenta y uno mil uno)

"Yo no uso monedas ni nada, solo necesito el convertidor a letras"

Hola, PacoTras haber tenido

Imagen de Cron

Hola, Paco

Tras haber tenido que hacer una certificación a cero, me he dado cuenta de que a la función le falta (o no lo encuentro) la opción de que si todo es cero, escriba "CERO EUROS". Por defecto, deja todo en blanco. Si pasas el parámetro de los ceros, pone "CERO EUROS CON CERO CÉNTIMOS".

Un saludo

Un, uno

Imagen de Piurexroa

Alguien podria ayudarme?? T.T

nueva versión

Imagen de pacomegia

Hola Cron y Piurexroa

He añadido una nueva versión 20160127 que incluye unso cambios para atender a estas peticiones.

El argumento Cero, ahora puede tomar valores 0, 1, 2, 3

0: (no pone nada)

1: (lo pone todo) cero unidades con cero décimas

2: (sólo unidades) cero unidades

3: (sólo decimales) cero décimas

y añadimos un nuevo argumento Millar_un_uno_a (similar al argumento UD_un_uno_a) para dotar de genero independiente a los millares y así poder poner de varias formas ese caso del 41001: cuarenta y un mil uno, cuarenta y uno mil una, cuarenta y uno mil un, cuarenta y un mil una

Espero que os guste

 

------
Ya sé Excel, pero necesito más.

Un, Uno

Imagen de Piurexroa

Pacomegia sos un GENIO muchísimas gracias!!! Te estoy muy agradecido

No me funcionan los céntimos

Imagen de visitante

He hecho todo lo recogido en el blog (estupendo para los que trabajamos con excel) pero no he conseguido que me recoja en letra los decimales recogidos en las cifras. No se que estoy haciendo mal.

Muchas gracias por la ayuda.

 

comprueba el argumento

Imagen de pacomegia

comprueba el argumento NumDecimales

escribe la función que estás utilizando para poder saber lo que estás haciendo

 

------
Ya sé Excel, pero necesito más.

No hay manera

Imagen de visitante

Lo hago con el cuadro de la función abierta con los distintos parámetros. No hay manera.

Lo tengo concatenado para resolverlo, pero no me funciona la función como debiera.

Te adjunto fichero de prueba para que lo puedas chequear.

Gracias por anticipado,

 

 

Es que en la función estás

Imagen de pacomegia

Es que en la función estás tomando como argumento el número que está en D1, que no tiene decimales (porque es el que has utilizado para la parte entera)

prueba con la Celda C1

=NumLetra(C1;C3;"euros";"céntimos";"con";0)

Si lo que quieres es que añada decimales aunque sean cero entonces utiliza el argumento Cero

con un valor de 1 se mostraría también texto para cero, por ejemplo

1358 -> mil trescientos cincuenta y ocho con cero céntimos

 

 

------
Ya sé Excel, pero necesito más.

No hay manera 2

Imagen de visitante

Lo he puesto tal y como me dices, y el resultado es desconcertante, tal y como aparece en el fichero adjunto.

Creo que te estoy dando la tabarra demasiado.

Gracias de nuevo,

 

Convertir Número de Miles de Millones a Letras

Imagen de Wilmer José

Buenas tardes estimados, para empezar aclaro: no soy especialista en excel ni programación; utilizo convertirnum para pasar a letras los montos arrojados por excel; la cosa se complica porque en Venezuela la inflación ha hecho crecer exponencialmente los costos y una factura puede arrojar tres mil o cuatro mil millones y para esos montos la función arroja un error. Como puedo convertir a letras la cantidad de 3500628010,25?

AYUDA PARA CONVERTIR NUMEROS A LETRAS PERO CON DECIMALES

Imagen de ANGEL´S

Hola amigo buenas tades, sería ta amable de ayudarme con una fórmula en Excel para transformar los numeros enteros incluido la coma y decimales a letras: Por ejemplo:

 

yo tengo

7,00

7,01

7,02

Y así Sucesivamente quiero que en la celda siguiente salga de la siguiente manera:

7,00     SIETE COMA CERO

7,01     SIETE COMA CERO UNO

7,02     SIETE COMA CERO DOS

7,10     SIETE COMA DIEZ

7,99     SIETE COMA NOVENTA Y NUEVE

 

Quedaré de usted muy agradecido por su ayuda.

 

Saludos cordiales,

Angel´S

 

convertir centavos a numeros

Imagen de Allan Masis

Hola, sabes como puedo modificar el codigo para que me de los centavos tambien en letras?

Muchas gracias por la ayuda que me puedan brindar

La función incluye argumentos

Imagen de pacomegia

La función incluye argumentos para la unidad entera y para los decimales.

También puedes concatenar varias veces la función para componer el texto que necesites.

 

------
Ya sé Excel, pero necesito más.