Excel Convertir cantidad en números de Pesos Mexicanos a texto

He explorado la opción de spellnumber de windows pero no está correcto el código por lo que parece para generar pesos mexicanos, necesito poder crear una formula que por ejemplo, si yo le pongo:
$47,453.54 pesos
Que al poner esta o cualquier cantidad, me convierta a:
Cuarenta y siete mil cuatrocientos cincuenta y tres pesos (54/100 mxn)
Les agradezco mucho su ayuda, he buscado en internet y no he encontrado algo que sirva, y esta solución estoy seguro le servirá a mucha gente

1 Respuesta

Respuesta
3

Te comparto esta función que la adapté a tu muestra. Probala y comentame si cumple con tus requisitos.

Aquí una muestra de los resultados, según tu ejemplo:

Function NumLetras(Valor As Currency)
Dim Cantidad As Currency, Centavos As Currency
Dim Digito As Byte, PrimerDigito As Byte, SegundoDigito As Byte, TercerDigito As Byte, NumeroBloques As Byte, BloqueCero As Byte
Dim Bloque As String
Dim ValorEntero As Long
Dim Unidades As Variant, Decenas As Variant, Centenas As Variant, I As Variant
Valor = Round(Valor, 2)
Cantidad = Int(Valor)
ValorEntero = Cantidad
Centavos = (Valor - Cantidad) * 100
Unidades = Array("un", "dos", "tres", "cuatro", "cinco", "seis", "siete", "ocho", "nueve", "diez", "once", "doce", "trece", "catorce", "quince", "dieciseis", "diecisiete", "dieciocho", "diecinueve", "veinte", "veintún", "veintidos", "veintitres", "veinticuatro", "veinticinco", "veintiseis", "veintisiete", "veintiocho", "veintinueve")
Decenas = Array("diez", "veinte", "treinta", "cuarenta", "cincuenta", "sesenta", "setenta", "ochenta", "noventa")
Centenas = Array("ciento", "doscientos", "trescientos", "cuatrocientos", "quinientos", "seiscientos", "setecientos", "ochocientos", "novecientos")
NumeroBloques = 1
Do
    PrimerDigito = 0
    SegundoDigito = 0
    TercerDigito = 0
    Bloque = ""
    BloqueCero = 0
    For I = 1 To 3
        Digito = Cantidad Mod 10
        If Digito <> 0 Then
            Select Case I
            Case 1
                Bloque = " " & Unidades(Digito - 1)
                PrimerDigito = Digito
            Case 2
                If Digito <= 2 Then
                    Bloque = " " & Unidades((Digito * 10) + PrimerDigito - 1)
                Else
                    Bloque = " " & Decenas(Digito - 1) & IIf(PrimerDigito <> 0, " y", Null) & Bloque
                End If
                SegundoDigito = Digito
            Case 3
                Bloque = " " & IIf(Digito = 1 And PrimerDigito = 0 And SegundoDigito = 0, "cien", Centenas(Digito - 1)) & Bloque
                TercerDigito = Digito
            End Select
        Else
            BloqueCero = BloqueCero + 1
        End If
        Cantidad = Int(Cantidad / 10)
        If Cantidad = 0 Then
            Exit For
        End If
    Next I
    Select Case NumeroBloques
        Case 1
            NumLetras = Bloque
        Case 2
            NumLetras = Bloque & IIf(BloqueCero = 3, Null, " mil") & NumLetras
        Case 3
            NumLetras = Bloque & IIf(PrimerDigito = 1 And SegundoDigito = 0 And TercerDigito = 0, " millón", " millones") & NumLetras
    End Select
    NumeroBloques = NumeroBloques + 1
Loop Until Cantidad = 0
NumLetras = Trim(NumLetras) & " pesos (" & Format(Str(Centavos), "00") & "/100 mxn)"
'1ra letra en mayúsculas.
NumLetras = UCase(Left(NumLetras, 1)) & Mid(NumLetras, 2, Len(NumLetras) - 1)
End Function

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas