• 👏 Bienvenido a nuestra comunidad Excel

    ¿Todavía no estás registrado? 😲

    Registrate gratis aquí y podrás:

    💪 Hacer preguntas a los expertos
    ⬇️ Descargar ejemplos y plantillas
    🏅 
    Acceder a contenidos premium

Editar archivo XLAM para habilitar función Números a Letras

Didi83

New member
Hola a [email protected], estoy trabajando una data de contabilidad en la que debo pasar las celdas de números a letras (para luego combinar corespondencia en Word y generar recibos de dinero). Me facilitaron una plantilla con un archvo xlam para "crear" la fórmula "Numero_A_Letra" la cual funciona de maravilla SALVO un par de errores que me gustarian modificar:
1. La moneda de defecto es "Pesos" y no "Soles" (que es la que necesito)
2. El formato de cifra es diferente:
Ejm: cien pesos 00/100, debiendo ser: cien y 00/100 soles
3. Hay faltas ortográficas en los números!!!
Ejm. Veintiun, Veintidos, Veintitres (Veintiún, Veintidós, Veintitrés)

Con las dos primeras me bandeo con formulas SUBSTITUIR y borrando uno que otro dato, pero con las faltas ortográficas no puedo, me obliga a trasladar la info a otra columna y pasarla como texto para luego pasarle el corrector. Revisé un foro de Soporte office cambio de numeros a palabras pero tampoco puedo ajustar los errores.
¿Hay alguna forma de modificar este archivo? ¿o tengo que empezar de cero creando una nueva formula de números a letras?

PD: esta web no me permite adjuntar el archivo xlam porque no soporta esta extensión... ideas?

Mil gracias de antemano
 

Adrian

Well-known member
Hola, un complemento es un archivo de Excel oculto, abre el mismo y ve al editor de VBA, y allí puedes editarlo.
 

Adrian

Well-known member
Paso códgo fuente de @Cacho R

Código:
Function EnLetras(Cantidad As Double, Mon1$, Mon2$) As String
Dim CDU As Integer, Resto As Double
Dim ii As Byte, Divisor As Single
Dim UnoVeintinueve As Variant, TreintaNoventa As Variant, CienNovecientos As Variant
    
UnoVeintinueve = Array("Un", "Dos", "Tres", "Cuatro", "Cinco", "Seis", "Siete", "Ocho", "Nueve", "Diez", "Once", "Doce", "Trece", _
  "Catorce", "Quince", "Dieciseis", "Diecisiete", "Dieciocho", "Diecinueve", "Veinte", "Veintiún", "Veintidos", "Veintitres", _
  "Veinticuatro", "Veinticinco", "Veintiseis", "Veintisiete", "Veintiocho", "Veintinueve")
TreintaNoventa = Array("Treinta", "Cuarenta", "Cincuenta", "Sesenta", "Setenta", "Ochenta", "Noventa")
CienNovecientos = Array("Ciento", "Doscientos", "Trescientos", "Cuatrocientos", "Quinientos", "Seiscientos", "Setecientos", "Ochocientos", "Novecientos")
    
If Cantidad < 0 Then
  EnLetras = "Menos "
  Cantidad = Abs(Cantidad)
End If
    
Resto = Cantidad
    
If Int(Resto) = 0 Then
  EnLetras = EnLetras + "Cero"
  GoTo Centavos
End If
    
For ii = 1 To 3
  Divisor = 10 ^ (3 * (3 - ii))
  CDU = Int(Resto / Divisor)
  Resto = WorksheetFunction.Round(Resto - Divisor * CDU, 2)
  If CDU = 0 Then GoTo OtroII
  If CDU = 1 Then
    If ii = 1 Then EnLetras = EnLetras + "Un Millón "
    If ii = 2 Then EnLetras = EnLetras + "Un Mil "
    If ii = 3 Then EnLetras = EnLetras + "Un "
    GoTo OtroII
  End If
  If CDU = 100 Then
    If ii = 1 Then EnLetras = EnLetras + "Cien Millones "
    If ii = 2 Then EnLetras = EnLetras + "Cien Mil "
    If ii = 3 Then EnLetras = EnLetras + "Cien "
    GoTo OtroII
  End If
  If CDU > 100 Then
    EnLetras = EnLetras + CienNovecientos(Int(CDU / 100)) + " "
    CDU = CDU - 100 * Int(CDU / 100)
  End If
  If CDU > 29 Then
    EnLetras = EnLetras + TreintaNoventa(Int(CDU / 10) - 2) + " "
    CDU = CDU - 10 * Int(CDU / 10)
    If CDU > 0 Then EnLetras = EnLetras + "y "
  End If
  If CDU > 1 Then
    EnLetras = EnLetras + UnoVeintinueve(CDU)
  ElseIf CDU = 1 Then
    EnLetras = EnLetras + UnoVeintinueve(CDU)
  End If
  If ii = 1 Then EnLetras = EnLetras + " Millones "
  If ii = 2 Then EnLetras = EnLetras + " Mil "

OtroII:
Next ii

Centavos:
Resto = WorksheetFunction.Round(100 * Resto, 0)

