Convertir números a texto

última versión 20091005

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) verdadero 0->"cero" falso 0->"" (por defecto: falso)
  • 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"  

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

Vista previaAdjuntoTamaño
NumeroaLetra20091005.rar2.99 KB

Comentarios

Imagen de visitante

Re: Convertir números a texto

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

Imagen de visitante

Re: Convertir números a texto

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 ;) 

Imagen de pacomegia

Re: Convertir números a texto

¿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

envios gratis a todo el mundo

Imagen de visitante

Re: Convertir números a texto

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

Imagen de pacomegia

mira los ejemplos

Imagen de visitante

Re: Convertir números a texto

gracias por la función

me ha funcionado correctamente, saludos desde santa Fe Leo

Imagen de visitante

Re: Convertir números a texto

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

Imagen de xoan ninguen

Re: Convertir números a texto

¡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)

Imagen de xoan ninguen

Re: Convertir números a texto

Ya no fozo más... que debes tener el correo saturadito XDD

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

www.TrazEX.com (soluciones sobre Excel)

Imagen de xoan ninguen

Re: Convertir números a texto

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

Vista previaAdjuntoTamaño
presupexnumeros_a_letras_120513.bas14.01 KB

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

www.TrazEX.com (soluciones sobre Excel)

Imagen de pacomegia

Re: Convertir números a texto

gracias Xoan niguen por tu versión de los hechos.

un saludo.

envios gratis a todo el mundo

Imagen de xoan ninguen

Re: Convertir números a texto

¡Hala!, ya estoy contento. XDD

En los billones de cifras (15)... la parte de CP1, y CP2 lista y preparada para moneda "créditos galácticos".

Vista previaAdjuntoTamaño
presupexnumeros_a_letras_120514.bas12.39 KB

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

www.TrazEX.com (soluciones sobre Excel)

Imagen de visitante

Re: Convertir números a texto

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 

Imagen de pacomegia

Re: Convertir números a texto

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

envios gratis a todo el mundo

Imagen de visitante

Re: Convertir números a texto

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.

Imagen de pacomegia

combinar celdas

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

envios gratis a todo el mundo

Imagen de visitante

Re: combinar celdas

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

Imagen de pacomegia

en 2003 es igual

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

envios gratis a todo el mundo

Imagen de visitante

Re: en 2003 es igual

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.

 

 

Imagen de visitante

Re: Convertir números a texto

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
Imagen de visitante

Re: mira el comentario sobre concatenar

gracias y mil veces gracias llevo meses tratando de conseguir convertir los numeros en letras. graciassssssssssssss

Imagen de visitante

Re: Gema

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

Imagen de pacomegia

Función MAYUSC

utiliza la función MAYUSC para convertirlo todo a mayúsculas.

aquí tienes un ejemplo

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

envios gratis a todo el mundo

Imagen de visitante

Convertir números a texto

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.

Imagen de pacomegia

para eso está el argumentoUdFracc

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

envios gratis a todo el mundo

Imagen de mgm25

Re: para eso está el argumentoUdFracc

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.

Imagen de pacomegia

concatenar

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

envios gratis a todo el mundo

Imagen de alexxandroz

Re: concatenar

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!

Imagen de pacomegia

Re: concatenar

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

envios gratis a todo el mundo

Imagen de mgm25

Re: concatenar

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.

Imagen de pacomegia

Re: concatenar

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

envios gratis a todo el mundo

Imagen de visitante

Re: concatenar

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

 

8,04

OCHO CON CERO CUATRO

 

Espero su ayuda..

 

GRACIAS.!!!!

Imagen de mgm25

Re: concatenar

Muchas gracias pacomegia funciona todo bien

Imagen de visitante

Re: Convertir números a texto

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

Imagen de visitante

Re: Convertir números a texto

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

Imagen de JAMITH GARCIA

Re: Convertir números a texto

Este comentario ha sido movido aquí.
Imagen de giovacif

Re: Convertir números a texto

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.

Imagen de pacomegia

Re: Convertir números a texto

No es ninguna molestia

 

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

envios gratis a todo el mundo

Imagen de alexxxxo

: Convertir números a texto POR FAVOR

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

Imagen de pacomegia

Re: : Convertir números a texto POR FAVOR

En este envío tienes un ejemplo

En esta misma página tienes más ejemplos e instrucciones.

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

envios gratis a todo el mundo

Imagen de giovacif

Re: Convertir números a texto

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.

Vista previaAdjuntoTamaño
NUMLETRAS.JPG
NUMLETRAS.JPG169.1 KB
Imagen de Jeison

Re: Convertir números a texto

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

 

Imagen de visitante

Re: Convertir números a texto

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

 

Imagen de pacomegia

asistente para fórmula

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

envios gratis a todo el mundo

Imagen de pacomegia

Activar macros

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

envios gratis a todo el mundo

Imagen de MICKY-PEAP

Re: Convertir números a texto

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

 

Imagen de pacomegia

Re: Convertir números a texto

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

 

Vista previaAdjuntoTamaño
EjemploUnMil.xls59 KB

envios gratis a todo el mundo

Imagen de csvmorris

Re: Convertir números a texto

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

Imagen de pacomegia

Re: Convertir números a texto

¿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

envios gratis a todo el mundo

Imagen de luz

Re: Convertir números a texto

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.

Imagen de pacomegia

decimales como fracción

en este comentario puedes ver un ejemplo de cómo poner los decimales como 45/100

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

envios gratis a todo el mundo

Imagen de luz

Re: decimales como fracción

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

Imagen de pacomegia

