Como puedo transformar un numero a texto español en excel

13/02/2006 - 22:31 por jas1915 | Informe spam
necesito transformar un numero de una suma a texto pero en epañol.

Preguntas similare

Leer las respuestas

#1 Carlos CZ
14/02/2006 - 00:19 | Informe spam
para salir de dudas, verifica con un ejemplo,

pejm, si es .. 22 a veintidos, la veo dificil, a no ser que exista alguna
macro que ya haga esas cosas.

Carlos

"jas1915" escreveu na mensagem
news:
necesito transformar un numero de una suma a texto pero en epañol.
Respuesta Responder a este mensaje
#2 Carlos CZ
14/02/2006 - 00:52 | Informe spam
disculpa, olvida mi mensaje anterior, si se puede, pero va a ser larga la
cosa, 1000, 10000, 1millon,... ,
conclusion: si es repetitivo el asunto,
asi que si es posible que ya este en internet.
la cosa es encontrar esa macro, pero, como?

saludos, Carlos

"Carlos CZ" escreveu na mensagem
news:%
para salir de dudas, verifica con un ejemplo,

pejm, si es .. 22 a veintidos, la veo dificil, a no ser que exista alguna
macro que ya haga esas cosas.

Carlos

"jas1915" escreveu na mensagem
news:
> necesito transformar un numero de una suma a texto pero en epañol.


Respuesta Responder a este mensaje
#3 Hernandez, Roberto
14/02/2006 - 00:53 | Informe spam
En un módulo normal...
sólo ajústala a tus necesidades

'**************************************************************************************
Option Explicit


' Funcion principal


Function LETRA(ByVal MyNumber)
Dim Pesos, Cents, Temp, Number
Dim DecimalPlace, Count

ReDim Place(9) As String 'Crea una matriz
Place(2) = " MIL "
Place(3) = " MILLONES "
Place(4) = " MIL "


' Convierte la cantidad a una cadena
MyNumber = Trim(Str(MyNumber))
Number = MyNumber

' Posicion del punto decimal o cero si no existe
DecimalPlace = InStr(MyNumber, ".")
' Convierte centavos y asigna a MyNumber cantidad en pesos.
If (DecimalPlace > 0) Then
If Mid(Right(MyNumber, 2), 1, 1) <> "." Then
Cents = Trim(Right(MyNumber, 2)) 'Si tiene dos decimales
Else
Cents = Trim(Right(MyNumber, 1)) & "0" 'Si tiene un decimal
End If
MyNumber = Trim(Left(MyNumber, DecimalPlace - 1)) 'Captura los
enteros
End If

Count = 1
Do While MyNumber <> ""
Temp = GetHundreds(Right(MyNumber, 3))
If (Temp <> "") And (Left(MyNumber, 1) <> 0) Then Pesos = Temp
& Place(Count) & Pesos 'Asigna miles o millones
If (Mid(Pesos, 1, 11) = "UN MILLONES") And (Left(Number, 1)
= 1) And (Count = 3) Then Pesos = "UN MILLÓN" & Mid(Pesos, 12, (Len(Pesos) -
11))
If Len(MyNumber) > 3 Then
MyNumber = Left(MyNumber, Len(MyNumber) - 3) 'Extrae
tercias de numeros
Else
MyNumber = ""
End If
Count = Count + 1 'Incrementa el contador
Loop

Select Case Pesos 'Selecciona la terminacion de pesos
Case "": Pesos = "CERO PESOS"
Case "UN": Pesos = "UN PESO"
Case "UN MILLÓN ": Pesos = Pesos & "DE PESOS "
Case "DOS MILLONES ": Pesos = Pesos & "DE PESOS "
Case "TRES MILLONES ": Pesos = Pesos & "DE PESOS "
Case "CUATRO MILLONES ": Pesos = Pesos & "DE PESOS "
Case "CINCO MILLONES ": Pesos = Pesos & "DE PESOS "
Case "SEIS MILLONES ": Pesos = Pesos & "DE PESOS "
Case "SIETE MILLONES ": Pesos = Pesos & "DE PESOS "
Case "OCHO MILLONES ": Pesos = Pesos & "DE PESOS "
Case "NUEVE MILLONES ": Pesos = Pesos & "DE PESOS "
Case "DIEZ MILLONES ": Pesos = Pesos & "DE PESOS "
Case Else
Pesos = Pesos & " PESOS"

End Select

Select Case Cents 'Selecciona la terminacion de centavos
Case ""
Cents = " 00/100 M.N."
Case "UN"
Cents = " 01/100 M.N."
Case Else
Cents = " " & Cents & "/100 M.N."
End Select
LETRA = "(" & Pesos & Cents & ")"
End Function


' Convierte un numero entre 100 y 999 a texto.


Function GetHundreds(ByVal MyNumber)
Dim Result As String

If Val(MyNumber) = 0 Then Exit Function
MyNumber = Right("000" & MyNumber, 3)

' Convierte los cientos.
If (Mid(MyNumber, 1, 1) <> "0") And (Mid(MyNumber, 1, 1) <> "1")
And (Mid(MyNumber, 1, 1) <> "5") And (Mid(MyNumber, 1, 1) <> "7") And
(Mid(MyNumber, 1, 1) <> "9") Then
Result = GetDigit(Mid(MyNumber, 1, 1)) & "CIENTOS "
Else
If (Mid(MyNumber, 1, 1) = "1") And (Mid(MyNumber, 2, 1) = "0")
And (Mid(MyNumber, 3, 1) = "0") Then
Result = "CIEN "
Else
If (Mid(MyNumber, 1, 1) <> "0") Then
Result = "CIENTO "
End If
End If
Select Case Val(Mid(MyNumber, 1, 1))
Case 5: Result = "QUINIENTOS "
Case 7: Result = "SETECIENTOS "
Case 9: Result = "NOVECIENTOS "
Case Else
End Select
End If

' Convierte decenas y unidades.
If Mid(MyNumber, 2, 1) <> "0" Then
Result = Result & GetTens(Mid(MyNumber, 2))
Else
Result = Result & GetDigit(Mid(MyNumber, 3))
End If

GetHundreds = Result
End Function


' Convierte un numero entre 10 y 99 en texto.


Function GetTens(TensText)
Dim Result As String

Result = "" ' Anula el valor temporal de la función.
If Val(Left(TensText, 1)) = 1 Then ' Si el valor esta entre 10 y
19...
Select Case Val(TensText)
Case 10: Result = "DIEZ"
Case 11: Result = "ONCE"
Case 12: Result = "DOCE"
Case 13: Result = "TRECE"
Case 14: Result = "CATORCE"
Case 15: Result = "QUINCE"
Case 16: Result = "DIECISÉIS"
Case 17: Result = "DIECISIETE"
Case 18: Result = "DIECIOCHO"
Case 19: Result = "DIECINUEVE"
Case Else
End Select
Else ' Si el valor está entre 20 y
99...
Select Case Val(Left(TensText, 1))
Case 2:
If Val(Mid(TensText, 2, 1)) = "0" Then
Result = "VEINTE"
Else
Result = "VEINTI"
End If
Case 3: Result = "TREINTA"
Case 4: Result = "CUARENTA"
Case 5: Result = "CINCUENTA"
Case 6: Result = "SESENTA"
Case 7: Result = "SETENTA"
Case 8: Result = "OCHENTA"
Case 9: Result = "NOVENTA"
Case Else
End Select
If (Val(Mid(TensText, 2, 1)) = "0") Or (Val(Mid(TensText, 1,
1)) = "2") Then
Result = Result & GetDigit _
(Right(TensText, 1))
If Result = "VEINTIUN" Then
Result = "VEINTIÚN"
End If
If Result = "VEINTIDOS" Then
Result = "VEINTIDÓS"
End If
If Result = "VEINTITRES" Then
Result = "VEINTITRÉS"
End If
If Result = "VEINTISEIS" Then
Result = "VEINTISÉIS"
End If
Else
Result = Result & " Y " & GetDigit _
(Right(TensText, 1))
End If
End If
GetTens = Result
End Function


' Convierte un numero entre 1 y 99 a texto


Function GetDigit(Digit)
Select Case Val(Digit)
Case 1: GetDigit = "UN"
Case 2: GetDigit = "DOS"
Case 3: GetDigit = "TRES"
Case 4: GetDigit = "CUATRO"
Case 5: GetDigit = "CINCO"
Case 6: GetDigit = "SEIS"
Case 7: GetDigit = "SIETE"
Case 8: GetDigit = "OCHO"
Case 9: GetDigit = "NUEVE"
Case Else: GetDigit = ""
End Select
End Function


"jas1915" escribió en el mensaje
news:
necesito transformar un numero de una suma a texto pero en epañol.
Respuesta Responder a este mensaje
#4 ElProfe
14/02/2006 - 03:16 | Informe spam
Esta opción sirve para Unidades (cosas) masculinas (inventarios) o
femeninas (acciones) o para pesos (masculino) con centavos.

Es una función personalizada que funciona así:
=MontoE(B2,0,"M") 225 Doscientos veinticinco (Unidades-Masculino)
=MontoE(B3,0,"F") 225 Doscientas veinticinco
(Unidades-Femenino)
=MontoE(B4,1,"M") 225.00 Doscientos veinticinco pesos con 00/100 m/cte.
(Pesos con centavos)




Dim SALIDA As String, SAPO As String * 3, SEX As String * 1
Function MontoE(DATO As Double, SITEX As Integer, SEXO As String) As
String
Dim ENTE As String * 12, DECI As String * 3, Letras, DECIMA, SIGNO As
String
Dim CONDE, MILLONES As Integer
SALIDA = ""
If DATO < 0 Then
SIGNO = "M"
Else
SIGNO = ""
End If

DATO = Abs(DATO)
ENTE = Format$(Str(Int(DATO)), "000000000000")
DECI = Format$(Str((DATO - Val(ENTE)) * 100), "00")
SAPO = Mid$(ENTE, 1, 3)
SEX = SEXO
Call SUBNT
If SALIDA <> "" Then
Letras = SALIDA + "mil "
CONDE = 1
MILLONES = 1
End If
SALIDA = ""
SAPO = Mid$(ENTE, 4, 3)
Call SUBNT
If SALIDA <> "" Then
If SALIDA = "un " Then
SALIDA = SALIDA + "millón "
Else
SALIDA = SALIDA + "millones "
End If
CONDE = 1
MILLONES = 0
End If

If SAPO = "000" And Letras <> "" Then
Letras = Letras + "millones "
MILLONES = 0
End If

Letras = Letras + SALIDA
SALIDA = ""
SAPO = Mid$(ENTE, 7, 3)
Call SUBNT
If SALIDA <> "" Then
Letras = Letras + SALIDA + "mil "
CONDE = 0
MILLONES = 0
End If
If SALIDA = "un" Then
Letras = Letras + SALIDA + "mil "
CONDE = 0
MILLONES = 1
End If
SALIDA = ""
SAPO = Mid$(ENTE, 10, 3)
Call SUBNT
If SALIDA <> "" Then
Letras = Letras + SALIDA
CONDE = 0
MILLONES = 0
End If

If SIGNO = "M" Then
Letras = "menos " + Letras
End If

If Letras = "" Then Letras = "cero "
If SITEX = 1 Then
If CONDE = 1 Then
If MILLONES = 1 Then Letras = Letras + "millones "
Letras = Letras + "de pesos "
Else
If (Letras = "Un " Or Letras = "Menos un ") Then
Letras = Letras + "peso "
Else
Letras = Letras + "pesos "
End If
End If
If DECI <> "00" Then
Letras = Letras + "con " & Trim(DECI) & "/100 m/cte."
Else
Letras = Letras + "m/cte."
End If
Else
If CONDE = 1 Then
If MILLONES = 1 Then Letras = Letras + "millones "
End If
SALIDA = ""
SAPO = "0" + DECI
Call SUBNT
If SALIDA <> "" Then
DECIMA = SALIDA
Letras = Letras + "con " + DECIMA
End If
End If

MontoE = UCase(Left(Letras, 1)) + Right(Letras, Len(Letras) - 1)
End Function
Sub SUBNT()
Dim S1, S2, S3 As String * 1, PALABRA As String, CONY As Integer
PALABRA = ""
S1 = Left$(SAPO, 1)
S2 = Mid$(SAPO, 2, 1)
S3 = Right$(SAPO, 1)
If (S1 <> "0") Then
If UCase(SEX) = "F" Then
Select Case S1
Case "1"
PALABRA = "ciento "
If S2 = "0" And S3 = "0" Then PALABRA = "cien "
Case "2"
PALABRA = "doscientas "
Case "3"
PALABRA = "trescientas "
Case "4"
PALABRA = "cuatrocientas "
Case "5"
PALABRA = "quinientas "
Case "6"
PALABRA = "seiscientas "
Case "7"
PALABRA = "setecientas "
Case "8"
PALABRA = "ochocientas "
Case "9"
PALABRA = "novecientas "
End Select
SALIDA = SALIDA + PALABRA
Else
Select Case S1
Case "1"
PALABRA = "ciento "
If S2 = "0" And S3 = "0" Then PALABRA = "cien "
Case "2"
PALABRA = "doscientos "
Case "3"
PALABRA = "trescientos "
Case "4"
PALABRA = "cuatrocientos "
Case "5"
PALABRA = "quinientos "
Case "6"
PALABRA = "seiscientos "
Case "7"
PALABRA = "setecientos "
Case "8"
PALABRA = "ochocientos "
Case "9"
PALABRA = "novecientos "
End Select
SALIDA = SALIDA + PALABRA
End If
End If
S1 = Mid$(SAPO, 2, 1)
S2 = Mid$(SAPO, 3, 1)
If S1 <> "" And S1 <> "0" Then
CONY = 0
If S1 = "1" Then
Select Case S2
Case "0"
PALABRA = "diez "
S2 = "0"
Case "1"
PALABRA = "once "
S2 = "0"
Case "2"
PALABRA = "doce "
S2 = "0"
Case "3"
PALABRA = "trece "
S2 = "0"
Case "4"
PALABRA = "catorce "
S2 = "0"
Case "5"
PALABRA = "quince "
S2 = "0"
Case "6"
PALABRA = "dieciséis "
S2 = "0"
Case "7"
PALABRA = "diecisiete "
S2 = "0"
Case "8"
PALABRA = "dieciocho "
S2 = "0"
Case "9"
PALABRA = "diecinueve "
S2 = "0"
End Select
Else
CONY = 1
Select Case S1
Case "2"
CONY = 0
If S2 = "0" Then
PALABRA = "veinte "
Else
PALABRA = "veinti"
End If
Case "3"
PALABRA = "treinta "
Case "4"
PALABRA = "cuarenta "
Case "5"
PALABRA = "cincuenta "
Case "6"
PALABRA = "sesenta "
Case "7"
PALABRA = "setenta "
Case "8"
PALABRA = "ochenta "
Case "9"
PALABRA = "noventa "
End Select
End If

SALIDA = SALIDA + PALABRA
If CONY = 1 And S2 <> "0" Then SALIDA = SALIDA + "y "
End If

If (S3 <> "" And S2 <> "0") Then
Select Case S3
Case "1"
If SEX = "F" Then
PALABRA = "una "
Else
PALABRA = "un "
End If
Case "2"
PALABRA = "dos "
Case "3"
PALABRA = "tres "
Case "4"
PALABRA = "cuatro "
Case "5"
PALABRA = "cinco "
Case "6"
PALABRA = "seis "
Case "7"
PALABRA = "siete "
Case "8"
PALABRA = "ocho "
Case "9"
PALABRA = "nueve "
End Select
SALIDA = SALIDA + PALABRA
End If
End Sub

Espero que resulte útil
Respuesta Responder a este mensaje
#5 Marianoh
14/02/2006 - 12:13 | Informe spam
Bueno, y aquí mi código, que no vale más ni menos que los demás
pero está en uso desde hace un tiempo largo ya. (y a mi en particular
me resulta más elegante poner las cadenas en una matriz)
Puede ir en un módulo normal, aunque si lo necesitas para más de un
libro, conviene grabarlo como complemento.

Option Explicit
Const UNI = 1, DIECI = 2, DECENA = 3, CENTENA = 4

Function NUMALET(strnuM As String) As String
'Mariano Alejandro Hernández 11/2003

Dim nuM As Double
Dim teR As Integer
Dim i As Integer
Dim numcaD As String
Dim matriZcaD(0 To 9, UNI To CENTENA) As String
Dim caDternA As String, resultadO As String
Dim centenAternA As Integer, decenAternA As Integer, unidaDternA As
Integer
Dim NumeroDeternA As Byte

If IsNumeric(strnuM) Then
nuM = CDbl(Abs(strnuM))
Else
NUMALET = "#¡VALOR!"
Exit Function
End If

If nuM >= 1000000000000# Or nuM < 0 Then
NUMALET = "#¡NUM!"
Exit Function
End If
If nuM < 1 Then resultadO = " cero"

Call llenaConCadenas(matriZcaD)

numcaD = CStr(Fix(Format(nuM, "standard")))
NumeroDeternA = 0
i = Len(numcaD)

Do 'Procesa el número desde atras hacia adelante en ternas
NumeroDeternA = NumeroDeternA + 1
caDternA = "" 'Inicializa la cadena de la terna

If i >= 3 Then ' Extrae la terna
teR = Val(Mid(numcaD, i - 2, 3))
Else
teR = Val(Mid(numcaD, 1, i)) 'Cuando ya no hay una terna
End If

centenAternA = Int(teR / 100) 'centenA
decenAternA = teR - Int(teR / 100) * 100 'decena y unidad
unidaDternA = decenAternA - Int(decenAternA / 10) * 10 'solo unidad

Select Case decenAternA 'Procesa decenas y unidades
Case 1 To 9
caDternA = matriZcaD(unidaDternA, UNI) & caDternA
Case 10 To 19
caDternA = caDternA & matriZcaD(decenAternA -
(Int(decenAternA / 10) * 10), DIECI)
Case 20
caDternA = caDternA & " veinte"
Case 21 To 29
caDternA = caDternA & matriZcaD(Int(decenAternA / 10),
DECENA) _
& Mid(matriZcaD(unidaDternA, UNI), 2,
Len(matriZcaD(unidaDternA, UNI)) - 1)
Case 30 To 99
If unidaDternA <> 0 Then
caDternA = matriZcaD(Int(decenAternA / 10), DECENA) _
& " y" & matriZcaD(unidaDternA, UNI) & caDternA
Else
caDternA = caDternA & matriZcaD(Int(decenAternA / 10),
DECENA)
End If
End Select

Select Case centenAternA 'Procesa las centenas
Case 1
If decenAternA > 0 Then
caDternA = " ciento" & caDternA
Else
caDternA = " cien" & caDternA
End If
Case 5, 7, 9
caDternA = matriZcaD(Int(teR / 100), CENTENA) & caDternA
Case Else
If Int(teR / 100) > 1 Then caDternA = matriZcaD _
(Int(teR / 100), UNI) & "cientos" & caDternA
End Select

If unidaDternA = 1 And NumeroDeternA > 1 And decenAternA <> 11 Then
_
caDternA = Mid(caDternA, 1, Len(caDternA) - 1)

Select Case NumeroDeternA 'Según el número de terna agrega
la unidad

Case 3
If nuM < 2000000 Then 'para que no aparezca "mil millón", sino
"mil millones"
caDternA = caDternA & " millón"
Else
caDternA = caDternA & " millones"
End If

Case 2, 4
If teR > 0 Then caDternA = caDternA & " mil"
End Select

resultadO = caDternA & resultadO
i = i - 3
Loop While i > 0 'hasta que se acaben las ternas

NUMALET = UCase(Mid(resultadO, 2, 1)) & Mid(resultadO, 3,
Len(resultadO)) & " con " & Round((nuM - Int(nuM)), 2) * 100 & "/100.-"

End Function

Public Static Sub llenaConCadenas(matriZ)

matriZ(1, UNI) = " uno"
matriZ(2, UNI) = " dos"
matriZ(3, UNI) = " tres"
matriZ(4, UNI) = " cuatro"
matriZ(5, UNI) = " cinco"
matriZ(6, UNI) = " seis"
matriZ(7, UNI) = " siete"
matriZ(8, UNI) = " ocho"
matriZ(9, UNI) = " nueve"

matriZ(0, DIECI) = " diez"
matriZ(1, DIECI) = " once"
matriZ(2, DIECI) = " doce"
matriZ(3, DIECI) = " trece"
matriZ(4, DIECI) = " catorce"
matriZ(5, DIECI) = " quince"
matriZ(6, DIECI) = " dieciseis"
matriZ(7, DIECI) = " diecisiete"
matriZ(8, DIECI) = " dieciocho"
matriZ(9, DIECI) = " diecinueve"

matriZ(2, DECENA) = " veinti"
matriZ(3, DECENA) = " treinta"
matriZ(4, DECENA) = " cuarenta"
matriZ(5, DECENA) = " cincuenta"
matriZ(6, DECENA) = " sesenta"
matriZ(7, DECENA) = " setenta"
matriZ(8, DECENA) = " ochenta"
matriZ(9, DECENA) = " noventa"

matriZ(5, CENTENA) = " quinientos"
matriZ(7, CENTENA) = " setecientos"
matriZ(9, CENTENA) = " novecientos"

End Sub


Saludos
Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaSiguiente Respuesta Tengo una respuesta
Search Busqueda sugerida