Foros del Web

Foros del Web (http://www.forosdelweb.com/)
-   Ofimática (http://www.forosdelweb.com/f90/)
-   -   Pasar de números a letras en Excel (http://www.forosdelweb.com/f90/pasar-numeros-letras-excel-347987/)

KarlanKas 07/11/2005 11:16

Pasar de números a letras en Excel
 

Información sacada de http://www.galeon.com/ortihuela/trucosexcel.htm

Ya que mediante el formato de Excel no es posible, la solución puede ser crear un módulo de Visual Basic que nos realice el trabajo. Afortunadamente, Microsoft nos ofrece otra alternativa en su página web del área de descarga de Excel. Se trata de utilizar una función llamada Recibo, que se encuentra en una librería dinámica y que puede llamarse desde Excel definiendo una función.

Veamos los pasos a seguir:

1. Descargamos a nuestro disco duro el archivo E10467.EXE de la dirección http://www.microsoft.com/spain/suppo...les/E10467.EXE (Ya no va esa dirección. Está disponible como adjunto de este archivo)
2. El archivo E10467.EXE contiene dos archivos empaquetados: DLLTCAST.DLL y E10467.DOC. El primero es la librería dinámica que contiene la función Recibo y el segundo es un archivo de Word con las instrucciones para utilizar en Excel la función. Ejecutamos el archivo E10467.EXE y copiamos el archivo DLLTCAST.DLL a la carpeta c:\windows\system de nuestro disco duro.
3. Arrancamos Excel y en un nuevo libro o en el que necesitemos utilizar la conversión de números a letras, insertamos un nuevo módulo de Visual Basic. En Excel 2000 mediante el menú Herramientas--Macro--Editor de Visual Basic y a continuación ejecutando en este editor el comando Insertar--Módulo.
4. Escribimos el código siguiente en el módulo:
Código:

Declare Sub Recibo Lib "dlltcast.dll" (cifra As Long, ByVal texto As String)
          Function letras(minumero)
          Dim texto As String * 255
          Dim cifra As Long
          texto = String(255, 0)
          cifra = CLng(minumero)
          Call Recibo(cifra, texto)
          letras = texto
          End Function

5. Guardamos el libro de trabajo y cerramos el editor de Visual Basic. Probamos a utilizar la función en la hoja de cálculo en la que hemos definido la función escribiendo =letra(Número). Siendo número un valor numérico o una referencia de celda que contenga un número. Por ejemplo: =letra(56789) o =letra(B2).

En el archivo de Word E10467.DOC podemos ver la forma de utilizar la función desde cualquier hoja de cálculo sin tener que definirla nuevamente.

bluefoxtiger 21/11/2005 17:09

Buen dato. El link no funciona

KarlanKas 21/11/2005 17:45

Y no se ve el archivo que dejé adjunto en el mensaje? Voy a hver si lo habilitan...

Apolo 21/11/2005 20:43

Cita:

Iniciado por bluefoxtiger
Buen dato. El link no funciona

Creo que ahora sí funciona. :arriba:

ass1404 11/01/2006 09:58

Convertir numeros a letras en Excel 2000
 
Hola Amigo

Soy Chileno, use tu codigo a la perfeccion, pero , aca no escribimos de la forma de ustedes los numeros, por ejemplo :

$ 1.590.-

En España son : un mil quinientas noventa

En chile son : un mil quinientos noventa

Te fijas que la terminacion de " quinientas " no es igual a la chilena , bueno en tu codigo es el problema que tengo, tendras el codigo que me sirve ? te lo agradeceria.

Mi nombre es Andres Salinas

ass1404 11/01/2006 10:00

Cita:

Iniciado por ass1404
Hola Amigo

Soy Chileno, use tu codigo a la perfeccion, pero , aca no escribimos de la forma de ustedes los numeros, por ejemplo :

$ 1.590.-

En España son : un mil quinientas noventa

En chile son : un mil quinientos noventa

Te fijas que la terminacion de " quinientas " no es igual a la chilena , bueno en tu codigo es el problema que tengo, tendras el codigo que me sirve ? te lo agradeceria.

Correo : [email protected]
Mi nombre es Andres Salinas


pavonito 26/01/2006 09:56

CHIDO pa´los que hablan castellano
 
Hey, Es Muy Buen "truco", Lastima Que Las Cantidades Salen Castellanizadas... Por Ejemplo: 2536 Sale Como: Dos Mil Quinientas Treinta Y Seis. Pero Pa´ Los Que Hablan Español Latino Seria: Dos Mil Quinietos Treinta Y Seis. Pero Es Bueno Bye.

uzziber 27/01/2006 11:53

Bueno..., abre la macro y modifica el texto en las líneas que lo requieran, le cambias la "a" por la "o" y agregas la "n" faltante en "Quinietos"

Saludos...

Skualo 08/02/2006 12:28

Como le hago para modificar el macro, y agregar 00/100 M.N. que es la terminacion para expresar una cifra en letras en mi pais mexico, ejemplo:

$1526.15
"Un mil quinientos veintiseis pesos 15/100 M.N."

Gracias!!!

Agustin888 09/02/2006 19:23

Ya hice todo lo decia en los pasos pero cuando ejecuto la funcion me salta un aviso que dice #¡VALOR!.
QUe tengo que hacer para que Funcione??
Muchas Gracias
:-) :arriba:

crow78 10/02/2006 19:21

pensaba subir el archivo con un ejemplo pero como anexo el archivo
Aqui les dejo el archivo en excel con lo antes mencionado....
cien pesos 10/100 mn
espero les serva saludos...

arqraq 11/02/2006 06:57

Números con decimales
 
Cita:

Iniciado por Skualo
Como le hago para modificar el macro, y agregar 00/100 M.N. que es la terminacion para expresar una cifra en letras en mi pais mexico, ejemplo:

$1526.15
"Un mil quinientos veintiseis pesos 15/100 M.N."

Gracias!!!

Hola!. La configuración de casillas que te paso ahora es para que obtengas los nombres de una cifra con decimales traducida a pesos con centavos.
Por ejemplo: 154.22 te dirá: Son pesos: ciento cincuenta y cuatro con veintidós centavos.

1·En la casilla B3 escribí un número cualquiera. Configurala para que tenga solo dos decimales.
2·En la C3 poné "=ENTERO(B3)" sin las comillas por supuesto.
3·En la D3 poné "=(B3-C3)*100"
4·En la E3 poné "Son pesos:"
5· En la F3 poné "=letras(C3)"
6· En la G3 poné "con"
7· En la H3 poné "=letras(D3)"
8· En la I3 poné "centavos"
9· Ajustá los anchos de columnas, y ocultá las columnas C y D.
10· Listo. Espero que te funcione.

gvenegas 29/06/2006 11:33

Para el que no quiere instalar dll; delarara la funcion en un Módulo nuevo...
Herramientas > Macro> Editor de Visual Basic // Insertar Módulo
Cita:

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 & " con "
Letras = Letras & Format(Decimales * 100, "00") & "/100 centavos"
End If
num_letras = Letras
End Function

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"

carolina chapa 07/07/2006 12:21

Hola!
Porque sigo las instrucciones, y hago todo a la perfeccion y cuando le pongo =letra(B1) me pone:
#¿nombre?

Gracias!!

crow78 07/07/2006 15:43

Porque no tienes la funcion

CONFIG 08/07/2006 21:12

Cita:

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"

Estimados,
hay un problema para cuando escribo 2.500.000 y 2.000.500 el cual no coloca la palabra mil en el primer caso, me podrían ayudar ?
Muchas gracias
Ejemplo
2000500
Son pesos: dos millones quinientos

2500000
Son pesos: dos millones quinientos

carlosmys 19/07/2006 17:03

mejorado y corregido
 
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

Lophophora 20/07/2006 07:11

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)
.
.
.
End Function


Hola
Use tu codigo y si pongo 500000
Me pone QUINIENTOS PESOS 00/100 MN enves de QUINIENTOS MIL PESOS..

por otra parte como le puedo hacer para que se guarde el modulo y no lo tenga que insertar cada vez que abro exel.

Gracias

Saludos

crow78 20/07/2006 12:36

Hola visita la siguiente web en el encontraras un ejemplo....ya practico...
saludos...
www.myweb.k25.net

alejandromedina 27/07/2006 19:56

es facil fijate:
-en una celda le sacas el entero a tu cantidad y se la restas al mismo, cosa que te quedas con el decimal solamente.
-en otra celda hacer lo sgte a la celda del decimal :=CONCATENAR(" y 00/",TEXTO(E40,"00")) eto te dara " y 00/cantidad "
-en otra celda ya tienes logicamente la funcion =letras(numeros)
- bueno ya tienes todo.. en la celda final donde arrojaras las letras pondras lo sgte: =CONCATENAR(B40,F40," Nuevos Soles")
- En tu caso reemplazaras Nuevos Soles por tu moneda de tu pais..
- y para finalizar las celdas anteriores las formatearas en colo balnco el texto para que no se vean.

Es Todo.

Alejandro M.

checo38 25/08/2006 14:39

buen truco compa


slaudos

MONICA BV 06/09/2006 11:34

Numero A Texto
 
HOLA:

BAJE EL MACRO, LO INSTALE DE ACUERDO A LAS INSTRUCCIONES PERO NO FUNCIONA, YO TENGO EL 2000 EN INGLES, ALGUIEN PODRÍA INDICARME, CASI PASO POR PASO COMO INSTALARLO YA QUE ME MARCA UN ERROR Y ME DICE QUE TENGO QUE CAMBIAR LA SEGUIRDAD DEL MACRO Y ACEPTARLO, (COSA QUE YA HICE), SIN EMBARGO CUANDO PONGO LA FORMULA ME SALE #NAME? SI ALGUIEN FUERA TAN AMABLE DE AYUDARME, HE ESTADO INTENTANDO TODO LO QUE ME INDICA EL EXCEL Y NO LOGRO QUE EL NUMERO SE CONVIERTA EN TEXTO, MI CORREO ES [email protected]:si:

uzziber 07/09/2006 09:19

Asumo que la macro la has colocado en un módulo Visual Basic (en la hoja de Excel >Herramientas>Macro>Editor de VB).

1.- En la celda que deseas que aparezcan el texto, escribe "=num_letras(H2)" ; sin las comillas.

2.- En la celda H2, escribe el valor numérico que deseas convertir.

num_letras es el nombre de la función.
H2 es la celda de la que la función tomará el valor para convertirlo.

Saludos....

crow78 07/09/2006 14:27

ya subi nuevamente el ejemplo a mi web...
saludos...
http://www.myweb.esp.cc

pedreti 03/11/2006 10:35

duda para euros
 
tengo un problema y es q e modificado vuestro macro para euros pero lo centimos de euros me los sigue poniendo en numeros, me haria alguien el favor de decirme q falta para ponerlos en letras,es q me e kedao bloqeao

este es el macro:

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) = "DIECISEIS"
Numeros(17) = "DIECISIETE"
Numeros(18) = "DIECIOCHO"
Numeros(19) = "DIECINUEVE"
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 & " CON "
Letras = Letras & Format(Decimales * 100, "00") & " €"
End If
num_letras = Letras
End Function

