Macro para Excel que agrega la función de números a texto
- Agregar una macro nueva con el nombre PesosMN
- Modificar la macro en Visual Basic con el código de abajo
- Agregar a una celda la formula =PesosMN(A1) donde A1 es la celda con la cantidad 12354565.012 que daría la función el resultado DOCE MILLONES TRESCIENTOS CINCUENTA Y CUATRO MIL QUINIENTOS SESENTA Y CINCO PESOS 01/100 M.N.
- Puedes usar la versión descargando el siguiente archivo que ya tiene la función PesosMN incluida PesosMN.xlsm
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
‘rnl
‘If PesosMN = Chr(34) Then
‘PesosMN = lcBloque & IIf(lnBloqueCero = 3, Null, ” MIL”)
‘Else
‘PesosMN = lcBloque & IIf(lnBloqueCero = 3, Null, ” MIL”) & PesosMN
‘End If
‘rnl
PesosMN = lcBloque & IIf(lnBloqueCero = 3, Null, ” MIL”) & PesosMN
‘rnl
‘duda = lcBloque & IIf(lnBloqueCero = 3, Null, ” MIL”) & PesosMN
‘duda = lcBloque ::::tien UN
‘duda = IIf(lnBloqueCero = 3, Null, ” MIL”)
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 = “SON: (” & PesosMN & IIf(tyCantidad > 1, ” PESOS “, ” PESO “) & Format(Str(lyCentavos), “00?) & “/100 M.N.)”
‘PesosMN = ” ” & PesosMN & IIf(tyCantidad > 1, ” PESOS “, ” PESO “) & Format(Str(lyCentavos), “00”) & “/100 M.N. ”
‘PesosMN = PesosMN & IIf(tyCantidad > 1, ” PESOS “, ” PESO “) & Format(Str(lyCentavos), “00”) & “/100 M.N. ” & duda
PesosMN = PesosMN & IIf(tyCantidad > 1, ” PESOS “, ” PESO “) & Format(Str(lyCentavos), “00”) & “/100 M.N. ”
PesosMN = Replace(PesosMN, Chr(34), “”, , , vbTextCompare)
End Function