miércoles, 9 de noviembre de 2011

UDF para convertir números en letras.

En varias ocasiones me han preguntado si existe alguna forma de convertir en texto nuestro números, y aunque es un tema muy recurrido por todo internet, creo oportuno incluir aquí una de las funciones que más me han gustado entre las que he encontrado en el tiempo. Por supuesto existen muchas más versiones, unas más perfectas que otras...
En concreto, para resolver la duda de uno de los lectores, será suficiente con el código VBA de este post. Ojo, ya que la función sólo es válida para valores entre 0 y 999.999:

Hola quiero saber si hay alguna formula que convierta los números en letras Ejemp.tengo un cuadro de notas y necesito que al colocar las Notas en una columna en número estas me las coloque en otro columna en letras. Ejemplo.
Notas en letra
15 Quince
10 Diez
12 Doce
05 Cinco
09 Nueve


Incluiremos los siguientes procedimientos Function en uno de los módulos del Editor de VBA:

Function num2let(importe)
If Int(importe) = 1 Then final = " euro" Else final = " euros"
If importe > 999 Then num2let = num2letras(Int(importe / 1000)) + " mil "

num2let = num2let + num2letras(importe - Int(importe / 1000) * 1000) + final

If Int(importe) = 0 Then num2let = "cero euros"

If importe <> Int(importe) Then
If (100 * (importe - Int(importe))) = 1 Then centfin = " céntimo." Else centfin = " céntimos."
num2let = num2let + " con " + num2letras((importe - Int(importe)) * 100) + centfin
End If
End Function
Function num2letras(importe)
'Pasa de numero a letras, importes entre 0 y 999
'Centena ----------------------------------------
centena2 = Int(importe / 100)
Select Case centena2
Case 0: num2letras = ""
Case 1: num2letras = "cien"
Case 2: num2letras = "doscientos"
Case 3: num2letras = "trescientos"
Case 4: num2letras = "cuatrocientos"
Case 5: num2letras = "quinientos"
Case 6: num2letras = "seiscientos"
Case 7: num2letras = "setecientos"
Case 8: num2letras = "ochocientos"
Case 9: num2letras = "novecientos"
End Select
'Decena ----------------------------------------------
decena2 = Int((importe - centena2 * 100) / 10)
If centena2 = 1 Then num2letras = num2letras + "to"
Select Case decena2
Case 1: num2letras = num2letras + " diez"
Case 2: num2letras = num2letras + " veinte"
Case 3: num2letras = num2letras + " treinta"
Case 4: num2letras = num2letras + " cuarenta"
Case 5: num2letras = num2letras + " cincuenta"
Case 6: num2letras = num2letras + " sesenta"
Case 7: num2letras = num2letras + " setenta"
Case 8: num2letras = num2letras + " ochenta"
Case 9: num2letras = num2letras + " noventa"
End Select
'Unidad ----------------------------------------------
unidad2 = Int((importe - centena2 * 100 - decena2 * 10))
If decena2 = 0 Then
Select Case unidad2
Case 1: num2letras = num2letras + " un"
Case 2: num2letras = num2letras + " dos"
Case 3: num2letras = num2letras + " tres"
Case 4: num2letras = num2letras + " cuatro"
Case 5: num2letras = num2letras + " cinco"
Case 6: num2letras = num2letras + " seis"
Case 7: num2letras = num2letras + " siete"
Case 8: num2letras = num2letras + " ocho"
Case 9: num2letras = num2letras + " nueve"
End Select
End If

If decena2 = 1 Then
num2letras = Mid(num2letras, 1, Len(num2letras) - 4)
Select Case unidad2
Case 0: num2letras = num2letras + " diez"
Case 1: num2letras = num2letras + " once"
Case 2: num2letras = num2letras + " doce"
Case 3: num2letras = num2letras + " trece"
Case 4: num2letras = num2letras + " catorce"
Case 5: num2letras = num2letras + " quince"
Case 6: num2letras = num2letras + " diceciseis"
Case 7: num2letras = num2letras + " diecisiete"
Case 8: num2letras = num2letras + " dieciocho"
Case 9: num2letras = num2letras + " diecinueve"
End Select
End If

If decena2 = 2 Then
If unidad2 <> 0 Then num2letras = Mid(num2letras, 1, Len(num2letras) - 6)
Select Case unidad2
Case 1: num2letras = num2letras + " veintiun"
Case 2: num2letras = num2letras + " veintidos"
Case 3: num2letras = num2letras + " veintitres"
Case 4: num2letras = num2letras + " veinticuatro"
Case 5: num2letras = num2letras + " veinticinco"
Case 6: num2letras = num2letras + " veintiseis"
Case 7: num2letras = num2letras + " veintisiete"
Case 8: num2letras = num2letras + " veintiocho"
Case 9: num2letras = num2letras + " veintinueve"
End Select
End If

If decena2 > 2 Then
Select Case unidad2
Case 1: num2letras = num2letras + " y un"
Case 2: num2letras = num2letras + " y dos"
Case 3: num2letras = num2letras + " y tres"
Case 4: num2letras = num2letras + " y cuatro"
Case 5: num2letras = num2letras + " y cinco"
Case 6: num2letras = num2letras + " y seis"
Case 7: num2letras = num2letras + " y siete"
Case 8: num2letras = num2letras + " y ocho"
Case 9: num2letras = num2letras + " y nueve"
End Select
End If

If importe = 100 Then num2letras = "cien"
End Function


Aunque existen realmente dos funciones en este procedimiento, la función a aplicar será
=num2let(valor)
es ésta la que convierte a texto cualquier valor entre 0 y 999.9999.


Este código lo conseguí navegando hace algún tiempo, y encontré en algún foro de Excel, donde alguien (no puedo recordar quién, y lo siento de veras...) lo subió y compartió con todos... Gracias a esta persona!!

5 comentarios:

  1. Apreciable amigo Ismael y demás amigos del foro: al momento, yo aplico un codigo VB que encontré por la red y que también me reenvío algun amigo del ciberespacio, esta función convierte hasta cifras de nueve cifras y con decimales, solo que la función esta hecha para PESOS, si les sirve podría enviarsela solo habría que convertir los centavos a centimos y los pesos a EUROS o la moneda de uso en su país.: ejemplo:
    999,999,888.25 devuelve el valor:
    SON: ( NOVECIENTOS NOVENTA Y NUEVE MILLONES NOVECIENTOS NOVENTA Y NUEVE MIL OCHOCIENTOS OCHENTA Y OCHO PESOS 25/100 M.N.)
    Y como ha sido de utilidad la función, GRACIAS a quien la creó y la COMPARTIO
    Gracias
    Saludos
    Alexx
    Los Mochis, Sinaloa, México.

    ResponderEliminar
  2. Hola Alexx,
    claro, por favor, mándamela y la reviso.
    Un cordial saludo

    ResponderEliminar
  3. Muy buenas a todos
    Al igual que la persona anterior, yo uso un código que encontré navegando por la red hace algunos años también. Está hecho para Euros, pesos, dólres y bolívares.
    Si me das el correo te lo mando.
    Un saludo

    ResponderEliminar
  4. Si claro...
    cualquier conocimiento nuevo es bienvenido!!
    Mi correo es
    excelforo@gmail.com

    Un saludo y gracias

    ResponderEliminar
  5. Hola, amigos, realmente necesito la fórmula para cantidades superiores al millón agradecería a quien me pueda enviar la fórmula adecuada

    kritiko69@gmail.com

    GRACIAS

    ResponderEliminar