| |||
Re: Pasar de números a letras en Excel hola a todos, he realizado los pasos que indican pero me sale error, alguien podria decirme paso a paso como debo de realizar el procedimiento para que me salga una cantidad de numeros a letras en excel por favor, se lo agradecere mucho, saludos. |
| |||
Re: Pasar de números a letras en Excel [Hola Miago ya hice todo el procedimiento y me funciona pero cuando cierro la hora y la vuelvo a abrirr me sale eror como que no me reconoce la formula, como hago para tenerlo fijo y utilizarlo como funcion de excel gracias |
| |||
Re: Pasar de números a letras en Excel [Hola Amigo ya hice todo el procedimiento y me funciona pero cuando cierro la hoja y la vuelvo a abrir me sale error como que no me reconoce la formula, como hago para tenerlo fijo y utilizarlo como funcion de excel gracias |
| |||
Re: Pasar de números a letras en Excel Con la hoja de Excel abierta; abre el editor de VB, selecciona Insertar Módulo; pegas la macro; guardas la macro con el nombre que desees. Cierras el editor. En la celda en la que aplicarás la función; usa el nombre de la macro en la fórmula para convertir los números a texto. Salva (guarda) la hoja y en la siguiente apertura debe reconocer la fórmula y la función. Saludos... |
| |||
Re: Pasar de números a letras en Excel bueno primero knada agradezco al brother kpudo hacer el string y para los que siguen con el problema de los cientos de miles solo modfique unas cosillas, de hecho casi nada, espero y es y les funcion como ami y gracias nuevamente al brother juan luis. Function num_letras(Numero As Double) As String Dim Letras As String Dim HuboCentavos As Boolean Dim Decimales As Double Decimales = Numero - Int(Numero) Numero = Int(Numero) Dim Numeros(90) As String Numeros(0) = "CERO" Numeros(1) = "UNO" Numeros(2) = "DOS" Numeros(3) = "TRES" Numeros(4) = "CUATRO" Numeros(5) = "CINCO" Numeros(6) = "SEIS" Numeros(7) = "SIETE" Numeros(8) = "OCHO" Numeros(9) = "NUEVE" Numeros(10) = "DIEZ" Numeros(11) = "ONCE" Numeros(12) = "DOCE" Numeros(13) = "TRECE" Numeros(14) = "CATORCE" Numeros(15) = "QUINCE" Numeros(16) = "DIESCISEIS" Numeros(17) = "DIESCISIETE" Numeros(18) = "DIESCIOCHO" Numeros(19) = "DIESCINUEVE" Numeros(20) = "VEINTE" Numeros(21) = "VEINTIUNO" Numeros(22) = "VEINTIDOS" Numeros(23) = "VEINTITRES" Numeros(24) = "VEINTICUATRO" Numeros(25) = "VEINTICINCO" Numeros(26) = "VEINTISEIS" Numeros(27) = "VEINTISIETE" Numeros(28) = "VEINTIOCHO" Numeros(29) = "VEINTINUEVE" Numeros(30) = "TREINTA" Numeros(40) = "CUARENTA" Numeros(50) = "CINCUENTA" Numeros(60) = "SESENTA" Numeros(70) = "SETENTA" Numeros(80) = "OCHENTA" Numeros(90) = "NOVENTA" Do '*---> Centenas de Millón If (Numero < 1000000000) And (Numero >= 100000000) Then If (Int(Numero / 100000000) = 1) And ((Numero - (Int(Numero / 100000000) * 100000000)) < 1000000) Then Letras = Letras & "cien millones " Else Select Case Int(Numero / 100000000) Case 1 Letras = Letras & "CIENTO" Case 5 Letras = Letras & "QUINIENTOS" Case 7 Letras = Letras & "SETECIENTOS" Case 9 Letras = Letras & "NOVECIENTOS" Case Else Letras = Letras & Numeros(Int(Numero / 100000000)) End Select If (Int(Numero / 100000000) <> 1) And (Int(Numero / 100000000) <> 5) And (Int(Numero / 100000000) <> 7) And (Int(Numero / 100000000) <> 9) Then Letras = Letras & "CIENTOS " Else Letras = Letras & " " End If End If Numero = Numero - (Int(Numero / 100000000) * 100000000) End If '*---> Decenas de Millón If (Numero < 100000000) And (Numero >= 10000000) Then If Int(Numero / 1000000) < 16 Then Letras = Letras & Numeros(Int(Numero / 1000000)) Letras = Letras & " MILLONES " Numero = Numero - (Int(Numero / 1000000) * 1000000) Else Letras = Letras & Numeros(Int(Numero / 10000000) * 10) Numero = Numero - (Int(Numero / 10000000) * 10000000) If Numero > 1000000 Then Letras = Letras & " y " End If End If End If '*---> Unidades de Millón If (Numero < 10000000) And (Numero >= 1000000) Then If Int(Numero / 1000000) = 1 Then Letras = Letras & " UN MILLON " Else Letras = Letras & Numeros(Int(Numero / 1000000)) Letras = Letras & " MILLONES " End If Numero = Numero - (Int(Numero / 1000000) * 1000000) End If '*---> Centenas de Millar If (Numero < 1000000) And (Numero >= 100000) Then If (Int(Numero / 100000) = 1) And ((Numero - (Int(Numero / 100000) * 100000)) < 1000) Then Letras = Letras & "CIEN MIL " Else Select Case Int(Numero / 100000) Case 1 Letras = Letras & "CIENTO" Case 5 Letras = Letras & "QUINIENTOS MIL" Case 7 Letras = Letras & "SETECIENTOS MIL" Case 9 Letras = Letras & "NOVECIENTOS MIL" Case Else Letras = Letras & Numeros(Int(Numero / 100000)) End Select If (Int(Numero / 100000) <> 1) And (Int(Numero / 100000) <> 5) And (Int(Numero / 100000) <> 7) And (Int(Numero / 100000) <> 9) Then Letras = Letras & "CIENTOS MIL " Else Letras = Letras & " " End If End If Numero = Numero - (Int(Numero / 100000) * 100000) End If '*---> Decenas de Millar If (Numero < 100000) And (Numero >= 10000) Then If Int(Numero / 1000) < 16 Then Letras = Letras & Numeros(Int(Numero / 1000)) Letras = Letras & " MIL " Numero = Numero - (Int(Numero / 1000) * 1000) Else Letras = Letras & Numeros(Int(Numero / 10000) * 10) Numero = Numero - (Int((Numero / 10000)) * 10000) If Numero > 1000 Then Letras = Letras & " Y " Else Letras = Letras & " MIL " End If End If End If '*---> Unidades de Millar If (Numero < 10000) And (Numero >= 1000) Then If Int(Numero / 1000) = 1 Then Letras = Letras & " " Else Letras = Letras & Numeros(Int(Numero / 1000)) End If Letras = Letras & " MIL " Numero = Numero - (Int(Numero / 1000) * 1000) End If '*---> Centenas If (Numero < 1000) And (Numero > 99) Then If (Int(Numero / 100) = 1) And ((Numero - (Int(Numero / 100) * 100)) < 1) Then Letras = Letras & "CIEN " Else Select Case Int(Numero / 100) Case 1 Letras = Letras & "CIENTO" Case 5 Letras = Letras & "QUINIENTOS" Case 7 Letras = Letras & "SETECIENTOS" Case 9 Letras = Letras & "NOVECIENTOS" Case Else Letras = Letras & Numeros(Int(Numero / 100)) End Select If (Int(Numero / 100) <> 1) And (Int(Numero / 100) <> 5) And (Int(Numero / 100) <> 7) And (Int(Numero / 100) <> 9) Then Letras = Letras & "CIENTOS " Else Letras = Letras & " " End If End If Numero = Numero - (Int(Numero / 100) * 100) End If '*---> Decenas If (Numero < 100) And (Numero > 9) Then If Numero < 31 Then Letras = Letras & Numeros(Int(Numero)) Numero = Numero - Int(Numero) Else Letras = Letras & Numeros(Int((Numero / 10)) * 10) Numero = Numero - (Int((Numero / 10)) * 10) If Numero > 0.99 Then Letras = Letras & " Y " End If End If End If '*---> Unidades If (Numero < 10) And (Numero > 0.99) Then Letras = Letras & Numeros(Int(Numero)) Numero = Numero - Int(Numero) End If Loop Until (Numero = 0) '*---> Decimales If (Decimales >= 0) Then Letras = Letras & " PESOS " Letras = Letras & Format(Decimales * 100, "00") & "/100 M.N." End If num_letras = Letras End Function |
| |||
Gracias Por La Macro... Gracias Por La Ayuda Me Esta Siendo De Gran Utilidad En Mi Trabajo... Pero Como Le Hago Para Que La Utilice En Otros Libros De Excel? Sin Esta Copiando En Cada Uno. Por Su Ayuda Graias.. |
| ||||
Re: Pasar de números a letras en Excel Pega la macro en un modulo "normal". guardalo el libro con el nombre que desees, ahora, en "guardar como", elige "Complemento de microsoft excel", y listo. Anda a HERRAMIENTAS - COMPLEMENTOS, activalo y ya Abraham |
| |||
Re: mejorado y corregido Cita:
Iniciado por carlosmys Function num_letras(Numero As Double) As String Dim Letras As String Dim HuboCentavos As Boolean Dim Decimales As Double Decimales = Numero - Int(Numero) Numero = Int(Numero) Dim Numeros(90) As String Numeros(0) = "CERO" Numeros(1) = "UNO" Numeros(2) = "DOS" Numeros(3) = "TRES" Numeros(4) = "CUATRO" Numeros(5) = "CINCO" Numeros(6) = "SEIS" Numeros(7) = "SIETE" Numeros(8) = "OCHO" Numeros(9) = "NUEVE" Numeros(10) = "DIEZ" Numeros(11) = "ONCE" Numeros(12) = "DOCE" Numeros(13) = "TRECE" Numeros(14) = "CATORCE" Numeros(15) = "QUINCE" Numeros(16) = "DIESCISEIS" Numeros(17) = "DIESCISIETE" Numeros(18) = "DIESCIOCHO" Numeros(19) = "DIESCINUEVE" Numeros(20) = "VEINTE" Numeros(21) = "VEINTIUNO" Numeros(22) = "VEINTIDOS" Numeros(23) = "VEINTITRES" Numeros(24) = "VEINTICUATRO" Numeros(25) = "VEINTICINCO" Numeros(26) = "VEINTISEIS" Numeros(27) = "VEINTISIETE" Numeros(28) = "VEINTIOCHO" Numeros(29) = "VEINTINUEVE" Numeros(30) = "TREINTA" Numeros(40) = "CUARENTA" Numeros(50) = "CINCUENTA" Numeros(60) = "SESENTA" Numeros(70) = "SETENTA" Numeros(80) = "OCHENTA" Numeros(90) = "NOVENTA" Do '*---> Centenas de Millón If (Numero < 1000000000) And (Numero >= 100000000) Then If (Int(Numero / 100000000) = 1) And ((Numero - (Int(Numero / 100000000) * 100000000)) < 1000000) Then Letras = Letras & "cien millones " Else Select Case Int(Numero / 100000000) Case 1 Letras = Letras & "CIENTO" Case 5 Letras = Letras & "QUINIENTOS" Case 7 Letras = Letras & "SETECIENTOS" Case 9 Letras = Letras & "NOVECIENTOS" Case Else Letras = Letras & Numeros(Int(Numero / 100000000)) End Select If (Int(Numero / 100000000) <> 1) And (Int(Numero / 100000000) <> 5) And (Int(Numero / 100000000) <> 7) And (Int(Numero / 100000000) <> 9) Then Letras = Letras & "CIENTOS " Else Letras = Letras & " " End If End If Numero = Numero - (Int(Numero / 100000000) * 100000000) End If '*---> Decenas de Millón If (Numero < 100000000) And (Numero >= 10000000) Then If Int(Numero / 1000000) < 16 Then Letras = Letras & Numeros(Int(Numero / 1000000)) Letras = Letras & " MILLONES " Numero = Numero - (Int(Numero / 1000000) * 1000000) Else Letras = Letras & Numeros(Int(Numero / 10000000) * 10) Numero = Numero - (Int(Numero / 10000000) * 10000000) If Numero > 1000000 Then Letras = Letras & " y " End If End If End If '*---> Unidades de Millón If (Numero < 10000000) And (Numero >= 1000000) Then If Int(Numero / 1000000) = 1 Then Letras = Letras & " UN MILLON " Else Letras = Letras & Numeros(Int(Numero / 1000000)) Letras = Letras & " MILLONES " End If Numero = Numero - (Int(Numero / 1000000) * 1000000) End If '*---> Centenas de Millar If (Numero < 1000000) And (Numero >= 100000) Then If (Int(Numero / 100000) = 1) And ((Numero - (Int(Numero / 100000) * 100000)) < 1000) Then Letras = Letras & "CIEN MIL " Else Select Case Int(Numero / 100000) Case 1 Letras = Letras & "CIENTO" Case 5 Letras = Letras & "QUINIENTOS" Case 7 Letras = Letras & "SETECIENTOS" Case 9 Letras = Letras & "NOVECIENTOS" Case Else Letras = Letras & Numeros(Int(Numero / 100000)) End Select If (Int(Numero / 100000) <> 1) And (Int(Numero / 100000) <> 5) And (Int(Numero / 100000) <> 7) And (Int(Numero / 100000) <> 9) Then Letras = Letras & "CIENTOS " Else Letras = Letras & " " End If End If Numero = Numero - (Int(Numero / 100000) * 100000) End If '*---> Decenas de Millar If (Numero < 100000) And (Numero >= 10000) Then If Int(Numero / 1000) < 16 Then Letras = Letras & Numeros(Int(Numero / 1000)) Letras = Letras & " MIL " Numero = Numero - (Int(Numero / 1000) * 1000) Else Letras = Letras & Numeros(Int(Numero / 10000) * 10) Numero = Numero - (Int((Numero / 10000)) * 10000) If Numero > 1000 Then Letras = Letras & " Y " Else Letras = Letras & " MIL " End If End If End If '*---> Unidades de Millar If (Numero < 10000) And (Numero >= 1000) Then If Int(Numero / 1000) = 1 Then Letras = Letras & " " Else Letras = Letras & Numeros(Int(Numero / 1000)) End If Letras = Letras & " MIL " Numero = Numero - (Int(Numero / 1000) * 1000) End If '*---> Centenas If (Numero < 1000) And (Numero > 99) Then If (Int(Numero / 100) = 1) And ((Numero - (Int(Numero / 100) * 100)) < 1) Then Letras = Letras & "CIEN " Else Select Case Int(Numero / 100) Case 1 Letras = Letras & "CIENTO" Case 5 Letras = Letras & "QUINIENTOS" Case 7 Letras = Letras & "SETECIENTOS" Case 9 Letras = Letras & "NOVECIENTOS" Case Else Letras = Letras & Numeros(Int(Numero / 100)) End Select If (Int(Numero / 100) <> 1) And (Int(Numero / 100) <> 5) And (Int(Numero / 100) <> 7) And (Int(Numero / 100) <> 9) Then Letras = Letras & "CIENTOS " Else Letras = Letras & " " End If End If Numero = Numero - (Int(Numero / 100) * 100) End If '*---> Decenas If (Numero < 100) And (Numero > 9) Then If Numero < 31 Then Letras = Letras & Numeros(Int(Numero)) Numero = Numero - Int(Numero) Else Letras = Letras & Numeros(Int((Numero / 10)) * 10) Numero = Numero - (Int((Numero / 10)) * 10) If Numero > 0.99 Then Letras = Letras & " Y " End If End If End If '*---> Unidades If (Numero < 10) And (Numero > 0.99) Then Letras = Letras & Numeros(Int(Numero)) Numero = Numero - Int(Numero) End If Loop Until (Numero = 0) '*---> Decimales If (Decimales >= 0) Then Letras = Letras & " PESOS " Letras = Letras & Format(Decimales * 100, "00") & "/100 M.N." End If num_letras = Letras End Function |
| |||
Re: Pasar de números a letras en Excel Cita: Al darle guardar se guarda todo el archivo de excel, que boton guarda la macro?
Iniciado por uzziber Con la hoja de Excel abierta; abre el editor de VB, selecciona Insertar Módulo; pegas la macro; guardas la macro con el nombre que desees. Cierras el editor. En la celda en la que aplicarás la función; usa el nombre de la macro en la fórmula para convertir los números a texto. Salva (guarda) la hoja y en la siguiente apertura debe reconocer la fórmula y la función. Saludos... |
| |||
Respuesta: Pasar de números a letras en Excel disculpen la intro.. pero copie el ultimo codigo y lo adapte para q sea en Moneda Nacional ( Nuevos Soles ) .. aqui existen algunas correciones. 'Funciones para convertir de números a letras 'Llamada : Letras(Número,Formato) - Formato 1-N.S., 2-Dólares, 3-Euros, 4 Francos Suizos Function Unidades(num, UNO) Dim U Dim Cad U = Array("UN", "DOS", "TRES", "CUATRO", "CINCO", "SEIS", "SIETE", "OCHO", "NUEVE") Cad = "" If num = 1 Then If UNO = 1 Then Cad = Cad & "UNO" Else Cad = Cad & "UN" End If Else Cad = Cad & U(num - 1) End If Unidades = Cad End Function Function Decenas(num1, res) Dim D1 D1 = Array("ONCE", "DOCE", "TRECE", "CATORCE", "QUINCE", "DIECISEIS", "DIECISIETE", "DIECIOCHO", "DIECINUEVE") D2 = Array("DIEZ", "VEINT", "TREINTA", "CUARENTA", "CINCUENTA", "SESENTA", "SETENTA", "OCHENTA", "NOVENTA") If num1 > 10 And num1 < 20 Then Cad1 = D1(num1 - 10 - 1) Else Cad1 = D2((num1 \ 10) - 1) If (num1 \ 10) <> 2 Then If res > 0 Then Cad1 = Cad1 & " Y " Cad1 = Cad1 & Unidades(num1 Mod 10, 1) End If Else If res = 0 Then Cad1 = Cad1 & "E" Else Cad1 = Cad1 & "I" Cad1 = Cad1 & Unidades(num1 Mod 10, 1) End If End If End If Decenas = Cad1 End Function Function Cientos(num2) num3 = num2 \ 100 Select Case num3 Case 1 If num2 = 100 Then cad2 = "CIEN " Else cad2 = "CIENTO " End If Case 5 cad2 = "QUINIENTOS " Case 7 cad2 = "SETECIENTOS " Case 9 cad2 = "NOVECIENTOS " Case Else cad2 = Unidades(num3, 0) & "CIENTOS " End Select num2 = num2 Mod 100 If num2 > 0 Then If num2 < 10 Then cad2 = cad2 & Unidades(num2, num2) Else cad2 = cad2 & Decenas(num2, num2 Mod 10) End If End If Cientos = cad2 End Function Function Miles(num4) If (num4 >= 100) Then cad3 = Cientos(num4) Else If (num4 >= 10) Then cad3 = Decenas(num4, num4 Mod 10) Else cad3 = Unidades(num4, 0) End If End If cad3 = cad3 & " MIL " Miles = cad3 End Function Function Millones(cant) If cant = 1 Then ter = " " Else ter = "ES " End If If (cant >= 1000) Then cantl = cantl & Miles(cant \ 1000) cant = cant Mod 1000 End If If cant > 0 Then If cant >= 100 Then cantl = cantl & Cientos(cant) Else If cant >= 10 Then cantl = cantl & Decenas(cant, cant Mod 10) Else cantl = cantl & Unidades(cant, 0) End If End If End If Millones = cantl & " MILLON" & ter End Function Function decimales(numero As Single) As Integer Dim iaux As Integer iaux = numero - Application.Round(numero, 2) decimales = iaux End Function Function letras(cantm As Variant, ByVal mon As Integer) As String Dim cants1 As String, num1 As Variant, num2 As Variant num1 = cantm \ 1000000 num2 = cantm - (num1 * 1000000) cents = (num2 * 100) Mod 100 If cents = 0 Then cents1 = "00" Else cents1 = Format(cents) End If cantm = cantm - (cents / 100) If cantm >= 1000000 Then cantlm = Millones(cantm \ 1000000) cantm = cantm Mod 1000000 End If If cantm > 0 Then If (cantm >= 1000) Then cantlm = cantlm & Miles(cantm \ 1000) cantm = cantm Mod 1000 End If End If If cantm > 0 Then If cantm >= 100 Then cantlm = cantlm & Cientos(cantm) Else If cantm >= 10 Then cantlm = cantlm & Decenas(cantm, cantm Mod 10) Else cantlm = cantlm & Unidades(cantm, 1) End If End If End If If mon = 1 Then letras = "(" & cantlm & " con " & cents1 & "/100 NUEVOS SOLES)" Else If mon = 2 Then letras = "(" & cantlm & " con " & cents1 & "/100 DOLARES AMERICANOS)" Else If mon = 3 Then letras = "(" & cantlm & " con " & cents1 & "/100 EUROS)" Else letras = "(" & cantlm & " con " & cents1 & "/100 CHF)" End If End If End If End Function Y gracias a todos los colaboradores... |
| |||
Respuesta: Pasar de números a letras en Excel Cita: muchas gr5acias exelente tu trabajo me funciono a la perfeccion solo cambie de pesos a nuevos soles gracias
Iniciado por gvenegas para el que no quiere instalar dll; delarara la funcion en un módulo nuevo... Herramientas > macro> editor de visual basic // insertar módulo la fórmula sería =num_letras(12345) ; o bien =num_letras(b1) lo que no he logrado es que en la misma función coloque xxx pesos; pero eso lo tengo solucionado de la siguiente manera: =num_letras(b1)&" pesos" |
| |||
agradecimiento y un pequeño ajuste al excelente codigo de pedreti EL AJUSTE AL FINAL NOS PERMITE SIMPLEMENTE LLAMAR LA FUNCION ASI : =num_letras(D13) Y ASI LA MISMA FUNCION LE AGREGA LA PALABRA PESOS Y CENTAVOS EN LOS CASOS REQUERIDOS EJ. 100 = CIEN PESOS O 100, 01 = CIEN PESOS CON UN CENTAVO Function num_letras(Numero As Double) As String Dim Letras As String Dim HuboCentavos As Boolean Dim Decimales As Double Decimales = Numero - Int(Numero) Numero = Int(Numero) Dim Numeros(90) As String Numeros(0) = "cero" Numeros(1) = "uno" Numeros(2) = "dos" Numeros(3) = "tres" Numeros(4) = "cuatro" Numeros(5) = "cinco" Numeros(6) = "seis" Numeros(7) = "siete" Numeros(8) = "ocho" Numeros(9) = "nueve" Numeros(10) = "diez" Numeros(11) = "once" Numeros(12) = "doce" Numeros(13) = "trece" Numeros(14) = "catorce" Numeros(15) = "quince" Numeros(20) = "veinte" Numeros(30) = "treinta" Numeros(40) = "cuarenta" Numeros(50) = "cincuenta" Numeros(60) = "sesenta" Numeros(70) = "setenta" Numeros(80) = "ochenta" Numeros(90) = "noventa" Do '*---> Centenas de Millón If (Numero < 1000000000) And (Numero >= 100000000) Then If (Int(Numero / 100000000) = 1) And ((Numero - (Int(Numero / 100000000) * 100000000)) < 1000000) Then Letras = Letras & "cien millones " Else Select Case Int(Numero / 100000000) Case 1 Letras = Letras & "ciento" Case 5 Letras = Letras & "quinientos" Case 7 Letras = Letras & "setecientos" Case 9 Letras = Letras & "novecientos" Case Else Letras = Letras & Numeros(Int(Numero / 100000000)) End Select If (Int(Numero / 100000000) <> 1) And (Int(Numero / 100000000) <> 5) And (Int(Numero / 100000000) <> 7) And (Int(Numero / 100000000) <> 9) Then Letras = Letras & "cientos " Else Letras = Letras & " " End If End If Numero = Numero - (Int(Numero / 100000000) * 100000000) End If '*---> Decenas de Millón If (Numero < 100000000) And (Numero >= 10000000) Then If Int(Numero / 1000000) < 16 Then Letras = Letras & Numeros(Int(Numero / 1000000)) Letras = Letras & " millones " Numero = Numero - (Int(Numero / 1000000) * 1000000) Else Letras = Letras & Numeros(Int(Numero / 10000000) * 10) Numero = Numero - (Int(Numero / 10000000) * 10000000) If Numero > 1000000 Then Letras = Letras & " y " End If End If End If '*---> Unidades de Millón If (Numero < 10000000) And (Numero >= 1000000) Then If Int(Numero / 1000000) = 1 Then Letras = Letras & " un millón " Else Letras = Letras & Numeros(Int(Numero / 1000000)) Letras = Letras & " millones " End If Numero = Numero - (Int(Numero / 1000000) * 1000000) End If '*---> Centenas de Millar If (Numero < 1000000) And (Numero >= 100000) Then If (Int(Numero / 100000) = 1) And ((Numero - (Int(Numero / 100000) * 100000)) < 1000) Then Letras = Letras & "cien mil " Else Select Case Int(Numero / 100000) Case 1 Letras = Letras & "ciento" Case 5 Letras = Letras & "quinientos" Case 7 Letras = Letras & "setecientos" Case 9 Letras = Letras & "novecientos" Case Else Letras = Letras & Numeros(Int(Numero / 100000)) End Select If (Int(Numero / 100000) <> 1) And (Int(Numero / 100000) <> 5) And (Int(Numero / 100000) <> 7) And (Int(Numero / 100000) <> 9) Then Letras = Letras & "cientos " Else Letras = Letras & " " End If End If Numero = Numero - (Int(Numero / 100000) * 100000) End If '*---> Decenas de Millar If (Numero < 100000) And (Numero >= 10000) Then If Int(Numero / 1000) < 16 Then Letras = Letras & Numeros(Int(Numero / 1000)) Letras = Letras & " mil " Numero = Numero - (Int(Numero / 1000) * 1000) Else Letras = Letras & Numeros(Int(Numero / 10000) * 10) Numero = Numero - (Int((Numero / 10000)) * 10000) If Numero > 1000 Then Letras = Letras & " y " Else Letras = Letras & " mil " End If End If End If '*---> Unidades de Millar If (Numero < 10000) And (Numero >= 1000) Then If Int(Numero / 1000) = 1 Then Letras = Letras & "un" Else Letras = Letras & Numeros(Int(Numero / 1000)) End If Letras = Letras & " mil " Numero = Numero - (Int(Numero / 1000) * 1000) End If '*---> Centenas If (Numero < 1000) And (Numero > 99) Then If (Int(Numero / 100) = 1) And ((Numero - (Int(Numero / 100) * 100)) < 1) Then Letras = Letras & "cien " Else Select Case Int(Numero / 100) Case 1 Letras = Letras & "ciento" Case 5 Letras = Letras & "quinientos" Case 7 Letras = Letras & "setecientos" Case 9 Letras = Letras & "novecientos" Case Else Letras = Letras & Numeros(Int(Numero / 100)) End Select If (Int(Numero / 100) <> 1) And (Int(Numero / 100) <> 5) And (Int(Numero / 100) <> 7) And (Int(Numero / 100) <> 9) Then Letras = Letras & "cientos " Else Letras = Letras & " " End If End If Numero = Numero - (Int(Numero / 100) * 100) End If '*---> Decenas If (Numero < 100) And (Numero > 9) Then If Numero < 16 Then Letras = Letras & Numeros(Int(Numero)) Numero = Numero - Int(Numero) Else Letras = Letras & Numeros(Int((Numero / 10)) * 10) Numero = Numero - (Int((Numero / 10)) * 10) If Numero > 0.99 Then Letras = Letras & " y " End If End If End If '*---> Unidades If (Numero < 10) And (Numero > 0.99) Then Letras = Letras & Numeros(Int(Numero)) Numero = Numero - Int(Numero) End If Loop Until (Numero = 0) '*---> Decimales If (Decimales > 0) Then Letras = Letras & " pesos con " Letras = Letras & Format(Decimales * 100, "00") & " centavos" Else Letras = Letras & " pesos " End If num_letras = Letras End Function |
| ||||
Respuesta: Pasar de números a letras en Excel antes que nada queria agradecer por las listas con ejemplos, son de gran utilidad y sirven de mucho. este ultimo codigo sigue teniendo problemas con los 500000 (quinientos) y los 2500000 que pone dos millones quinientos igual que si fuese 2000500. lastima que no se tanto, sino hubiese hecho el intento de corregirlo, si alguien puede corregirlo se lo voy a agradecer. |
| |||
Respuesta: Pasar de números a letras en Excel Hola. Cuando cierro y abro el libro de exel ya con la funcion puesta para que reconosca la macros me sale un error: Se han deshabilitado las macros porque el nivel de seguridad configurado es alto y no se ha asociado a las mismas un certificado confiable firmado digitalmente... Como puedo solucionar esto, alguien podria ayudarme por favor. Saludos. |
| ||||
Respuesta: Re: Pasar de números a letras en Excel Hola, muy bueno el codigo, sin embargo presenta ciertos errores y limitaciones: 1. Marca error cuando la cantidad es menor a 1 2. Si la cantidad es menor a 2 debiera decir: UN PESO ... pero cuando usas la funcion pone UN PESOS. 3. 20,000 lo expresa como VEINTEE MIL... 4. 21,000 lo expresa como VEINTEIUN MIL... 5. 22,000 lo expresa como VEINTEIDOS MIL... Y asi sucesivamente, solo se da el error los "veintes mil" Alguna sugerencia de que debo cambiar para corregir todos estos errores?? Gracias por su valiosa aportación. ccrux. Cita:
Iniciado por Jorge Luis Espinosa Recargado y remasterizado, con cuatro diferentes monedas: Saludos! 'Funciones para convertir de números a letras 'Llamada : Letras(Número,Formato) - Formato 1-Pesos, 2-Dólares, 3-Euros, 4 Francos Suizos Function Unidades(num, UNO) Dim U Dim Cad U = Array("UN", "DOS", "TRES", "CUATRO", "CINCO", "SEIS", "SIETE", "OCHO", "NUEVE") Cad = "" If num = 1 Then If UNO = 1 Then Cad = Cad & "UN" Else Cad = Cad & "UN" End If Else Cad = Cad & U(num - 1) End If Unidades = Cad End Function Function Decenas(num1, res) Dim D1 D1 = Array("ONCE", "DOCE", "TRECE", "CATORCE", "QUINCE", "DIECISEIS", "DIECISIETE", _ "DIECIOCHO", "DIECINUEVE") D2 = Array("DIEZ", "VEINTE", "TREINTA", "CUARENTA", "CINCUENTA", "SESENTA", _ "SETENTA", "OCHENTA", "NOVENTA") If num1 > 10 And num1 < 20 Then Cad1 = D1(num1 - 10 - 1) Else Cad1 = D2((num1 \ 10) - 1) If (num1 \ 10) <> 2 Then If res > 0 Then Cad1 = Cad1 & " Y " Cad1 = Cad1 & Unidades(num1 Mod 10, 0) End If Else If res = 0 Then Cad1 = Cad1 & "E" Else Cad1 = Cad1 & "I" Cad1 = Cad1 & Unidades(num1 Mod 10, 0) End If End If End If Decenas = Cad1 End Function Function Cientos(num2) num3 = num2 \ 100 Select Case num3 Case 1 If num2 = 100 Then cad2 = "CIEN " Else cad2 = "CIENTO " End If Case 5 cad2 = "QUINIENTOS " Case 7 cad2 = "SETECIENTOS " Case 9 cad2 = "NOVECIENTOS " Case Else cad2 = Unidades(num3, 0) & "CIENTOS " End Select num2 = num2 Mod 100 If num2 > 0 Then If num2 < 10 Then cad2 = cad2 & Unidades(num2, num2) Else cad2 = cad2 & Decenas(num2, num2 Mod 10) End If End If Cientos = cad2 End Function Function Miles(num4) If (num4 >= 100) Then cad3 = Cientos(num4) Else If (num4 >= 10) Then cad3 = Decenas(num4, num4 Mod 10) Else cad3 = Unidades(num4, 0) End If End If cad3 = cad3 & " MIL " Miles = cad3 End Function Function Millones(cant) If cant = 1 Then ter = " " Else ter = "ES " End If If (cant >= 1000) Then cantl = cantl & Miles(cant \ 1000) cant = cant Mod 1000 End If If cant > 0 Then If cant >= 100 Then cantl = cantl & Cientos(cant) Else If cant >= 10 Then cantl = cantl & Decenas(cant, cant Mod 10) Else cantl = cantl & Unidades(cant, 0) End If End If End If Millones = cantl & " MILLON" & ter End Function Function decimales(numero As Single) As Integer Dim iaux As Integer iaux = numero - Application.Round(numero, 2) decimales = iaux End Function Function letras(cantm As Variant, ByVal mon As Integer) As String Dim cants1 As String, num1 As Variant, num2 As Variant num1 = cantm \ 1000000 num2 = cantm - (num1 * 1000000) cents = (num2 * 100) Mod 100 If cents = 0 Then cents1 = "00" Else cents1 = Format(cents) End If cantm = cantm - (cents / 100) If cantm >= 1000000 Then cantlm = Millones(cantm \ 1000000) cantm = cantm Mod 1000000 End If If cantm > 0 Then If (cantm >= 1000) Then cantlm = cantlm & Miles(cantm \ 1000) cantm = cantm Mod 1000 End If End If If cantm > 0 Then If cantm >= 100 Then cantlm = cantlm & Cientos(cantm) Else If cantm >= 10 Then cantlm = cantlm & Decenas(cantm, cantm Mod 10) Else cantlm = cantlm & Unidades(cantm, 1) End If End If End If If mon = 1 Then letras = "(" & cantlm & " PESOS " & cents1 & "/100 M.N.)" Else If mon = 2 Then letras = "(" & cantlm & " DOLARES " & cents1 & "/100 U.S.D.)" Else If mon = 3 Then letras = "(" & cantlm & " EUROS " & cents1 & "/100 €)" Else letras = "(" & cantlm & " FRANCOS SUIZOS " & cents1 & "/100 CHF)" End If End If End If End Function |
| |||
Respuesta: Pasar de números a letras en Excel Algunos usuarios modificaron la macro para adecuarla a sus necesidades; tal vez hayas copiado una macro que tiene esas deficiencias.... Revisa el post #41 del usuario tabienfacil; tal vez esa macro te sirva. Saludos.... |
| ||||
Respuesta: Pasar de números a letras en Excel Bueno, intente con el post que me dijiste y sigue presentando errores: 1. No contempla cantidades menores a 1 peso 2. Para cantidades de 1 a 1.99 pesos, lo expresa como uno pesos, y deberia ser un peso 3. Se solucional el problema para la cantidad de 20,000. pero para 21,000 lo expresa como veinte mil mil pesos... 4. Para 22,000 lo expresa como veinte y dos mil... y deberia ser veintidos mil... y asi sucesivamente. Asi que, sugerencias, conozco algo de vba pero no tanto asi que algo de ayudita para resolver esto seria ideal. Gracias. |
| |||
Respuesta: Pasar de números a letras en Excel Para efectos prácticos, la macro está bien; no creo que haya facturas de 1 peso ó menores; Agrega éstas líneas a la macro... Loop Until (Numero = 0) If (Letras = "un") Then num_letras = UCase("(" & Letras & " peso " & (Round(Decimales * 100)) & "/100 M.N.)") Else num_letras = UCase("(" & Letras & " pesos " & (Round(Decimales * 100)) & "/100 M.N.)") End If End Function Y llegó el momento de que aprendas algo más de VB; como puedes leer en el hilo, los foreros mejoraron, modificaron y ajustaron a sus necesidades la macro; te toca ajustarla a tus necesidades, ojalá puedas corregir el tema de los "veintemiles" (que ya está hecho) y podrías intentar hacer que cuándo el valor sea "0.55" aparezca en el texto "cero pesos"; luego subes la macro para que otros la puedan usar.... Saludos... |
| ||||
Respuesta: Pasar de números a letras en Excel Buenas tardes, Aqui de nuevo, estimado uzziber, muchas gracias por tu respuesta y tip. No obstante dado que me es casi imposible ponerme a programa en vba por una importante razon: no soy programador ni estudie nada parecido asi que conozco poco de la materia por lo que me requeriria mucho tiempo leer y poner en practica, es posible que lo hiciera si ahora contara con ese tiempo. No obstante, casi magicamente llego a mis manos otro codigo que permite hacer esta tarea, lo he probado y parece funcionar al 100%, por lo tanto se los comparto de la misma manera que me lo compartieron:
Código:
Por cierto, realmente te sorprendera saber que si existen no solo facturas sino tambien otros tipos de documentos de 1 peso o menores.Option Explicit 'Argumentos: 'Numeros_Letras(Numero,"Peso",FALSO,"centavo","(","/100 m.n)",3) 'Numero = Valor que deseamos convertir en texto 'Moneda = es el nombre de la moneda a mostrar (peso, euro, libra, sol, lira, dólar) 'Fraccion_Letras = Verdadero para que la fraccion de la moneda ' tambien la convierta a letras y FALSO unicamente impore sin fración '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 Gracias. Cita:
Iniciado por uzziber Para efectos prácticos, la macro está bien; no creo que haya facturas de 1 peso ó menores; Agrega éstas líneas a la macro... Loop Until (Numero = 0) If (Letras = "un") Then num_letras = UCase("(" & Letras & " peso " & (Round(Decimales * 100)) & "/100 M.N.)") Else num_letras = UCase("(" & Letras & " pesos " & (Round(Decimales * 100)) & "/100 M.N.)") End If End Function Y llegó el momento de que aprendas algo más de VB; como puedes leer en el hilo, los foreros mejoraron, modificaron y ajustaron a sus necesidades la macro; te toca ajustarla a tus necesidades, ojalá puedas corregir el tema de los "veintemiles" (que ya está hecho) y podrías intentar hacer que cuándo el valor sea "0.55" aparezca en el texto "cero pesos"; luego subes la macro para que otros la puedan usar.... Saludos... |
| |||
Respuesta: Pasar de números a letras en Excel Cita: Mi estimado ccrux713:
Iniciado por ccrux713 Buenas tardes, Aqui de nuevo, estimado uzziber, muchas gracias por tu respuesta y tip. No obstante dado que me es casi imposible ponerme a programa en vba por una importante razon: no soy programador ni estudie nada parecido asi que conozco poco de la materia por lo que me requeriria mucho tiempo leer y poner en practica, es posible que lo hiciera si ahora contara con ese tiempo. Yo tampoco soy programador, estudié Ingeniería Industrial; lo que sé de VB (muy poco, por cierto) lo aprendí de la necesidad de hacer documentos acorde a mis necesidades, porque los reportes de los sistemas informáticos de las empresas (p.e. SAP) no me proporcionan la información que necesito para mis tareas laborales. Gracias por el aporte, se ve bien... Pero, piénsalo; siempre será mejor que sepas hacerlo tú.... Saludos... |
| |||
Respuesta: Pasar de números a letras en Excel Maravillosa solución a un viejo problema. Mil gracias. Me funciona muy bien agregando la palabra centavos, pero un favor: Podrían decirme cómo convertir esos centavos también a palabras. Que todo el número se convierta exclusivamente en palabras. diez dolares con 12 centavos A diez dolares con doce centavos. Desde ya muchas gracias. |