Re: decimales como fracción

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

 

envios gratis a todo el mundo

Imagen de alexxandroz

Re: decimales como fracción

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!

Imagen de careli

Re: Convertir números a texto

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.

Imagen de pacomegia

Re: Convertir números a texto

Imagen de PiraTec

Re: Convertir números a texto

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!!!
Imagen de pacomegia

Re: Convertir números a texto

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

envios gratis a todo el mundo

Imagen de PiraTec

Re: Convertir números a texto

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!!!
Imagen de pacomegia

pues llevas razón

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

 

Vista previaAdjuntoTamaño
EjemploPesos.xls49 KB

envios gratis a todo el mundo

Imagen de Daniel_86

Re: Convertir números a texto

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

Vista previaAdjuntoTamaño
NUMERO A LETRA.xls74.5 KB
Imagen de juandudas

¿por qué no utilizas la función?

No inventes la pólvora.

¿por qué no utilizas la función NumLetra que puedes descargar en esta página?

a mí me ha ahorrado muchísimo tiempo y me ha evitado errores.

 

un saludo.

mi cabeza es un mar de dudas

Imagen de Daniel_86

Re: ¿por qué no utilizas la función?

gracias.

 

sé que es mas facil xq copio y pego, pero me encomendaron hacerla de esa forma, me entiendes ?

saludos

Imagen de solid_snake

Puedes corregir esto porfa

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 (^_^)
Imagen de pacomegia

Re: Puedes corregir esto porfa

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

 

envios gratis a todo el mundo

Imagen de Pleiades

Re: Convertir números a texto

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.

Imagen de Pleiades

Re: Convertir números a texto

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. 

Imagen de pacomegia

MAYUSC

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

envios gratis a todo el mundo

Imagen de iguana

Re: MAYUSC

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

Imagen de pacomegia

Re: MAYUSC

Aquí puedes descargar un archivo con unos ejemplos.

échale un vistazo y luego comentamos las dudas.

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

envios gratis a todo el mundo

Imagen de Pleiades

Re: Convertir números a texto

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.

Imagen de pacomegia

argumentos

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

envios gratis a todo el mundo

Imagen de Pleiades

Re: Convertir números a texto

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

Imagen de pacomegia

una pregunta

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

envios gratis a todo el mundo

Imagen de Pleiades

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

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.

Imagen de pacomegia

Ahora importa el archivo bas

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

envios gratis a todo el mundo

Imagen de Pleiades

Re: Convertir números a texto

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.

Imagen de visitante

Re: Convertir números a texto

formula para cambiar cantidad de numero a letra

Imagen de pacomegia

unos ejemplos

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

Vista previaAdjuntoTamaño
EjemplosNumLetra.xls61.5 KB

envios gratis a todo el mundo

Imagen de visitante

Buenisimo amigo muchas gracias

Buenisimo amigo muchas gracias

Imagen de jasr

Re: Convertir números a texto

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

Imagen de jasr

Re: Convertir números a texto

Tampoco me aparece la unidad monetaria ni en concatenador de centimos...

Imagen de pacomegia

Re: Convertir números a texto

¿me podrías decir unos ejemplos de algunos números para los que no funciona? para tratar de detectar el fallo.

¿no te funciona nunca o es sólo en algunos casos?

 

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

envios gratis a todo el mundo

Imagen de coriano

Re: Convertir números a texto

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
Imagen de pacomegia

Re: Convertir números a texto

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

envios gratis a todo el mundo

Imagen de coriano

Re: Convertir números a texto

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

Coriano
Imagen de coriano

Re: Convertir números a texto

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
Imagen de pacomegia

Re: Convertir números a texto

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

envios gratis a todo el mundo

Imagen de MIGUEL10

Re: Convertir números a texto

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

 

 

Imagen de pacomegia

nueva versión

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

envios gratis a todo el mundo

Imagen de juandudas

me ahorró mucho tiempo

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

Imagen de Rafa GP

Re: Convertir números a texto

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
Imagen de pacomegia

problema con valores por defecto

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

 

envios gratis a todo el mundo

Imagen de Rafa GP

Re: Convertir números a texto

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
Imagen de visitante

Re: Convertir números a texto

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.

Imagen de Cron

Re: Convertir números a texto

"un millón" es correcto. "Un mil", no.

Imagen de visitante

Re: Convertir números a texto

Gracias por tu trabajo, me ha facilitado mucho las cosas.

Un saludo.

Imagen de visitante

Re: Convertir números a texto

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   

Imagen de pacomegia

Re: Convertir números a texto

¿qué número es éste: 147.125.8?

Para facilitar que Excel entienda los números, elimina los separadores de miles y deja sólo el separador decimal.

la función NumLetra convertirá en texto tus números sin problemas

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

envios gratis a todo el mundo

Imagen de visitante

Re: Convertir números a texto

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

Imagen de pacomegia

Re: Convertir números a texto

Imagen de pacomegia

nueva versión

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

 

envios gratis a todo el mundo

Imagen de alexxandroz

Re: nueva versión

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!

Imagen de pacomegia

Re: nueva versión

estaba contestándote pero ya vi que lo lograste

http://www.necesitomas.com/numeros_a_texto_excel#comment-6226

envios gratis a todo el mundo

Imagen de JoaoM

Re: nueva versión

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

                                          

Imagen de visitante

Re: nueva versión

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

Imagen de pacomegia

género y número

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

envios gratis a todo el mundo

Imagen de JoaoM

Re: género y número

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

                                          

Imagen de visitante

Re: género y número

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