If Int(Cantidad) Mod 1000000 = 0 And Int(Cantidad) <> 0 Then
  EnLetras = Trim(EnLetras) + " de " & Mon2
ElseIf Int(Cantidad) = 1 Then
  EnLetras = Trim(EnLetras) + " " & Mon1
Else
  EnLetras = Trim(EnLetras) + " " & Mon2
End If

EnLetras = EnLetras + " con " + CStr(Resto) + "/100"
End Function
 

Didi83

New member
Muchisimas gracias @Adrian , lamentablemente me acabo de dar cuenta que el xlam tiene contraseña, por lo que tengo que hacer desde cero los ajustes... no soy buena en esto, pero creo que tengo que entrar al excel e ingresar al VBA con alt+F11, insertar un nuevo modulo y luego salir con alt+Q correcto?
Cómo puedo hacer ese módulo personalizado a soles, con el formato de cifra correcto y con las correcciones ortográficas?
 

ServandoV

Well-known member
Hola Didi83 (y Adrian)

Si lo que quieres es usar correspondencia combinada Entre Excel y Word, dejame decirte que Word tiene la facilidad que no tiene Excel de darte las cantidades en letras, y todo esta en poner un simple formato.
Si quieres más información comenta.

Saludos
Servando Villalón
 

Didi83

New member
Hola Didi83 (y Adrian)

Si lo que quieres es usar correspondencia combinada Entre Excel y Word, dejame decirte que Word tiene la facilidad que no tiene Excel de darte las cantidades en letras, y todo esta en poner un simple formato.
Si quieres más información comenta.

Saludos
Servando Villalón
Siiii por favor!!!!
 

ServandoV

Well-known member
Didi, teclea por favor aquí cómo quieres que te muestre la información numérica, para darte los pasos de lo que tienes que hacer.
Otro detalle que necesito preguntarte, ¿sabes cómo editar los campos que insertas?, es decir, ¿sabes editar los campos numéricos para que te de el formato deseado, ejemplo {\# #,###.00} ?
¿Sabes utilizar la tecla Shift+F9 en la combinación de correspondencia?

Necesito saber que tanto te tengo que explicar o qué me puedo ahorrar.


Saludos
Servando Villalón
 

Didi83

New member
Didi, teclea por favor aquí cómo quieres que te muestre la información numérica, para darte los pasos de lo que tienes que hacer.
Otro detalle que necesito preguntarte, ¿sabes cómo editar los campos que insertas?, es decir, ¿sabes editar los campos numéricos para que te de el formato deseado, ejemplo {\# #,###.00} ?
¿Sabes utilizar la tecla Shift+F9 en la combinación de correspondencia?

Necesito saber que tanto te tengo que explicar o qué me puedo ahorrar.


Saludos
Servando Villalón
Gracias @ServandoV , si deseas empezar desde kinder no me opongo... explicame como para niño por favor.
Lo que necesito es:
Dice: S/.122.00
Debe Decir: Ciento veintidós y 00/100 Soles

Shift + F9 ni idea, pero quiero aprender
 

ServandoV

Well-known member
Didi
Voy a pedir algo que nunca pensé hacer en un foro. Debido a que este es un foro de Excel y no de Word y además por lo extenso del tema, te sugiero que mejor pasemos esto a lo privado.
Dadas las facilidades que hoy tiene el foro de editar los mensajes, me atrevo a poner solo por un rato mi correo, y en cuanto reciba respuesta tuya (por el correo) lo borraré.
Mándame un correo a: [Editado]
No tardes por favor

Saludos
Servando Villalón
 
Última edición:

Didi83

New member
Gracias @Héctor Miguel , lamentablemente esa "salida" tiene sus inconvenientes con algunas veintenas pues o las pone con falta ortográfica o las junta (ejm: veindidósmil cien; seiscientos veintitres; etc.)

Aunque es una buena alternativa -por los números que tengo que manejar- me conviene hacer una macro para tener certeza de que lo que escriba sea correcto sin necesidad de tantas modificaciones o revisiones.
 

Víctor1

Well-known member
Hola a toda la distinguida concurrencia,

Didi83, además de todos los aportes ya hechos, y con permiso del resto de participantes, me permito añadir un comentario de guisa ortográfica (yo también soy algo perfeccionista en ese aspecto) :
...hay faltas ortográficas en los números!!! Ejm. Veintiun, Veintidos, Veintitres (Veintiún, Veintidós, Veintitrés)
Me atrevo a suponer que tienes el mismo problema con "dieciséis" o "veintiséis", que también te aparecen sin acento.

Con esta fórmula:
Código:
=SUSTITUIR(SUSTITUIR(SUSTITUIR(SUSTITUIR(B10;"iseis";"iséis");"itres";"itrés");"idos";"idós");"iun";"iún")
yo he conseguido obviar ese inconveniente. Así pues, sustituyendo este B10 por la celda donde tengas tu output, probablemente conseguirás jubilar al corrector ortográfico, al menos en este aspecto concreto.

Nota: Mi separador de argumentos es ";"
Si no te funciona la fórmula, cambia los ; por ,

Saludos a todos,
 
Arriba