Foros del Web » Soporte técnico » Ofimática »

Pasar de números a letras en Excel

Estas en el tema de Pasar de números a letras en Excel en el foro de Ofimática en Foros del Web. 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 ...

  #31 (permalink)  
Antiguo 08/12/2007, 19:43
 
Fecha de Ingreso: diciembre-2007
Mensajes: 1
Antigüedad: 16 años, 4 meses
Puntos: 0
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.
  #32 (permalink)  
Antiguo 10/12/2007, 10:53
Colaborador
 
Fecha de Ingreso: agosto-2004
Mensajes: 1.611
Antigüedad: 19 años, 8 meses
Puntos: 47
Re: Pasar de números a letras en Excel

¿Ya leíste TODO el hilo?
¿Qué error te regresa?
¿Ya escribiste la función?

Saludos...
  #33 (permalink)  
Antiguo 06/02/2008, 13:52
 
Fecha de Ingreso: febrero-2008
Mensajes: 2
Antigüedad: 16 años, 2 meses
Puntos: 0
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
  #34 (permalink)  
Antiguo 06/02/2008, 13:53
 
Fecha de Ingreso: febrero-2008
Mensajes: 2
Antigüedad: 16 años, 2 meses
Puntos: 0
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
  #35 (permalink)  
Antiguo 06/02/2008, 17:57
Colaborador
 
Fecha de Ingreso: agosto-2004
Mensajes: 1.611
Antigüedad: 19 años, 8 meses
Puntos: 47
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...
  #36 (permalink)  
Antiguo 05/03/2008, 11:46
 
Fecha de Ingreso: marzo-2008
Mensajes: 2
Antigüedad: 16 años, 1 mes
Puntos: 0
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
  #37 (permalink)  
Antiguo 12/03/2008, 14:00
 
Fecha de Ingreso: marzo-2008
Mensajes: 1
Antigüedad: 16 años, 1 mes
Puntos: 0
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..
  #38 (permalink)  
Antiguo 12/03/2008, 14:49
Avatar de abrahamvj  
Fecha de Ingreso: julio-2006
Ubicación: Lima, Peru
Mensajes: 708
Antigüedad: 17 años, 9 meses
Puntos: 18
Re: Pasar de números a letras en Excel

Opcion 1: Conviertelo en complemento (xla) y despues activalo en HERRAMIENTAS - COMPLEMENTOS

Opcion 2: Guardalo en el libro Personal.xls

Abraham
  #39 (permalink)  
Antiguo 27/03/2008, 09:28
Avatar de josecmorales  
Fecha de Ingreso: noviembre-2003
Ubicación: Puerto Ordaz/ Venezuela
Mensajes: 1.161
Antigüedad: 20 años, 5 meses
Puntos: 4
Re: Pasar de números a letras en Excel

Cita:
Iniciado por abrahamvj Ver Mensaje
Opcion 1: Conviertelo en complemento (xla) y despues activalo en HERRAMIENTAS - COMPLEMENTOS

Opcion 2: Guardalo en el libro Personal.xls

Abraham
Como hago lo primero amigo!
__________________
"...El pueblo se acostumbra a obedecerle y él se acostumbra a mandarlo; de donde se origina la usurpación y la tiranía..." Bolívar 1819.
  #40 (permalink)  
Antiguo 27/03/2008, 15:40
Avatar de abrahamvj  
Fecha de Ingreso: julio-2006
Ubicación: Lima, Peru
Mensajes: 708
Antigüedad: 17 años, 9 meses
Puntos: 18
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
  #41 (permalink)  
Antiguo 13/05/2008, 10:36
 
Fecha de Ingreso: mayo-2008
Mensajes: 3
Antigüedad: 15 años, 11 meses
Puntos: 0
De acuerdo Re: mejorado y corregido

Cita:
Iniciado por carlosmys Ver Mensaje
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
  #42 (permalink)  
Antiguo 13/05/2008, 10:37
 
Fecha de Ingreso: mayo-2008
Mensajes: 3
Antigüedad: 15 años, 11 meses
Puntos: 0
Re: Pasar de números a letras en Excel

Este es el que mejor me funciono, Gracias
  #43 (permalink)  
Antiguo 14/05/2008, 09:05
 
Fecha de Ingreso: mayo-2008
Mensajes: 3
Antigüedad: 15 años, 11 meses
Puntos: 0
Re: Pasar de números a letras en Excel

Cita:
Iniciado por uzziber Ver Mensaje
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...
Al darle guardar se guarda todo el archivo de excel, que boton guarda la macro?
  #44 (permalink)  
Antiguo 09/06/2008, 16:20
 
Fecha de Ingreso: junio-2008
Mensajes: 1
Antigüedad: 15 años, 10 meses
Puntos: 0
De acuerdo 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...
  #45 (permalink)  
Antiguo 05/08/2008, 16:10
 
