De números a letras, la macro se podría modificar

Esta pregunta y respuesta la tome del experto: DanteAmor, en mi anterior pregunta

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

A la macro mejorada que dice 1999,999999.99

Le añadí "soles", Se podría mejorar lo señalado en color rojo. Gracias por las repsuestas

2 Respuestas

Respuesta
4

Quién determina cómo poner los centavos depende de cada país o cómo se va a utilizar.

Pero lo que necesites puedo adaptarlo.

Si no quieres los centavos o céntimos, entonces pon ejemplos de cómo quieres el resultado.

Hice algunos cambios, revisa y si hay algún texto que no te haga sentido, pones el ejemplo y cómo debería decir y busco la manera de corregir el código.

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, letracentimos As String
  Dim Preposicion As String
  Dim NumCentimos As Double
  Dim Letra As String
  Const Maximo = 1999999999999.99
  Moneda = "Sol"         'Nombre de Moneda (Singular)
  Monedas = "Soles"       '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
    '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
        letracentimos = Preposicion & " " & Format(NumCentimos, "00") & "/100"
      End If
    End If
'    If Right(Letra, 9) = "Millones " Then
'      Letra = Letra & "de "
'    End If
    'Regresar el resultado final de la conversión
    CONVERTIRNUM = UCase(Letra & " " & letracentimos & " " & Monedas)
  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 Double) As String
  Dim Unidades, Decenas, Centenas
  Dim Resultado As String
  '**************************************************
  ' Nombre de los números
  '**************************************************
  Unidades = Array("", "Uno", "Dos", "Tres", "Cuatro", "Cinco", "Seis", "Siete", "Ocho", "Nueve", "Diez", "Once", "Doce", "Trece", "Catorce", "Quince", "Dieciséis", "Diecisiete", "Dieciocho", "Diecinueve", "Veinte", "Veintiun", "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
Respuesta
1

Observe este ejemplo:

Función del amigo DANTE

¿

? CONVERTIRNUM(1.53, true)
Uno con cincuenta y tres soles (lo pasé a minúscula porque TodoExpertos rechaza todo en mayúsculas)

Función Eperez

¿

? Convertir(1.53)
Un sol con cincuenta y tres céntimos

Mi pregunta es ¿Cuál es la forma correcta para su país?

Le adjunto otros ejemplos:

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas