Un reto para Expertos en Excel
Aparentemente facil Pero?
Necesito desde Excel, poder convertir un numero en texto (Ej: 2.500 EN Dos mil quinientos), para lo cual debe existir una funcion o MACRO en VB, que permita escribir en otra celda el numero en letras.
URGENTE
Necesito desde Excel, poder convertir un numero en texto (Ej: 2.500 EN Dos mil quinientos), para lo cual debe existir una funcion o MACRO en VB, que permita escribir en otra celda el numero en letras.
URGENTE
Amigo, te lo vuelvo a comentar, yo tengo la macro para hacer la conversión; ahora ya puedo hacer la conversión en forma contable, con decimales, sin decimales; y te vas a que de a cuatro cuando te diga que en una sola linea como instrucción. Piensas que es una broma no?, pues lo único que te pido es que me contestes para saber si lo de ustedes es una broma o no. Yo no soy miembro de ese foro.
Por favor respóndeme.
Por favor respóndeme.
Me parece impropio servirse del trabajo tuyo, en este caso. Te pido que me des la lógica de la funcion que tienes o, si quieres, derechamente, envÃame la función. (que igualmente estudiaré en detalle) No sé mucho de excel pero este es un problema que no he logrado resolver en mi trabajo y me impaciento porque pierdo tiemppo "traduciendo" cifras a palabras.
Si no me respondes, te agradezco igualmente tu buena voluntad.
Si no me respondes, te agradezco igualmente tu buena voluntad.
por favor me puedes enviar la macro a [email protected], por favor.
Te pedirÃa que me envies la macro para numeros a letras.
Me serÃa muy util.
Gracias
Me serÃa muy util.
Gracias
Hola a todos...yo solo quisiera saber q tengo q incluir en mi programa si quiero utilizar la funcion Mid$...la pongo en mi forma y me dice q no reconoce el proyecto o la biblioteca..
Espero puedan contestar..Gracias !!!!
Espero puedan contestar..Gracias !!!!
hola, mira te agradeceria mucho si me eviaras esa macro, por que la necesito mucho, desde ya te agradezco mucho. si podes enviarmela al correo
[email protected]
[email protected]
hola, yo si quiero saber como convertir numeros a letras, con la funcion de cantidad.decimal es decir, 2,1150.50 que me convierta a dosmil ciento ciencuenta 50/100
gracias
gracias
Puedes mandarme tu macro para convertir número a texto?
Muchas gracias,
Edwin
Muchas gracias,
Edwin
por favor en verdad necesito esa macro que ofreces, seria posible que me la mandes? gracias
Me podrias enviar la macro que convierte númesros en texto?
Gracias
Gracias
Mi duda es la siguiente: Cuando hago una macro en Excel en una pc ...y tengo despues que mudarme a otra pc, donde busco la macro ya hecha para llevarla a la otra maquina y no tener que repetirla, o sea con que extension se guardan y donde.
Saludos y Gracias
Saludos y Gracias
La función se usa asÃ
=Numeros_Letras(G36;P31;Q31;R31;S31;T31;U31)
Donde las celdas G36;P31;Q31;R31;S31;T31;U31 son los parámetro por los cuales se va a regir el valor en texto,
Saludos.
Option Explicit
'Mauricio Baeza
'Samuel Monajaras
'Enero-97
'Ultima modificacion Octubre del 2002
'[email protected]
'http://www.vbalym.netfirms.com
'Argumentos:
'Numero = Valor que deseamos convertir en texto
'Moneda = es el nombre de la moneda a mostrar
'Fraccion_Letras = Verdadero para que la fraccion de la moneda
' tambien la convierta a letras
'Fraccion = Es el nombre de la fraccion de la moneda
'Texto_Inicial = Cualquier texto que quieras al principio del resultado
'Texto_Final = Cualquier texto que quieras al finla del resultado
'Estilo = Formato de salida
' 1 = MAYUSCULAS
' 2 = minusculas
' 3 = Tipo Titulo
'Los valores negativos los convierte a positivos
'El valor minimo en 0, el valor maximo es 9,999,999,999,999.99
Public Function Numeros_Letras(ByVal Numero As Double, _
ByVal Moneda As String, _
Optional Fraccion_Letras As Boolean = False, _
Optional Fraccion As String = "", _
Optional Texto_Inicial As String = "", _
Optional Texto_Final As String = "", _
Optional Estilo As Integer = 1) As String
Dim strLetras As String
Dim NumTmp As String
Dim intFraccion As Integer
strLetras = Texto_Inicial
'Convertimos a positivo si es negativo
Numero = Abs(Numero)
NumTmp = Format(Numero, "000000000000000.00")
If Numero < 1 Then
strLetras = strLetras & "cero " & Plural(Moneda) & " "
Else
strLetras = strLetras & NumLet(Val(Left(NumTmp, 15)))
If Val(NumTmp) = 1 Or Val(NumTmp) < 2 Then
strLetras = strLetras & Moneda & " "
ElseIf Val(Mid(NumTmp, 4, 12)) = 0 Or Val(Mid(NumTmp, 10, 6)) = 0 Then
strLetras = strLetras & "de " & Plural(Moneda) & " "
Else
strLetras = strLetras & Plural(Moneda) & " "
End If
End If
If Fraccion_Letras Then
intFraccion = Val(Right(NumTmp, 2))
Select Case intFraccion
Case 0
strLetras = strLetras & "con cero " & Plural(Fraccion)
Case 1
strLetras = strLetras & "con un " & Fraccion
Case Else
strLetras = strLetras & "con " & NumLet(Val(Right(NumTmp, 2))) & Plural(Fraccion)
End Select
Else
strLetras = strLetras & Right(NumTmp, 2)
End If
strLetras = strLetras & Texto_Final
Select Case Estilo
Case 1
strLetras = StrConv(strLetras, vbUpperCase)
Case 2
strLetras = StrConv(strLetras, vbLowerCase)
Case 3
strLetras = StrConv(strLetras, vbProperCase)
End Select
Numeros_Letras = strLetras
End Function
Public Function NumLet(ByVal Numero As Double) As String
Dim NumTmp As String
Dim co1 As Integer
Dim co2 As Integer
Dim pos As Integer
Dim dig As Integer
Dim cen As Integer
Dim dec As Integer
Dim uni As Integer
Dim letra1 As String
Dim letra2 As String
Dim letra3 As String
Dim Leyenda As String
Dim TFNumero As String
NumTmp = Format(Numero, "000000000000000") 'Le da un formato fijo
co1 = 1
pos = 1
TFNumero = ""
'Para extraer tres digitos cada vez
Do While co1 <= 5
co2 = 1
Do While co2 <= 3
'Extrae un digito cada vez de izquierda a derecha
dig = Val(Mid(NumTmp, pos, 1))
Select Case co2
Case 1: cen = dig
Case 2: dec = dig
Case 3: uni = dig
End Select
co2 = co2 + 1
pos = pos + 1
Loop
letra3 = Centena(uni, dec, cen)
letra2 = Decena(uni, dec)
letra1 = Unidad(uni, dec)
Select Case co1
Case 1
If cen + dec + uni = 1 Then
Leyenda = "billon "
ElseIf cen + dec + uni > 1 Then
Leyenda = "billones "
End If
Case 2
If cen + dec + uni >= 1 And Val(Mid(NumTmp, 7, 3)) = 0 Then
Leyenda = "mil millones "
ElseIf cen + dec + uni >= 1 Then
Leyenda = "mil "
End If
Case 3
If cen + dec = 0 And uni = 1 Then
Leyenda = "millon "
ElseIf cen > 0 Or dec > 0 Or uni > 1 Then
Leyenda = "millones "
End If
Case 4
If cen + dec + uni >= 1 Then
Leyenda = "mil "
End If
Case 5
If cen + dec + uni >= 1 Then
Leyenda = ""
End If
End Select
co1 = co1 + 1
TFNumero = TFNumero + letra3 + letra2 + letra1 + Leyenda
Leyenda = ""
letra1 = ""
letra2 = ""
letra3 = ""
Loop
NumLet = TFNumero
End Function
Private Function Centena(ByVal uni As Integer, ByVal dec As Integer, _
ByVal cen As Integer) As String
Dim cTexto As String
Select Case cen
Case 1
If dec + uni = 0 Then
cTexto = "cien "
Else
cTexto = "ciento "
End If
Case 2: cTexto = "doscientos "
Case 3: cTexto = "trescientos "
Case 4: cTexto = "cuatrocientos "
Case 5: cTexto = "quinientos "
Case 6: cTexto = "seiscientos "
Case 7: cTexto = "setecientos "
Case 8: cTexto = "ochocientos "
Case 9: cTexto = "novecientos "
Case Else: cTexto = ""
End Select
Centena = cTexto
End Function
Private Function Decena(ByVal uni As Integer, ByVal dec As Integer) As String
Dim cTexto As String
Select Case dec
Case 1:
Select Case uni
Case 0: cTexto = "diez "
Case 1: cTexto = "once "
Case 2: cTexto = "doce "
Case 3: cTexto = "trece "
Case 4: cTexto = "catorce "
Case 5: cTexto = "quince "
Case 6 To 9: cTexto = "dieci"
End Select
Case 2:
If uni = 0 Then
cTexto = "veinte "
ElseIf uni > 0 Then
cTexto = "veinti"
End If
Case 3: cTexto = "treinta "
Case 4: cTexto = "cuarenta "
Case 5: cTexto = "cincuenta "
Case 6: cTexto = "sesenta "
Case 7: cTexto = "setenta "
Case 8: cTexto = "ochenta "
Case 9: cTexto = "noventa "
Case Else: cTexto = ""
End Select
If uni > 0 And dec > 2 Then cTexto = cTexto + "y "
Decena = cTexto
End Function
Private Function Unidad(ByVal uni As Integer, ByVal dec As Integer) As String
Dim cTexto As String
If dec <> 1 Then
Select Case uni
Case 1: cTexto = "un "
Case 2: cTexto = "dos "
Case 3: cTexto = "tres "
Case 4: cTexto = "cuatro "
Case 5: cTexto = "cinco "
End Select
End If
Select Case uni
Case 6: cTexto = "seis "
Case 7: cTexto = "siete "
Case 8: cTexto = "ocho "
Case 9: cTexto = "nueve "
End Select
Unidad = cTexto
End Function
'Funcion que convierte al plural el argumento pasado
Private Function Plural(ByVal Palabra As String) As String
Dim pos As Integer
Dim strPal As String
If Len(Trim(Palabra)) > 0 Then
pos = InStr(1, "aeiou", Right(Palabra, 1), vbTextCompare)
If pos > 0 Then
strPal = Palabra & "s"
Else
strPal = Palabra & "es"
End If
End If
Plural = strPal
End Function
=Numeros_Letras(G36;P31;Q31;R31;S31;T31;U31)
Donde las celdas G36;P31;Q31;R31;S31;T31;U31 son los parámetro por los cuales se va a regir el valor en texto,
Saludos.
Option Explicit
'Mauricio Baeza
'Samuel Monajaras
'Enero-97
'Ultima modificacion Octubre del 2002
'[email protected]
'http://www.vbalym.netfirms.com
'Argumentos:
'Numero = Valor que deseamos convertir en texto
'Moneda = es el nombre de la moneda a mostrar
'Fraccion_Letras = Verdadero para que la fraccion de la moneda
' tambien la convierta a letras
'Fraccion = Es el nombre de la fraccion de la moneda
'Texto_Inicial = Cualquier texto que quieras al principio del resultado
'Texto_Final = Cualquier texto que quieras al finla del resultado
'Estilo = Formato de salida
' 1 = MAYUSCULAS
' 2 = minusculas
' 3 = Tipo Titulo
'Los valores negativos los convierte a positivos
'El valor minimo en 0, el valor maximo es 9,999,999,999,999.99
Public Function Numeros_Letras(ByVal Numero As Double, _
ByVal Moneda As String, _
Optional Fraccion_Letras As Boolean = False, _
Optional Fraccion As String = "", _
Optional Texto_Inicial As String = "", _
Optional Texto_Final As String = "", _
Optional Estilo As Integer = 1) As String
Dim strLetras As String
Dim NumTmp As String
Dim intFraccion As Integer
strLetras = Texto_Inicial
'Convertimos a positivo si es negativo
Numero = Abs(Numero)
NumTmp = Format(Numero, "000000000000000.00")
If Numero < 1 Then
strLetras = strLetras & "cero " & Plural(Moneda) & " "
Else
strLetras = strLetras & NumLet(Val(Left(NumTmp, 15)))
If Val(NumTmp) = 1 Or Val(NumTmp) < 2 Then
strLetras = strLetras & Moneda & " "
ElseIf Val(Mid(NumTmp, 4, 12)) = 0 Or Val(Mid(NumTmp, 10, 6)) = 0 Then
strLetras = strLetras & "de " & Plural(Moneda) & " "
Else
strLetras = strLetras & Plural(Moneda) & " "
End If
End If
If Fraccion_Letras Then
intFraccion = Val(Right(NumTmp, 2))
Select Case intFraccion
Case 0
strLetras = strLetras & "con cero " & Plural(Fraccion)
Case 1
strLetras = strLetras & "con un " & Fraccion
Case Else
strLetras = strLetras & "con " & NumLet(Val(Right(NumTmp, 2))) & Plural(Fraccion)
End Select
Else
strLetras = strLetras & Right(NumTmp, 2)
End If
strLetras = strLetras & Texto_Final
Select Case Estilo
Case 1
strLetras = StrConv(strLetras, vbUpperCase)
Case 2
strLetras = StrConv(strLetras, vbLowerCase)
Case 3
strLetras = StrConv(strLetras, vbProperCase)
End Select
Numeros_Letras = strLetras
End Function
Public Function NumLet(ByVal Numero As Double) As String
Dim NumTmp As String
Dim co1 As Integer
Dim co2 As Integer
Dim pos As Integer
Dim dig As Integer
Dim cen As Integer
Dim dec As Integer
Dim uni As Integer
Dim letra1 As String
Dim letra2 As String
Dim letra3 As String
Dim Leyenda As String
Dim TFNumero As String
NumTmp = Format(Numero, "000000000000000") 'Le da un formato fijo
co1 = 1
pos = 1
TFNumero = ""
'Para extraer tres digitos cada vez
Do While co1 <= 5
co2 = 1
Do While co2 <= 3
'Extrae un digito cada vez de izquierda a derecha
dig = Val(Mid(NumTmp, pos, 1))
Select Case co2
Case 1: cen = dig
Case 2: dec = dig
Case 3: uni = dig
End Select
co2 = co2 + 1
pos = pos + 1
Loop
letra3 = Centena(uni, dec, cen)
letra2 = Decena(uni, dec)
letra1 = Unidad(uni, dec)
Select Case co1
Case 1
If cen + dec + uni = 1 Then
Leyenda = "billon "
ElseIf cen + dec + uni > 1 Then
Leyenda = "billones "
End If
Case 2
If cen + dec + uni >= 1 And Val(Mid(NumTmp, 7, 3)) = 0 Then
Leyenda = "mil millones "
ElseIf cen + dec + uni >= 1 Then
Leyenda = "mil "
End If
Case 3
If cen + dec = 0 And uni = 1 Then
Leyenda = "millon "
ElseIf cen > 0 Or dec > 0 Or uni > 1 Then
Leyenda = "millones "
End If
Case 4
If cen + dec + uni >= 1 Then
Leyenda = "mil "
End If
Case 5
If cen + dec + uni >= 1 Then
Leyenda = ""
End If
End Select
co1 = co1 + 1
TFNumero = TFNumero + letra3 + letra2 + letra1 + Leyenda
Leyenda = ""
letra1 = ""
letra2 = ""
letra3 = ""
Loop
NumLet = TFNumero
End Function
Private Function Centena(ByVal uni As Integer, ByVal dec As Integer, _
ByVal cen As Integer) As String
Dim cTexto As String
Select Case cen
Case 1
If dec + uni = 0 Then
cTexto = "cien "
Else
cTexto = "ciento "
End If
Case 2: cTexto = "doscientos "
Case 3: cTexto = "trescientos "
Case 4: cTexto = "cuatrocientos "
Case 5: cTexto = "quinientos "
Case 6: cTexto = "seiscientos "
Case 7: cTexto = "setecientos "
Case 8: cTexto = "ochocientos "
Case 9: cTexto = "novecientos "
Case Else: cTexto = ""
End Select
Centena = cTexto
End Function
Private Function Decena(ByVal uni As Integer, ByVal dec As Integer) As String
Dim cTexto As String
Select Case dec
Case 1:
Select Case uni
Case 0: cTexto = "diez "
Case 1: cTexto = "once "
Case 2: cTexto = "doce "
Case 3: cTexto = "trece "
Case 4: cTexto = "catorce "
Case 5: cTexto = "quince "
Case 6 To 9: cTexto = "dieci"
End Select
Case 2:
If uni = 0 Then
cTexto = "veinte "
ElseIf uni > 0 Then
cTexto = "veinti"
End If
Case 3: cTexto = "treinta "
Case 4: cTexto = "cuarenta "
Case 5: cTexto = "cincuenta "
Case 6: cTexto = "sesenta "
Case 7: cTexto = "setenta "
Case 8: cTexto = "ochenta "
Case 9: cTexto = "noventa "
Case Else: cTexto = ""
End Select
If uni > 0 And dec > 2 Then cTexto = cTexto + "y "
Decena = cTexto
End Function
Private Function Unidad(ByVal uni As Integer, ByVal dec As Integer) As String
Dim cTexto As String
If dec <> 1 Then
Select Case uni
Case 1: cTexto = "un "
Case 2: cTexto = "dos "
Case 3: cTexto = "tres "
Case 4: cTexto = "cuatro "
Case 5: cTexto = "cinco "
End Select
End If
Select Case uni
Case 6: cTexto = "seis "
Case 7: cTexto = "siete "
Case 8: cTexto = "ocho "
Case 9: cTexto = "nueve "
End Select
Unidad = cTexto
End Function
'Funcion que convierte al plural el argumento pasado
Private Function Plural(ByVal Palabra As String) As String
Dim pos As Integer
Dim strPal As String
If Len(Trim(Palabra)) > 0 Then
pos = InStr(1, "aeiou", Right(Palabra, 1), vbTextCompare)
If pos > 0 Then
strPal = Palabra & "s"
Else
strPal = Palabra & "es"
End If
End If
Plural = strPal
End Function
hola, disculpe que le molesto con eso... me convierta numeros a letras pero no los decimales... pongo 45.5 y dice cuarenta y seis. es possible que lo dice bien?
en adelante muchas gracias
en adelante muchas gracias
sobre la conversion de numero a texto de cantidades numerica, Te encuentro genial. Una reverencia para tÃ
POR FAVOR DIME UNA COSA. ¿CREES QUE ESTOY MINTIENDO ACERCA DE LA MACRO QUE COMENTE? Y OTRA COSA QUE NO SE SI PUEDO PEDIRTE, PERO AÚN ASà LO VOY A HACER. dONDE PUEDO CONSEGUIR EL CIVILCAD Y ARCHICAD CON SUS RESPECTIVOS TUTORIALES DE A GRAPA, AUNQUE SEAN VERSIONES VIEJILLAS; NADA MAS QUIERO VER SI PUEDO HACER UNAS MODIFICACIONES A MI CASA, MEDIANTE UN PROYECTO. SI ME PUDIERAS AYUDAR.
JJCHG
GRACIAS
JJCHG
GRACIAS
Hola, no soy experta en excel, pero espero que de algo te sirva esto:
hay una funcion en excel que se llama
speellnumber(N)
esta te le el numero pero te da la expresion en dolares....
ojala te sirva...
Salu2
Suerte
hay una funcion en excel que se llama
speellnumber(N)
esta te le el numero pero te da la expresion en dolares....
ojala te sirva...
Salu2
Suerte
Se me paso comentarte que la funcion se utiliza asi:
=spellnumber(N) don de N es la referencia de la celda a convertir...
=spellnumber(N) don de N es la referencia de la celda a convertir...
Yo tengo la macro que convierte los numeros a letra, pero, según lo que he visto, únicamente lo hace con número enteros y no agrega para la cuestión contable xx/100, m.n. PodrÃas decirme que no importa, pero, según yo, pone la parte decimal de una manera no convencional (por ejemplo: .25 lo transcribe como veinte mas cinco y no veinticinco. Me costó mucho trabajo encontrarla. La puedes encontrar en Mr. free. La sencillez con que está hecha es impresionante. ]Te diré que yo no le entiendo.
Si no la encuentras, contéstame y te mando yo la que tengo. Yo ando buscando una que me convierta el número a texto, pero contablemente hablando.
Que estés bien
Saludos
jjchg
Si no la encuentras, contéstame y te mando yo la que tengo. Yo ando buscando una que me convierta el número a texto, pero contablemente hablando.
Que estés bien
Saludos
jjchg