Fecha de Ingreso: agosto-2008
Mensajes: 2
Antigüedad: 15 años, 8 meses
Puntos: 0
ayuda urgente

hola quisiera que alguien me ayude sobre este tema porque hago todo lo correcto pero cuando cierro el archivo y lo vuelvo a abrir me sale error
  #46 (permalink)  
Antiguo 05/08/2008, 16:18
Colaborador
 
Fecha de Ingreso: agosto-2004
Mensajes: 1.611
Antigüedad: 19 años, 8 meses
Puntos: 47
Respuesta: Pasar de números a letras en Excel

Bienvenid@...

Dices que haces lo correcto....

¿Como escribes la función?
¿Qué error es?
  #47 (permalink)  
Antiguo 05/08/2008, 16:23
 
Fecha de Ingreso: agosto-2008
Mensajes: 2
Antigüedad: 15 años, 8 meses
Puntos: 0
Necesito ayuda

cuando cierro e libro de excel y luego lo vuelvo a abrir se borra todo.... por favor alguien me diga que puedo hacer
  #48 (permalink)  
Antiguo 28/02/2009, 11:10
 
Fecha de Ingreso: febrero-2009
Mensajes: 1
Antigüedad: 15 años, 1 mes
Puntos: 0
Respuesta: Pasar de números a letras en Excel

Cita:
Iniciado por gvenegas Ver Mensaje
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"
muchas gr5acias exelente tu trabajo me funciono a la perfeccion solo cambie de pesos a nuevos soles gracias
  #49 (permalink)  
Antiguo 12/06/2009, 13:05
 
Fecha de Ingreso: junio-2009
Mensajes: 1
Antigüedad: 14 años, 10 meses
Puntos: 0
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
  #50 (permalink)  
Antiguo 18/06/2009, 12:59
Avatar de jlsoutoz  
Fecha de Ingreso: junio-2009
Ubicación: Buenos Aires
Mensajes: 67
Antigüedad: 14 años, 10 meses
Puntos: 2
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.
  #51 (permalink)  
Antiguo 21/06/2009, 22:56
 
Fecha de Ingreso: agosto-2008
Mensajes: 41
Antigüedad: 15 años, 8 meses
Puntos: 1
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.
  #52 (permalink)  
Antiguo 03/08/2009, 11:47
 
Fecha de Ingreso: agosto-2009
Mensajes: 1
Antigüedad: 14 años, 8 meses
Puntos: 0
Mensaje Respuesta: Pasar de números a letras en Excel

Buen día:
Aquí les dejo un phonck.blogspot.com/2009/05/numeros-letras.html link que seguro les será de utilidad.

Saludos...
  #53 (permalink)  
Antiguo 11/03/2010, 16:16
Avatar de ccrux713  
Fecha de Ingreso: junio-2007
Ubicación: Campeche
Mensajes: 5
Antigüedad: 16 años, 10 meses
Puntos: 0
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 Ver Mensaje
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
  #54 (permalink)  
Antiguo 11/03/2010, 17:17
Colaborador
 
Fecha de Ingreso: agosto-2004
Mensajes: 1.611
Antigüedad: 19 años, 8 meses
Puntos: 47
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....
  #55 (permalink)  
Antiguo 11/03/2010, 17:31
Avatar de ccrux713  
Fecha de Ingreso: junio-2007
Ubicación: Campeche
Mensajes: 5
Antigüedad: 16 años, 10 meses
Puntos: 0
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.
  #56 (permalink)  
Antiguo 13/03/2010, 13:04
Colaborador
 
Fecha de Ingreso: agosto-2004
Mensajes: 1.611
Antigüedad: 19 años, 8 meses
Puntos: 47
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...
  #57 (permalink)  
Antiguo 23/03/2010, 17:21
Avatar de ccrux713  
Fecha de Ingreso: junio-2007
Ubicación: Campeche
Mensajes: 5
Antigüedad: 16 años, 10 meses
Puntos: 0
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:
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
Por cierto, realmente te sorprendera saber que si existen no solo facturas sino tambien otros tipos de documentos de 1 peso o menores.

Gracias.



Cita:
Iniciado por uzziber Ver Mensaje
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...
  #58 (permalink)  
Antiguo 25/03/2010, 20:49
Colaborador
 
Fecha de Ingreso: agosto-2004
Mensajes: 1.611
Antigüedad: 19 años, 8 meses
Puntos: 47
Respuesta: Pasar de números a letras en Excel

Cita:
Iniciado por ccrux713 Ver Mensaje
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.
Mi estimado ccrux713:
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...
  #59 (permalink)  
Antiguo 03/07/2010, 00:52
 
Fecha de Ingreso: julio-2010
Mensajes: 1
Antigüedad: 13 años, 9 meses
Puntos: 0
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.
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta

SíEste tema le ha gustado a 16 personas (incluyéndote)




La zona horaria es GMT -6. Ahora son las 20:33.