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.

Preguntas similare

Leer las respuestas

#6 excelamedida.com
27/01/2008 - 23:18 | Informe spam
Hola, quiero pensar que los errores que os dá es por los saltos de
linea que se generan automáticamente al escribir lineas un tanto
largas en el foro. Con el código que expongo creo haber solucionado el
problema puesto que he "cortado" las lineas un poco largas.

Pega este código en un módulo "normal", puedes mostar varios tipos de
resultados, utiliza para mostar un tipo de resultado "=enletras(A1)",
para mostar otro tipo de resultado "=enletras(A1;1)" y así hasta
"=enletras(A1;4)" elige el que más te guste. Por si las moscas decir
que en A1 tiene que estar el número a convertir y en otro celda poner
la formula.

De todas formas a los que dicen que no les ha funcionado me podríais
decir que error os sale?, que os muestra? contra más detalles me deis
mejor, vale?

Un saludo
JJ Elizalde

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
Respuesta Responder a este mensaje
#7 De_Corando.
28/01/2008 - 04:12 | Informe spam
Un saludo , JJ Elizalde

Ya encontre mi error, el cual estaba en copiar tambien las siguientes
palabras: " Option Explicit ", y no debe ser asi, sino empezar con ...

Function EnLetras(Valor, Optional ByVal Tipo As Byte = 1) _

Te comento ademas que este me parece mas conveniente pues alcanza
cantidades mas altas. miles de billones, etc.

Buenas noches.
Respuesta Responder a este mensaje
#8 octaviano.gil
21/02/2008 - 01:14 | Informe spam
On 27 ene, 16:18, "excelamedida.com" wrote:
Hola, quiero pensar que los errores que os dá es por los saltos de
linea que se generan automáticamente al escribir lineas un tanto
largas en el foro. Con el código que expongo creo haber solucionado el
problema puesto que he "cortado" las lineas un poco largas.

Pega este código en un módulo "normal", puedes mostar varios tipos de
resultados, utiliza para mostar un tipo de  resultado "=enletras(A1)",
para mostar otro tipo de resultado "=enletras(A1;1)" y así hasta
"=enletras(A1;4)" elige el que más te guste. Por si las moscas decir
que en A1 tiene que estar el número a convertir y en otro celda poner
la formula.

De todas formas a los que dicen que no les ha funcionado me podríais
decir que error os sale?, que os muestra? contra más detalles me deis
mejor, vale?

Un saludo
JJ Elizalde




Hola JJ

Yo estoy usando el sistema decima de Mexico el cual cambia al de
Europa o España, los decimales se separan con un punto (.) y los miles
con una coma (,). Una vez explicado esto quiero decirte que cuando
tengo mi teclado configurado a la configuración de Español (España) la
formula funciona muy bien (le cambie euros por pesos) y me da la
opcion de poner el texto en las opciones que incluiste en el código,
pero cuando esta el teclado en la la configuración de Español (México)
estas opciones no funcionan puesto que al poner la variante (;) no se
reconoce y marca error.

Sabes como podría resolver esto de manera permanente ay que comparto
archivos y estos a llegar a otra PC con el teclado configurado a
México pues no funcionaria.

De antemano Gracias.

Octavio
Respuesta Responder a este mensaje
#9 octaviano.gil
21/02/2008 - 01:53 | Informe spam
On 20 feb, 18:14, wrote:
On 27 ene, 16:18, "excelamedida.com" wrote:





> Hola, quiero pensar que los errores que os dá es por los saltos de
> linea que se generan automáticamente al escribir lineas un tanto
> largas en el foro. Con el código que expongo creo haber solucionado el
> problema puesto que he "cortado" las lineas un poco largas.

> Pega este código en un módulo "normal", puedes mostar varios tipos de
> resultados, utiliza para mostar un tipo de  resultado "=enletras(A1)",
> para mostar otro tipo de resultado "=enletras(A1;1)" y así hasta
> "=enletras(A1;4)" elige el que más te guste. Por si las moscas decir
> que en A1 tiene que estar el número a convertir y en otro celda poner
> la formula.

> De todas formas a los que dicen que no les ha funcionado me podríais
> decir que error os sale?, que os muestra? contra más detalles me deis
> mejor, vale?

> Un saludo
> JJ Elizalde

Hola JJ

Yo estoy usando el sistema decima de Mexico el cual cambia al de
Europa o España, los decimales se separan con un punto (.) y los miles
con una coma (,). Una vez explicado esto quiero decirte que cuando
tengo mi teclado configurado a la configuración de Español (España) la
formula funciona muy bien (le cambie euros por pesos) y me da la
opcion de poner el texto en las opciones que incluiste en el código,
pero cuando esta el teclado en la la configuración de Español (México)
estas opciones no funcionan puesto que al poner la variante (;) no se
reconoce y marca error.

Sabes como podría resolver esto de manera permanente ay que comparto
archivos y estos a llegar a otra PC con el teclado configurado a
México pues no funcionaria.

De antemano Gracias.

Octavio- Ocultar texto de la cita -

- Mostrar texto de la cita -




Hola,

Ya encontre la respuesta a mi problemilla.

Si estas utilizando el teclado con configuración Latinoamericana
tendras que poner una coma (,) para separa la variable de la celda y
asi obtener el resultado que deses. Ya sea tood en "minusculas", o
todo en "MAYUSCULAS", tipo Título o como le llaman "Nombre Propio" o
como oración "Primer letra mayúscula".

Es algo truculento Excel cuando manejas diferentes idiomas en el
teclado. Espero esto le sirva

Hasta luego.
email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una pregunta AnteriorRespuesta Tengo una respuesta
Search Busqueda sugerida