apheto 02/02/2007 18:17

Gracias amigo
 
Cita:

Iniciado por gvenegas (Mensaje 1605383)
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"

Hey, mil gracias, la primera forma no me funcionaba, pero con este código salio perfecto, incluso elimina el problema del castellano.

Alberto

apheto 15/02/2007 17:38

Re: Pasar de números a letras en Excel
 
Revise el programa y si, como alguien habia puesto antes, cuanto se colocan centenas de millar, solo pone las centenas, por ejemplo:
500000: quinientos
Ya modifique el código para que no pase, ahora pueden utilizar el siguiente, solo que yo puse unidad de "kilogramos" por que es la utilice, si quieren cambiar, solo se van al final y cambiar el texto o lo eliminan:


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) = "un"
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) = "dieciseis"
Numeros(17) = "diecisiete"
Numeros(18) = "dieciocho"
Numeros(19) = "diecinueve"
Numeros(20) = "veinte"
Numeros(21) = "veintiun"
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

If (Int(Numero / 100000) = 1) And ((Numero - (Int(Numero / 100000) * 100000)) < 1000) Then
Letras = Letras & " "
Else
Select Case (Numero / 100000)
Case 2
Letras = Letras & " mil "
Case 3
Letras = Letras & " mil "
Case 4
Letras = Letras & " mil "
Case 5
Letras = Letras & " mil "
Case 6
Letras = Letras & " mil "
Case 7
Letras = Letras & " mil "
Case 8
Letras = Letras & " mil "
Case 9
Letras = Letras & " mil "
End Select
End If

