Convertir números a letras para Excel 2003

27/01/2008 - 13:49 por Facon | Informe spam
Hola a todos.

Estoy buscando una macro o módulo en visual basic que funcione
en Microsoft Excel 2003 para onvertir números con decimales a
letras.

Por internet he encontrado varios pero la mayoria o no funcionan
o tienen fallos de conversión y además no son para la moneda euro,
aunque esto último se puede editar.

Donde podría encontrar una macro que realmente funcione?

Gracias y un saludo

Facon



A ciertas edades ya no se aprenden más
cosas, mas bien, se olvidan alguna de ellas.
 

Leer las respuestas

#1 excelamedida.com
27/01/2008 - 16:21 | Informe spam
Hola Facon,
Pega este código en un módulo "normal" y para utilizarlo utiliza para
mostar un tipo de resultado "=enletras(A1)", para mostar otro tipo de
resultado "=enletras(A1;1)" y así hasta "=enletras(A1;4)"

Option Explicit


Function EnLetras(Valor, Optional ByVal Tipo As Byte = 1) As String
'funcion Principal '
If Not IsNumeric(Valor) Then
EnLetras = "¡ La referencia no es valor numérico !!!":
Exit Function
End If: Dim Moneda As String, Fracs As String, Cents As Integer
If Int(Abs(Valor)) = 1 Then Moneda = " Euro" Else Moneda = " Euros"
If Right(Letras(Abs(Int(Valor))), 6) = "illón " Or _
Right(Letras(Abs(Int(Valor))), 8) = "illones " Then Moneda = "de" &
Moneda
Cents = Application.Round(Abs(Valor) - Int(Abs(Valor)), 2) * 100
If Cents = 1 Then Fracs = " céntimo de Euro" Else Fracs = "
céntimos
de Euro"
If Cents = 0 Then Fracs = "" Else Fracs = " con " & Letras(Cents) &
Fracs
EnLetras = Letras(Int(Abs(Valor))) & Moneda & Fracs
If Valor < 0 Then EnLetras = "menos " & EnLetras
If Tipo = 2 Then EnLetras = UCase(EnLetras) ' TODO EN MAYUSCULAS '
If Tipo = 3 Then EnLetras = StrConv(EnLetras, vbProperCase) ' Todo
Como Nombre Propio '
If Tipo = 4 Then EnLetras = UCase(Left(EnLetras, 1)) &
Mid(EnLetras,
2)
'Primera letra en mayuscula SOLAMENTE '
EnLetras = "(" & EnLetras & ")"
End Function
Private Function Letras(Valor) As String ' Función Auxiliar [uso
'exclusivo'de la funcion 'principal'] '
Select Case Int(Valor)
Case 0: Letras = "cero"
Case 1: Letras = "un"
Case 2: Letras = "dos"
Case 3: Letras = "tres"
Case 4: Letras = "cuatro"
Case 5: Letras = "cinco"
Case 6: Letras = "seis"
Case 7: Letras = "siete"
Case 8: Letras = "ocho"
Case 9: Letras = "nueve"
Case 10: Letras = "diez"
Case 11: Letras = "once"
Case 12: Letras = "doce"
Case 13: Letras = "trece"
Case 14: Letras = "catorce"
Case 15: Letras = "quince"
Case Is < 20: Letras = "dieci" & Letras(Valor - 10)
Case 20: Letras = "veinte"
Case Is < 30: Letras = "veinti" & Letras(Valor - 20)
Case 30: Letras = "treinta"
Case 40: Letras = "cuarenta"
Case 50: Letras = "cincuenta"
Case 60: Letras = "sesenta"
Case 70: Letras = "setenta"
Case 80: Letras = "ochenta"
Case 90: Letras = "noventa"
Case Is < 100: Letras = Letras(Int(Valor \ 10) * 10) & " y " &
Letras(Valor Mod 10)
Case 100: Letras = "cien"
Case Is < 200: Letras = "ciento " & Letras(Valor - 100)
Case 200, 300, 400, 600, 800: Letras = Letras(Int(Valor \ 100)) &
"cientos"
Case 500: Letras = "quinientos"
Case 700: Letras = "setecientos"
Case 900: Letras = "novecientos"
Case Is < 1000: Letras = Letras(Int(Valor \ 100) * 100) & " " &
Letras(Valor Mod 100)
Case 1000: Letras = "mil"
Case Is < 2000: Letras = "mil " & Letras(Valor Mod 1000)
Case Is < 1000000: Letras = Letras(Int(Valor \ 1000)) & " mil"
If Valor Mod 1000 Then Letras = Letras & " " & Letras(Valor Mod
1000)
Case 1000000: Letras = "un millón "
Case Is < 2000000: Letras = "un millón " & Letras(Valor Mod
1000000)
Case Is < 1000000000000#: Letras = Letras(Int(Valor / 1000000)) &
" millones "
If (Valor - Int(Valor / 1000000) * 1000000) _
Then Letras = Letras & Letras(Valor - Int(Valor / 1000000) *
1000000)
Case 1000000000000#: Letras = "un billón "
Case Is < 2000000000000#
Letras = "un billón " & Letras(Valor - Int(Valor /
1000000000000#) * 1000000000000#)
Case Else: Letras = Letras(Int(Valor / 1000000000000#)) & "
billones "
If (Valor - Int(Valor / 1000000000000#) * 1000000000000#) _
Then Letras = Letras & " " & Letras(Valor - Int(Valor /
1000000000000#) * 1000000000000#)
End Select
End Function


Si tienes alguna dúda al respecto o si se han cortado las lineas y no
sabes unirlas, me dices y te pongo el archivo en mi web.
Un saludo,
JJ Elizalde

Hola a todos.

Estoy buscando una macro o módulo en visual basic que funcione
en Microsoft Excel 2003 para onvertir números con decimales a
letras.

Por internet he encontrado varios pero la mayoria o no funcionan
o tienen fallos de conversión y además no son para la moneda euro,
aunque esto último se puede editar.

Donde podría encontrar una macro que realmente funcione?

Gracias y un saludo

Facon

A ciertas edades ya no se aprenden más
cosas, mas bien, se olvidan alguna de ellas.

Preguntas similares