Pregunta:
En excel, que fórmula debo emplear para convertir una cantidad expresada en moneda a letra?
seven
17 years ago
Tengo una columna que se expresa en pesos (moneda) y necesito que en otra columna esas cantidades las convierta a letra. Esto es para vincular e imprimir recibos de nómina.
Tengo Windows Vista y no lo he podido lograr. Aclaro que ya lo hice en Windows XP, la fórmula =letras(E2,1) me funciona, pero en W. Vista me aparece : ¡VALOR!.
ALGUIEN QUE ME AYUDE POR FAVOR
Cinco respuestas:
JONATHAN PINALES
17 years ago
Abre el excel y el editor de VB (ALT+F11)



crea un nuevo modulo y escribele el siguiente codigo:



Function CantidadEnLetra(tyCantidad As Currency) As String

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

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

CantidadEnLetra = lcBloque

Case 2

CantidadEnLetra = lcBloque & IIf(lnBloqueCero = 3, Null, " MIL") & CantidadEnLetra

Case 3

CantidadEnLetra = lcBloque & IIf(lnPrimerDigito = 1 And lnSegundoDigito = 0 And lnTercerDigito = 0, " MILLON", " MILLONES") & CantidadEnLetra

End Select

lnNumeroBloques = lnNumeroBloques + 1

Loop Until lyCantidad = 0

CantidadEnLetra = "(" & CantidadEnLetra & IIf(tyCantidad > 1, " PESOS ", " PESO ") & Format(Str(lyCentavos), "00") & "/100 M.N. )"

End Function



ahora regresate a excel y solo busca la formula

CANTIDADENLETRA



Saludos
elizabeth monserrat
11 years ago
Mil gracias funciona perfecto
Deckard
17 years ago
Estuve revisando en las funciones del Excel de Office 2007, y no encontré referencias a esa funcion 'letras()'.

Estas seguro que no tenias una macro con esa funcion cargada en el Excel del XP?

Porque ahí si, existe una macro que se usa para eso, te paso un link abajo de donde bajar un ejemplo.

Si tenes problemas avisame y te paso una que uso yo...
anonymous
17 years ago
Yo no sabía de una fórmula que hiciera eso, ¿estás usando la misma versión de Microsoft Office? ¿Qué versión hace lo de "=letras(celda)"?

Tengo una hoja de cálculo que hace la función que quieres, si gustas te la puedo enviar, funciona bien aunque no es tan trivial, tienes que incluir una copia de la hoja con la función en cada libro (archivo) dónde desees utilizarlo; si te interesa contáctame: darolu@prodigy.net.mx
anonymous
17 years ago
No seeeeeeeeeeeeeeeeeee


Este contenido se publicó originalmente en Y! Answers, un sitio web de preguntas y respuestas que se cerró en 2021.
Loading...