If (Numero > 100000) And (Int(Numero / 1000) <> (Numero / 1000)) And ((Int((Int(Numero / 1000)) / 100)) = ((Int(Numero / 1000)) / 100)) Then
Letras = Letras & " mil "
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 < 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 & " kilogramos "
End If
num_letras = Letras
End Function

Jorge Luis Espinosa 08/03/2007 11:52

Re: Pasar de números a letras en Excel
 
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

KING24 09/07/2007 13:55

Re: Pasar de números a letras en Excel
 
buena tarde gracias por los tips de convertir numeros a letras en excel
ya logre bajar la macro para convertir numeros a letras pero en mi caso soy de guatemala pongo esta cantidad Q1500.20 en letras me pone mil quinientos pero omite los centavos...
gracias de antemano por su ayuda talvez alguien puede ayudarme
saludos

uzziber 10/07/2007 16:33

Re: Pasar de números a letras en Excel
 
Revive éste hilo...muy visto por cierto...
Normalmente los centavos no aparecen en texto, en México se usa que después del texto, los centavos aparecen como "20/100 M.N."; sí en Guatemala usan texto habrá que modificar la macro para los centavos aparezcan en texto.
Inténtalo; lo principal ya está mensajes arriba....

Saludos....


La zona horaria es GMT -6. Ahora son las 22:06.

Desarrollado por vBulletin® Versión 3.8.7
Derechos de Autor ©2000 - 2026, Jelsoft Enterprises Ltd.