COMO CONVERTIR UN NUMERO EN TEXTO

17/10/2005 - 23:16 por LUIS GLEZ | Informe spam
DESEO CONVERTIR EL RESULTADO DE UNA CELDA (NUMERO) A TEXTO. ESTA FUNCION NO
ESTA EN LAS PLANTILLAS DE EXEL O AL MENOS NO LA HE VISTO

Preguntas similare

Leer las respuestas

#1 Héctor Miguel
17/10/2005 - 23:23 | Informe spam
hola, luis !

... CONVERTIR... (NUMERO) A TEXTO [...]



-> si solo te interesa una o dos o tres cantidades a convertir...
podrias 'echar a perder' +/- 12 0 15 celdas por conversion usando formulas y concatenando textos
o... +/- 30 o 35 'nombres definidos' [mismo procedimiento anterior]

-> si vas a necesitar un mayor numero de conversiones... probablemente sera conveniente una funcion personalizada
te paso unos apuntes al final ;)

si cualquier duda [o informacion adicional]... comentas?
saludos,
hector.

podrias 'echarle un ojo' a las siguientes direcciones [funciones para 'convertir' numeros a texto]:

-> la 'mas famosa' es la de 'el Guille':
http://www.elguille.info/vb/utilida...m2Text.htm el archivo se descarga en:
http://downloads.elguille.info/Baja...m2Text.zip
-> nota: esta funcion [aunque es la mas famosa] tiene varias 'fugas/bugs/omisiones/errores/...' :-((
si te decidieras por ella... comentas? [para proporcionarte algunos 'tips'] ;)

-> una mas de las 'famosas' la encuentras en...
http://www.sistemaslym.net/vba/exce...etras.html el archivo se descarga en:
http://www.sistemaslym.net/vba/arch...letras.zip

-> o puedes probar con el algoritmo que expongo al final, publicado por Claudio Sepulveda ['bastante' tiempo ha]...
[aunque no estoy seguro de su autoria] es de los mas 'sencillos' y faciles de 'adaptar' que me ha tocado conocer por estos 'lares'
puedes 'personalizar' para [practicamente] CUALQUIER 'necesidad' en las primeras 12 lineas.
ya 'incluye' un argumento 'opcional' para la 'salida' del texto en mayusculas/minusculas/... :))
->solo monedas del 'genero' masculino<-... 'trabajar' con el genero femenino 'requiere quemar' [unas cuantas] mas neuronas :))
existen otros diversos algoritmos [desde 'sencillos' hasta 'complejos'] para otras tambien diversas 'necesidades'...
=>copialo en un modulo 'normal' y 'llama' a la funcion como a cualquier otra funcion de hoja de calculo< =>TEN CUIDADO con los 'saltos de linea' si copias/pegas el codigo desde la ventana del mensaje<
en un modulo de codigo 'normal' ==Function EnLetras(Valor, Optional ByVal Tipo As Byte = 1) As String ' Funcion Principal '
If Not IsNumeric(Valor) Then
EnLetras = "¡ La referencia no es valor o... 'excede' la precisión !!!": Exit Function
End If: Dim Moneda As String, Fracs As String, Cents As Integer
If Int(Abs(Valor)) = 1 Then Moneda = " peso" Else Moneda = " pesos"
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 = " centavo" Else Fracs = " centavos"
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) ' Primer 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
#2 Alejandro
18/10/2005 - 14:32 | Informe spam
Perdón pero pegué la función que comentás a lo último dentro de un módulo de
VBA pero como lo hago funcionar??? Muchas gracias


"Héctor Miguel" escribió en el mensaje
news:
hola, luis !

... CONVERTIR... (NUMERO) A TEXTO [...]



-> si solo te interesa una o dos o tres cantidades a convertir...
podrias 'echar a perder' +/- 12 0 15 celdas por conversion usando
formulas y concatenando textos
o... +/- 30 o 35 'nombres definidos' [mismo procedimiento anterior]

-> si vas a necesitar un mayor numero de conversiones... probablemente
sera conveniente una funcion personalizada
te paso unos apuntes al final ;)

si cualquier duda [o informacion adicional]... comentas?
saludos,
hector.

podrias 'echarle un ojo' a las siguientes direcciones [funciones para
'convertir' numeros a texto]:

-> la 'mas famosa' es la de 'el Guille':
http://www.elguille.info/vb/utilida...m2Text.htm el archivo se
descarga en:

http://downloads.elguille.info/Baja...m2Text.zip
-> nota: esta funcion [aunque es la mas famosa] tiene varias
'fugas/bugs/omisiones/errores/...' :-((
si te decidieras por ella... comentas? [para proporcionarte algunos
'tips'] ;)

-> una mas de las 'famosas' la encuentras en...
http://www.sistemaslym.net/vba/exce...etras.html el archivo se
descarga en:
http://www.sistemaslym.net/vba/arch...letras.zip

-> o puedes probar con el algoritmo que expongo al final, publicado por
Claudio Sepulveda ['bastante' tiempo ha]...
[aunque no estoy seguro de su autoria] es de los mas 'sencillos' y
faciles de 'adaptar' que me ha tocado conocer por estos 'lares'
puedes 'personalizar' para [practicamente] CUALQUIER 'necesidad' en las
primeras 12 lineas.
ya 'incluye' un argumento 'opcional' para la 'salida' del texto en
mayusculas/minusculas/... :))
->solo monedas del 'genero' masculino<-... 'trabajar' con el genero
femenino 'requiere quemar' [unas cuantas] mas neuronas :))
existen otros diversos algoritmos [desde 'sencillos' hasta 'complejos']
para otras tambien diversas 'necesidades'...
=>copialo en un modulo 'normal' y 'llama' a la funcion como a cualquier
otra funcion de hoja de calculo<> =>TEN CUIDADO con los 'saltos de linea' si copias/pegas el codigo desde
la ventana del mensaje<>
en un modulo de codigo 'normal' ==> Function EnLetras(Valor, Optional ByVal Tipo As Byte = 1) As String '
Funcion Principal '
If Not IsNumeric(Valor) Then
EnLetras = "¡ La referencia no es valor o... 'excede' la precisión
!!!": Exit Function
End If: Dim Moneda As String, Fracs As String, Cents As Integer
If Int(Abs(Valor)) = 1 Then Moneda = " peso" Else Moneda = " pesos"
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 = " centavo" Else Fracs = " centavos"
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) '
Primer 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
#3 Alejandro
18/10/2005 - 14:54 | Informe spam
Perdón ya lo pude usar!!!. Hay que colocar en la celda que querramos
=Enletras(xx) siendo xx la celda donde se encuentra el número.
Ahora la consulta es como hago para que funcionen las opciones, yo necesito
que la primera letra sea en mayúscula. En el código aparece como Tipo = 4,
Cómo aplico esta opción??? Muchas gracias


"Alejandro" escribió en el mensaje
news:uL0Oq$
Perdón pero pegué la función que comentás a lo último dentro de un módulo
de VBA pero como lo hago funcionar??? Muchas gracias


"Héctor Miguel" escribió en el mensaje
news:
hola, luis !

... CONVERTIR... (NUMERO) A TEXTO [...]



-> si solo te interesa una o dos o tres cantidades a convertir...
podrias 'echar a perder' +/- 12 0 15 celdas por conversion usando
formulas y concatenando textos
o... +/- 30 o 35 'nombres definidos' [mismo procedimiento anterior]

-> si vas a necesitar un mayor numero de conversiones... probablemente
sera conveniente una funcion personalizada
te paso unos apuntes al final ;)

si cualquier duda [o informacion adicional]... comentas?
saludos,
hector.

podrias 'echarle un ojo' a las siguientes direcciones [funciones para
'convertir' numeros a texto]:

-> la 'mas famosa' es la de 'el Guille':
http://www.elguille.info/vb/utilida...m2Text.htm el archivo se
descarga en:

http://downloads.elguille.info/Baja...m2Text.zip
-> nota: esta funcion [aunque es la mas famosa] tiene varias
'fugas/bugs/omisiones/errores/...' :-((
si te decidieras por ella... comentas? [para proporcionarte algunos
'tips'] ;)

-> una mas de las 'famosas' la encuentras en...
http://www.sistemaslym.net/vba/exce...etras.html el archivo se
descarga en:
http://www.sistemaslym.net/vba/arch...letras.zip

-> o puedes probar con el algoritmo que expongo al final, publicado por
Claudio Sepulveda ['bastante' tiempo ha]...
[aunque no estoy seguro de su autoria] es de los mas 'sencillos' y
faciles de 'adaptar' que me ha tocado conocer por estos 'lares'
puedes 'personalizar' para [practicamente] CUALQUIER 'necesidad' en
las primeras 12 lineas.
ya 'incluye' un argumento 'opcional' para la 'salida' del texto en
mayusculas/minusculas/... :))
->solo monedas del 'genero' masculino<-... 'trabajar' con el genero
femenino 'requiere quemar' [unas cuantas] mas neuronas :))
existen otros diversos algoritmos [desde 'sencillos' hasta
'complejos'] para otras tambien diversas 'necesidades'...
=>copialo en un modulo 'normal' y 'llama' a la funcion como a
cualquier otra funcion de hoja de calculo<>> =>TEN CUIDADO con los 'saltos de linea' si copias/pegas el codigo
desde la ventana del mensaje<>>
en un modulo de codigo 'normal' ==>> Function EnLetras(Valor, Optional ByVal Tipo As Byte = 1) As String '
Funcion Principal '
If Not IsNumeric(Valor) Then
EnLetras = "¡ La referencia no es valor o... 'excede' la precisión
!!!": Exit Function
End If: Dim Moneda As String, Fracs As String, Cents As Integer
If Int(Abs(Valor)) = 1 Then Moneda = " peso" Else Moneda = " pesos"
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 = " centavo" Else Fracs = " centavos"
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)
' Primer 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
#4 Héctor Miguel
18/10/2005 - 16:47 | Informe spam
hola, Alejandro !

... ya lo pude usar!!!. Hay que colocar en la celda que querramos =Enletras(xx) siendo xx la celda donde se encuentra el numero.
... como hago para que funcionen las opciones... que la primera letra sea en mayuscula... como Tipo = 4, Como aplico esta opcion?



=enletras(xx,4) o... =enletras(xx;4) [segun tu separador de argumentos] ;)

saludos,
hector.
Respuesta Responder a este mensaje
#5 Alejandro
18/10/2005 - 17:03 | Informe spam
"Héctor Miguel" escribió en el mensaje
news:OYNmuL$
hola, Alejandro !

... ya lo pude usar!!!. Hay que colocar en la celda que querramos
=Enletras(xx) siendo xx la celda donde se encuentra el numero.
... como hago para que funcionen las opciones... que la primera letra sea
en mayuscula... como Tipo = 4, Como aplico esta opcion?



=enletras(xx,4) o... =enletras(xx;4) [segun tu separador de
argumentos] ;)

saludos,
hector.

email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida