Convertir números a letra sin monto monetario
No soy muy bueno en exel, y todos los macros que e encontrado no me ayudan por lo siguiente
Tengo este numero y lo quiero convertir en letras ejemplo 1234567890,2008,03 (uno)(dos)(tres)(cuatro)(cinco)(seis)(siete)(ocho)(nueve)(cero) (dos mil ocho) (cero cero)
Ojo: que la como valga como un espacio
Ojala y me puedasechar la mano te lo agradeceria mucho
. 14.03.17 #VBA De número a palabra
Es posible resolver esta cuestión con fórmulas de búsqueda (BUSCARV) o utilizando una Función definida por el usuario (UDF) que implica aprovechar la potencia de Visual Basic.
Sin embargo, explicarlo aquí sería sumamente difícil, créeme.
Usualmente propongo lo siguiente:
Envíame un mail y, apenas llegue, te mandaré -a tu casilla- un archivo de MS Excel que tiene resuelto el problema con ambas alternativas.
.
- Compartir respuesta
1 respuesta más de otro experto
¿El resultado de las letras lo quieres entre paréntesis?
¿Siempre tienes 2 comas?
Siempre el segundo número lo quieres completo, es decir, pusiste en tu ejemplo 2008, ¿en ese caso quieres como resultado dos mil ocho?
Entonces, en todos los demás casos solamente quieres la descripción dígito por dígito.
Ayudaría si pones un par de ejemplos más y exactamente cómo quieres el resultado.
es correcto lo que esta en parentesis es el resultado que necesito, y el formato siempre tiene 2 coma y el segundo dato que este entre las dos comas siempre es el año en letra yasea 1996,2000,2007,2017.
ese dato que te estoy poniendo en el numero de ife, año de registro que viene siendo este dato 1234567890,2008,03 (uno)(dos)(tres)(cuatro)(cinco)(seis)(siete)(ocho)(nueve)(cero) (dos mil ocho) (cero cero), este formato nunca va a cambiar siempre es igua
pero tambien lleva la hora con numero y letra
17:30 (diecisiete treinta horas)
y si no es mucha moles si en una celda tengo 2 que me muestre (dos)
¡Gracias!
Perdona, pero ya no entendí, en la celda tienes esto:
1234567890,2008,03
O esto:
17:30
O esto
2
O esto:
1234567890,2008,03 17:30
¿O qué posibles datos puedes traer?
todo va en celdas ceparadas
esto va en un celda 1234567890,2008,03
esto va en otra celda 17:30
en otra celda 2
saludos
Pon el siguiente código de Función en un módulo
Function PonerLetras(celda As Range) As String 'Por.Dante Amor If InStr(1, celda.Value, ",") > 0 Then nums = Split(celda.Value, ",") If UBound(nums) = 2 Then uno = nums(0) dos = nums(1) tre = nums(2) cad = "" For i = 1 To Len(uno) cad = cad & "(" & num(Mid(uno, i, 1)) & ")" Next cad = cad & " (" & num(Val(dos)) & ") " For i = 1 To Len(tre) cad = cad & "(" & num(Mid(tre, i, 1)) & ")" Next PonerLetras = cad Else PonerLetras = "No hay 3 números separados por comas" End If ElseIf InStr(1, celda.Value, ":") > 0 Then nums = Split(celda.Value, ":") If UBound(nums) = 1 Then uno = nums(0) dos = nums(1) cad = "" cad = cad & "(" & num(Val(uno)) & " " & num(Val(dos)) & " horas)" PonerLetras = cad Else PonerLetras = "No hay 2 números separados por dos puntos" End If ElseIf IsNumeric(celda.Value) Then cad = num(celda.Value) PonerLetras = cad End If End Function ' Function num(fec As Long) As String 'Por.Dante Amor Unidades = Array("", "Uno", "Dos", "Tres", "Cuatro", "Cinco", "Seis", "Siete", "Ocho", "Nueve", "Diez", "Once", "Doce", "Trece", "Catorce", "Quince", "Dieciséis", "Diecisiete", "Dieciocho", "Diecinueve", "Veinte", "Veintiuno", "Veintidos", "Veintitres", "Veinticuatro", "Veinticinco", "Veintiseis", "Veintisiete", "Veintiocho", "Veintinueve") Decenas = Array("", "Diez", "Veinte", "Treinta", "Cuarenta", "Cincuenta", "Sesenta", "Setenta", "Ochenta", "Noventa", "Cien") Centenas = Array("", "Ciento", "Doscientos", "Trescientos", "Cuatrocientos", "Quinientos", "Seiscientos", "Setecientos", "Ochocientos", "Novecientos") ' Select Case fec Case 0: r = "Cero" Case 1 To 29: r = Unidades(fec) Case 30 To 100: r = Decenas(fec \ 10) + IIf(fec Mod 10 <> 0, " y " + num(fec Mod 10), "") Case 101 To 999: r = Centenas(fec \ 100) + IIf(fec Mod 100 <> 0, " " + num(fec Mod 100), "") Case 1000 To 1999: r = "Mil" + IIf(fec Mod 1000 <> 0, " " + num(fec Mod 1000), "") Case 2000 To 999999: r = num(fec \ 1000) + " Mil" + IIf(fec Mod 1000 <> 0, " " + num(fec Mod 1000), "") Case 1000000 To 1999999: r = "Un Millón" + IIf(fec Mod 1000000 <> 0, " " + num(fec Mod 1000000), "") Case 2000000 To 1999999999: r = num(fec \ 1000000) + " Millones" + IIf(fec Mod 1000000 <> 0, " " + num(fec Mod 1000000), "") End Select num = r End Function
Sigue las Instrucciones para una Función
- Abre tu libro de excel
- Para abrir VBa y poder pegar la función, Presiona Alt + F11
- En el menú elige Insertar / Módulo
- En el panel del lado derecho copia la función
- En cualquier celda utiliza la función, como cualquier otra función de excel
Por ejemplo, si en la celda C4 tienes el número
1234567890,2008,03
, entonces en la celda D4 pon la siguiente fórmula:
=PonerLetras(C4)
El resultado será:
(Uno)(Dos)(Tres)(Cuatro)(Cinco)(Seis)(Siete)(Ocho)(Nueve)(Cero) (Dos Mil Ocho) (Cero)(Tres)
Para el caso de 19:37, deberás tener en la celda el dato como texto.
Si realmente tienes una hora, es decir, en la celda tienes esto: 19:37, pero en la barra de fórmulas ves esto: 07:37:00 p.m., entonces significa que tienes una hora y no un texto, en este caso utiliza el siguiente código:
Function PonerLetras(celda As Range) As String 'Por.Dante Amor If InStr(1, celda.Value, ",") > 0 Then nums = Split(celda.Value, ",") If UBound(nums) = 2 Then uno = nums(0) dos = nums(1) tre = nums(2) cad = "" For i = 1 To Len(uno) cad = cad & "(" & num(Mid(uno, i, 1)) & ")" Next cad = cad & " (" & num(Val(dos)) & ") " For i = 1 To Len(tre) cad = cad & "(" & num(Mid(tre, i, 1)) & ")" Next PonerLetras = cad Else PonerLetras = "No hay 3 números separados por comas" End If ElseIf Hour(celda.Value) > 0 Then cad = "" cad = cad & "(" & num(Hour(celda.Value)) & " " & num(Minute(celda.Value)) & " horas)" PonerLetras = cad ElseIf IsNumeric(celda.Value) Then cad = num(celda.Value) PonerLetras = cad End If End Function ' Function num(fec As Long) As String 'Por.Dante Amor Unidades = Array("", "Uno", "Dos", "Tres", "Cuatro", "Cinco", "Seis", "Siete", "Ocho", "Nueve", "Diez", "Once", "Doce", "Trece", "Catorce", "Quince", "Dieciséis", "Diecisiete", "Dieciocho", "Diecinueve", "Veinte", "Veintiuno", "Veintidos", "Veintitres", "Veinticuatro", "Veinticinco", "Veintiseis", "Veintisiete", "Veintiocho", "Veintinueve") Decenas = Array("", "Diez", "Veinte", "Treinta", "Cuarenta", "Cincuenta", "Sesenta", "Setenta", "Ochenta", "Noventa", "Cien") Centenas = Array("", "Ciento", "Doscientos", "Trescientos", "Cuatrocientos", "Quinientos", "Seiscientos", "Setecientos", "Ochocientos", "Novecientos") ' Select Case fec Case 0: r = "Cero" Case 1 To 29: r = Unidades(fec) Case 30 To 100: r = Decenas(fec \ 10) + IIf(fec Mod 10 <> 0, " y " + num(fec Mod 10), "") Case 101 To 999: r = Centenas(fec \ 100) + IIf(fec Mod 100 <> 0, " " + num(fec Mod 100), "") Case 1000 To 1999: r = "Mil" + IIf(fec Mod 1000 <> 0, " " + num(fec Mod 1000), "") Case 2000 To 999999: r = num(fec \ 1000) + " Mil" + IIf(fec Mod 1000 <> 0, " " + num(fec Mod 1000), "") Case 1000000 To 1999999: r = "Un Millón" + IIf(fec Mod 1000000 <> 0, " " + num(fec Mod 1000000), "") Case 2000000 To 1999999999: r = num(fec \ 1000000) + " Millones" + IIf(fec Mod 1000000 <> 0, " " + num(fec Mod 1000000), "") End Select num = r End Function
'S aludos. Dante Amor. Recuerda valorar la respuesta. G racias
- Compartir respuesta