Redondear valor para convertir a palabras

Para Dante Amor

¿Hola Dan como estas?

Sabes que encontré un código que Ud. Le proporciono a un usuario que es para pasar un valor de moneda a texto ... El código funciona pero resulta que tengo valores que se aproximan.

Ej valor 157966,90616

Así lo muestra en la celda 157.967

Ese valor lo lee como Ciento Cincuenta y Siete Mil Novecientos Sesenta y Seis pesos cuando tiene que leerlo como Ciento Cincuenta y Siete Mil Novecientos Sesenta y Siete pesos...

Le adjunto el hilo donde Ud. Respondió al usuario ahí esta el código ya que si lo pego me aparase demasiados caracteres juntos ¿Qué fórmula aplico para convertir números a letras en excel? .

1 Respuesta

Respuesta
1

No veo el enlace, puedes poner el enlace para ver la macro.

Sal u dos

¿Qué fórmula aplico para convertir números a letras en excel?

Function CONVERTIRNUM(Numero As Double, Optional CentimosEnLetra As Boolean) As String
Dim Moneda As String
Dim Monedas As String
Dim Centimo As String
Dim Centimos As String
Dim Preposicion As String
Dim NumCentimos As Double
Dim Letra As String
Const Maximo = 1999999999999.9
'************************************************************
' Parámetros
'************************************************************
Moneda = "Peso"         'Nombre de Moneda (Singular)
Monedas = "Pesos"       'Nombre de Moneda (Plural)
Centimo = "Centavo"     'Nombre de Céntimos (Singular)
Centimos = "Centavos"   'Nombre de Céntimos (Plural)
Preposicion = "Con"     'Preposición entre Moneda y Céntimos
'************************************************************
'Validar que el Numero está dentro de los límites
If (Numero >= 0) And (Numero <= Maximo) Then
    Letra = NUMERORECURSIVO((Fix(Numero)))              'Convertir el Numero en letras
    'Si Numero = 1 agregar leyenda Moneda (Singular)
    If (Numero = 1) Then
        Letra = Letra & " " '& Moneda
    'De lo contrario agregar leyenda Monedas (Plural)
    Else
        Letra = Letra & " " '& Monedas
    End If
    'NumCentimos = Round((Numero - Fix(Numero)) * 100)   'Obtener los centimos del Numero
    NumCentimos = Round((Numero - Fix(Numero)) * 10)   'Obtener los centimos del Numero
    'Si NumCentimos es mayor a cero inicar la conversión
    If NumCentimos >= 0 Then
        'Si el parámetro CentimosEnLetra es VERDADERO obtener letras para los céntimos
        If CentimosEnLetra Then
            Letra = Letra & " " & Preposicion & " " & NUMERORECURSIVO(Fix(NumCentimos)) 'Convertir los céntimos en letra
            'Si NumCentimos = 1 agregar leyenda Centimos (Singular)
            If (NumCentimos = 1) Then
                Letra = Letra & " " '& Centimo
            'De lo contrario agregar leyenda Centimos (Plural)
            Else
                Letra = Letra & " " '& Centimos
            End If
         'De lo contrario mostrar los céntimos como número
         Else
            If NumCentimos < 10 Then
                'Letra = Letra & " 0" & NumCentimos & "/100"
            Else
                'Letra = Letra & " " & NumCentimos & "/100"
            End If
         End If
    End If
    If Right(Letra, 9) = "Millones " Then
        Letra = Letra & "de "
    End If
    'Regresar el resultado final de la conversión
    CONVERTIRNUM = Letra & " pesos "
Else
    'Si el Numero no está dentro de los límites, entivar un mensaje de error
    CONVERTIRNUM = "ERROR: El número excede los límites."
End If
End Function
Function NUMERORECURSIVO(Numero As Long) As String
Dim Unidades, Decenas, Centenas
Dim Resultado As String
'**************************************************
' Nombre de los números
'**************************************************
Unidades = Array("", "Un", "Dos", "Tres", "Cuatro", "Cinco", "Seis", "Siete", "Ocho", "Nueve", "Diez", "Once", "Doce", "Trece", "Catorce", "Quince", "Dieciséis", "Diecisiete", "Dieciocho", "Diecinueve", "Veinte", "Veintiuno", "Veintidos", "Veintitres", "Veinticuatro", "Veinticinco", "Veintiseis", "Veintisiete", "Veintiocho", "Veintinueve")
Decenas = Array("", "Diez", "Veinte", "Treinta", "Cuarenta", "Cincuenta", "Sesenta", "Setenta", "Ochenta", "Noventa", "Cien")
Centenas = Array("", "Ciento", "Doscientos", "Trescientos", "Cuatrocientos", "Quinientos", "Seiscientos", "Setecientos", "Ochocientos", "Novecientos")
'**************************************************
Select Case Numero
    Case 0
        Resultado = "Cero"
    Case 1 To 29
        Resultado = Unidades(Numero)
    Case 30 To 100
        Resultado = Decenas(Numero \ 10) + IIf(Numero Mod 10 <> 0, " y " + NUMERORECURSIVO(Numero Mod 10), "")
    Case 101 To 999
        Resultado = Centenas(Numero \ 100) + IIf(Numero Mod 100 <> 0, " " + NUMERORECURSIVO(Numero Mod 100), "")
    Case 1000 To 1999
        Resultado = "Mil" + IIf(Numero Mod 1000 <> 0, " " + NUMERORECURSIVO(Numero Mod 1000), "")
    Case 2000 To 999999
        Resultado = NUMERORECURSIVO(Numero \ 1000) + " Mil" + IIf(Numero Mod 1000 <> 0, " " + NUMERORECURSIVO(Numero Mod 1000), "")
    Case 1000000 To 1999999
        Resultado = "Un Millón" + IIf(Numero Mod 1000000 <> 0, " " + NUMERORECURSIVO(Numero Mod 1000000), "")
    Case 2000000 To 1999999999
        Resultado = NUMERORECURSIVO(Numero \ 1000000) + " Millones" + IIf(Numero Mod 1000000 <> 0, " " + NUMERORECURSIVO(Numero Mod 1000000), "")
End Select
NUMERORECURSIVO = Resultado
End Function

Si en la celda tienes esto:

157.967

La función lee 157 pesos. Debido a que está considerando 157 enteros.

Revisa la configuración de excel, Opciones de excel, Avanzadas, Activa la casilla: Usar separadores del sistema.

Ahora en windows, entra al panel de control, Configuración Regional y de idioma, Configuración adicional, Números:

Símbolo decimal, ahí debes tener una coma

Símbolo de separación de miles, ahí debes tener un punto

Vuelve a probar.

Si continúa el problema, entonces regresa a la configuración de excel, Opciones de excel, Avanzadas, Desactiva la casilla: Usar separadores del sistema; en el campo Separador decimales escribe una coma y en el campo Separador de miles escribe un punto

Presiona Aceptar

Vuelve a probar

Dan..

Sabes que no me funciona !! probé los métodos y no pasa nada ...

El valor de la celda se redondea pero la función que escribe  lee el valor si redondear

Que podrá ser?

Saludos

Y si escribes en la celda

157966.90

Revisa que el dato se un número, es decir, que no sea un texto

¡Gracias! Dan

Lo conseguí redondeando el valor con la formula redondear(suma) en la celda y ahí me toma bien la función suya para escribir el valor!!! Gracias Dan por la ayuda..

Saludos

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas