Escolar Documentos
Profissional Documentos
Cultura Documentos
Una de las funciones de Microsoft Excel ms buscadas en la red y en los foros, es como convertir un nmero a texto o nmero a letras, esta funcin no viene integrada en las formulas propias de Microsoft Excel, esto lo podemos hacer insertando un cdigo llamado Macro, que no son mas que instrucciones que nos ayudan a automatizar tareas en Excel (tambin se usa en Word, Access etc.). En la red se puede encontrar muchos de estos cdigos, algunos permiten manejar varias monedas, dlares, Euros etc. Uno de los ms usados y ms que excelente es el de Mauricio Baeza, 100% hecho en Mxico!, seguramente ya lo haz usado, desde entonces han surgido muchas variantes y modificaciones; pero muy pocos sitios o casi ninguno muestran cmo usarlos. Desde que uso Microsoft Excel he probado varios de esos cdigos, he visto como mucha gente se atribuye la autora de dichos cdigos, que vergenza pero en fin. Dentro de las diferencias que he encontrado en la conversin a texto es algo as como esto: 23 = Veintitrs 23 = Veinte y tres Yo me inclinara ms por el primero, No es que la segunda conversin este mal, cualquiera de las dos formas son correctas, pongamos un ejemplo, cuando voy a la tienda de la esquina y pregunto Cundo cuesta este palitroche*? El anciano muy amablemente me dice son veintitrs pesos joven. Vamos a empezar, primero necesitamos el cdigo, vamos a usar este que al parecer el autor es Sal Lpez con una pequea modificacin de ByPaco para que aparezca Pesos y M.N., yo le hice una pequea modificacin al cdigo para que aparezca SON: como se usa aqu en Mxico. Function PesosMN(tyCantidad As Currency) As String Dim lyCantidad As Currency, lyCentavos As Currency, lnDigito As Byte, lnPrimerDigito As Byte, lnSegundoDigito As Byte, lnTercerDigito As Byte, lcBloque As String, lnNumeroBloques As Byte, lnBloqueCero Dim laUnidades As Variant, laDecenas As Variant, laCentenas As Variant, I As Variant 'Si esta como Option Explicit tyCantidad = Round(tyCantidad, 2) lyCantidad = Int(tyCantidad) lyCentavos = (tyCantidad - lyCantidad) * 100 laUnidades = Array("UN", "DOS", "TRES", "CUATRO", "CINCO", "SEIS", "SIETE", "OCHO", "NUEVE", "DIEZ", "ONCE", "DOCE", "TRECE", "CATORCE", "QUINCE", "DIECISEIS", "DIECISIETE", "DIECIOCHO", "DIECINUEVE", "VEINTE", "VEINTIUN", "VEINTIDOS", "VEINTITRES", "VEINTICUATRO", "VEINTICINCO", "VEINTISEIS", "VEINTISIETE", "VEINTIOCHO", "VEINTINUEVE") laDecenas = Array("DIEZ", "VEINTE", "TREINTA", "CUARENTA", "CINCUENTA", "SESENTA", "SETENTA", "OCHENTA", "NOVENTA") laCentenas = Array("CIENTO", "DOSCIENTOS", "TRESCIENTOS", "CUATROCIENTOS", "QUINIENTOS", "SEISCIENTOS", "SETECIENTOS", "OCHOCIENTOS", "NOVECIENTOS") lnNumeroBloques = 1 Do lnPrimerDigito = 0 lnSegundoDigito = 0 lnTercerDigito = 0 lcBloque = "" lnBloqueCero = 0 For I = 1 To 3 lnDigito = lyCantidad Mod 10
If lnDigito <> 0 Then Select Case I Case 1 lcBloque = " " & laUnidades(lnDigito - 1) lnPrimerDigito = lnDigito Case 2 If lnDigito <= 2 Then lcBloque = " " & laUnidades((lnDigito * 10) + lnPrimerDigito - 1) Else lcBloque = " " & laDecenas(lnDigito - 1) & IIf(lnPrimerDigito <> 0, " Y", Null) & lcBloque End If lnSegundoDigito = lnDigito Case 3 lcBloque = " " & IIf(lnDigito = 1 And lnPrimerDigito = 0 And lnSegundoDigito = 0, "CIEN", laCentenas(lnDigito - 1)) & lcBloque lnTercerDigito = lnDigito End Select Else lnBloqueCero = lnBloqueCero + 1 End If lyCantidad = Int(lyCantidad / 10) If lyCantidad = 0 Then Exit For End If Next I Select Case lnNumeroBloques Case 1 PesosMN = lcBloque Case 2 PesosMN = lcBloque & IIf(lnBloqueCero = 3, Null, " MIL") & PesosMN Case 3 PesosMN = lcBloque & IIf(lnPrimerDigito = 1 And lnSegundoDigito = 0 And lnTercerDigito = 0, " MILLON", " MILLONES") & PesosMN End Select lnNumeroBloques = lnNumeroBloques + 1 Loop Until lyCantidad = 0 PesosMN = "SON: (" & PesosMN & IIf(tyCantidad > 1, " PESOS ", " PESO ") & Format(Str(lyCentavos), "00") & "/100 M.N.)" End Function Bien, ahora que ya tenemos el cdigo vamos a insertarlo en nuestra hoja de trabajo de Microsoft Excel. Recomendable trabajar en un libro nuevo. Hacemos clic en Herramientas->Macros->Editor de Visual Basic, o simplemente presionando Alt+F11
Es importante que cierres todos los libros que tengas abierto y dejes abierto solo el libro en el que ests trabajando ya que podra dificultarte encontrar tu libro en el explorador de proyectos (lado izquierdo de tu pantalla, si no lo ves presiona Ctrl+R) Una vez abierto el editor de Visual Basic nos vamos a Insertar->Modulo
Listo, ya tenemos nuestro macro listo para trabajar, cerramos el editor de Visual Basic, lo puedes hacer con Alt+Q y regresamos a Microsoft Excel Vamos a probarlo, en la celda A1 ponemos un importe, yo pondr 1500.21, abajo, en la celda A2 ponemos =PesosMN(A1)
Bien, si pudiste hacer el ejercicio hasta aqu, ya puedes ponerlo en todos tus libros de trabajo, buena suerte.
Si por el contrario, necesito la descripcin de los centavos en letras ser suficiente con indicar el valor VERDADERO para el segundo argumento de la funcin: =CONVERTIRNUM(C8, VERDADERO) Observa cmo el texto del nmero ahora muestra los centavos tambin en letras:
Texto en maysculas
Si necesitas que el nmero en letras sea todo en maysculas, puedes utilizar la funcin de Excel MAYUSC para realizar la conversin.
Para el caso especfico de Mxico, podemos agregar la leyenda M.N al final del texto as como la palabra SON al principio, en caso de que acostumbres utilizarla.
Aunque estos caracteres y palabras adicionales para Mxico podran estar incluidos dentro de la funcin, decid removerlos para tener un cdigo que pueda ser reutilizable por otros pases donde no se acostumbra este tipo de nomenclatura.
Esto mostrar el cdigo de la funcin y debers poner especial atencin a una seccin que he marcado como Parmetros:
En esta seccin se deben realizar los cambios en los nombres de moneda. Por ejemplo, si deseo utilizar bolvares y cntimos (Venezuela) debo modificar el cdigo para que quede de la siguiente manera:
Al terminar solo debes asegurarte de guardar los cambios y finalmente cerrar el Editor de Visual Basic. Ahora la funcin ya est lista para convertir nmeros a letras considerando el nombre de moneda especificado.
Consideraciones adicionales
Es importante que consideres que esta funcin podr convertir nmeros a letras en Excel empezando desde el cero y hasta el nmero 1,999,999,999. Para cualquier nmero fuera de este rango la funcin devolver el mensaje ERROR: El nmero excede los lmites. Si deseas utilizar este cdigo en otros libros solamente debes copiar el cdigo del Mdulo1 a tu propio libro de Excel. O tambin puedes copiar el cdigo al Libro de macros personal de manera que puedas utilizar automticamente la funcin en todos los libros sin la necesidad de copiarlo a cada uno de ellos.
Cuando guardes el archivo Excel vers un mensaje preguntando si deseas guardar los cambios realizados al libro de macros personal, para lo cual debers pulsar el botn Guardar.
Por debajo del nombre VBAProject (PERSONAL.XLSB) encontrars la carpeta Mdulos y dentro de ella encontrars todas las macros que se hayan guardado en el libro de macros personal organizadas en mdulos. Si deseas eliminar algn mdulo solamente debers hacer clic derecho sobre l y seleccionar la opcin Quitar Mdulo.
NOTA: Puedes saltarte todos estos pasos e ir directo a descargar la hoja de Excelcon una macro para convertir los nmeros a letras, si lo deseas. Si quieres que esta funcin este siempre disponible en tu Excel, puedes descargar e instalar este complemento gratis Primero ingresa a VBA presionando las teclas Alt+F11, e inserta un Modulo (Si ya tienes un modulo no necesitas insertar uno nuevo)
Y en la ventana derecha ingresa este texto: 1 2 3 'Funcion para pasar numeros a letras Function NumLetras(Valor As Currency, Optional MonedaSingular As String = " ",Optional MonedaPlural As String = "") As String Dim lyCantidad As Currency, lyCentavos As Currency, lnDigito As Byte, lnPrimerDigito As Byte, lnSegundoDigito As Byte, lnTercerDigito As Byte, lcBloque As String,
lnNumeroBloques As Byte, lnBloqueCero Dim laUnidades As Variant, laDecenas As Variant, 4 laCentenas As Variant, I AsVariant 'Si esta como Option Explicit Dim ValorEntero As Long Valor = Round(Valor, 2) lyCantidad = Int(Valor) ValorEntero = lyCantidad lyCentavos = (Valor - lyCantidad) * 100
5 6 7 8 9
laUnidades = Array("UN", "DOS", "TRES", "CUATRO", "CINCO", "SEIS", "SIETE","OCHO", "NU 1EVE", "DIEZ", "ONCE", "DOCE", "TRECE", "CATORCE", "QUINCE","DIECISEIS", " 0DIECISIETE", "DIECIOCHO", "DIECINUEVE", "VEINTE", "VEINTIUN","VEINTIDOS", "VEINTITRES", "VEINTICUATRO", "VEINTICINCO", "VEINTISEIS","VEINTISIETE", "VEINTIOCHO", "VEINTINUEVE") 11 laDecenas = Array("DIEZ", "VEINTE", "TREINTA", "CUARENTA", "CINCU ENTA","SESENTA", "SETENTA", "OCHENTA", "NOVENTA")
laCentenas = 1 Array("CIENTO", "DOSCIENTOS", "TRESCIENTOS", "CUATROCIENTOS","QUINIENTOS 2 ", "SEISCIENTOS", "SETECIENTOS", "OCHOCIENTOS", "NOVECIENTOS") 13 14 15 16 17 18 19 20 21 22 23 Do lnPrimerDigito = 0 lnSegundoDigito = 0 lnTercerDigito = 0 lcBloque = "" lnBloqueCero = 0 For I = 1 To 3 lnDigito = lyCantidad Mod 10 If lnDigito <> 0 Then lnNumeroBloques = 1
24
Select Case I
25 Case 1 26 lcBloque = " " & laUnidades(lnDigito - 1) 27 lnPrimerDigito = lnDigito 28 Case 2 29 If lnDigito <= 2 Then 30 lcBloque = " " & laUnidades((lnDigito * 10) + lnPrimerDigito - 1) 31 Else 32 lcBloque = " " & laDecenas(lnDigito - 1) & IIf(lnPrimerDigito <> 0, " Y", Null) & lcBloque
33 End If 34 lnSegundoDigito = lnDigito 35 Case 3 36 lcBloque = " " & IIf(lnDigito = 1 And lnPrimerDigito = 0 And lnSegundoDigito = 0, "CIEN", laCentenas(lnDigito - 1)) & lcBloque
37 lnTercerDigito = lnDigito 38 End Select 39 Else 40 lnBloqueCero = lnBloqueCero + 1 41 End If 42 lyCantidad = Int(lyCantidad / 10) 43 If lyCantidad = 0 Then 44 Exit For 45 46 End If Next I
49 NumLetras = lcBloque 50 Case 2 51 NumLetras = lcBloque & IIf(lnBloqueCero = 3, Null, " MIL") & NumLetras 52 Case 3 53 NumLetras = lcBloque & IIf(lnPrimerDigito = 1 And lnSegundoDigito = 0 AndlnTercerDigito = 0, " MILLON", " MILLONES") & NumLetras
54 End Select 55 lnNumeroBloques = lnNumeroBloques + 1 56 Loop Until lyCantidad = 0 57 NumLetras = NumLetras & " " & Format(Str(lyCentavos), "00") & "/100 " & IIf(ValorEntero = 1, MonedaSingular, MonedaPlural)
58 End Function Y guarda los cambios presionando Ctrl+S o con el boton de Guardar en la barra de herramientas. Nota: Si tienes algn problema hasta ahora puedes consultar este articulo, que explica con mayor detalle como crear una funcin propia.
Si tuviste algn problema o quieres ver una demostracin puedes bajar esta Hoja de calculo con la funcin ya creada. Si lo que deseas es que esta funcion este siempre disponible pudes descargar e instalar estecomplemento de excel. Si tienes problemas para instalarlo consulta el articulo para instalar complementos en Excel 2007 o 2010 32 Responses to NumLetras: Funcin para pasar (convertir) nmeros a letras
1.
Paulina enero 7, 2013 Pero si pongo un numero mayor no funciona. ejemplo 230.000 pesos Responder
2.
HBanchieri febrero 21, 2013 Te felicito, muy bueno el cdigo. Se podra acrecentar la funcin NOMPROPIO ()? Esto para que el texto salga con el siguiente formato: Cuatro Mil Quinientos Cuarenta Y Cinco 98/100 Dolares y no como sale: CUATRO MIL QUINIENTOS CUARENTA Y CINCO 98/100 Dolares Claro que se podra anidar a la formula, pero pienso que seria mas practico si ya estuviera unida a la macro. Saludos Responder
lcruz febrero 22, 2013 Gracias por tu comentario, vamos a tomarlo en cuenta y lo agregaremos para que las dems personas los descarguen con tu sugerencia. Responder
3.
Nicolas marzo 14, 2013 hola. agradesco el aporte, en realidad a mi me sirve mucho, como es que no lo encontr antes?????????? gracias!!!!!!!!!!!! Responder
lcruz marzo 15, 2013 Me alegra que te haya sido til. Responder
4.
JOrge abril 18, 2013 hola como les va buen pos queria preguntarle como hacer que diga CUATRO MIL QUINIENTOS CUARENTA Y CINCO con 15 centimos por ejemplo y no CUATRO MIL QUINIENTOS CUARENTA Y CINCO 98/100 Dolares osea que no salga 98/100
Responder
lcruz abril 19, 2013 Hola Jorge, puedes descargar el archivo, presionar ctrl+F11 para entrar en el editor y cambiar la linea del programa: NumLetras = NumLetras & & Format(Str(lyCentavos), 00) & /100 & IIf(ValorEntero = 1, MonedaSingular, MonedaPlural) Por esta otra: NumLetras = NumLetras & con & Format(Str(lyCentavos), 0) & Cntimos Responder
5.
Jorge abril 26, 2013 Muy bueno, como puedo cargarlo como funcin de mi Excel. Responder
lcruz abril 26, 2013 Hola Jorge, he actualizado el articulo al final hay un enlace para descargar este ejemplo como un complemento de Excel. Los complementos estan siempre disponibles en cualquier hoja de calculo que tengas. Responder
6.
Vernica Garca abril 26, 2013 EXCELENTE!! desde hace mucho quera esto!! Voy a interntar hacer un cambio (no se programar) y si no puedo te pregunto Mil Gracias!! Responder
lcruz abril 26, 2013 Me alegra que te haya sido util, y felicidades el primer paso es intentar. Responder
Si funciono!!!! solo puse el orden como se usa en Mxico pero si pude!!! Gracias Responder
lcruz abril 26, 2013 Felicidades, tengo por curiosidad, como se usa en Mxico? Responder
Yo lo cambie y la lnea terminara de esta forma: NumLetras = NumLetras & & IIf(ValorEntero = 1, MonedaSingular, MonedaPlural) & & Format(Str(lyCentavos), 00) & /100 & M. N. Gracias Jorge Enersto. lcruz abril 29, 2013
7.
agustin abril 30, 2013 exelente aporte! tengo una duda. una vez que lo habilito para usar, guardo y salgo del libro, cuando vuelvo a entrar no esta disponible la funcion. que podra ser? Responder
lcruz abril 30, 2013 Gracias. Para que este siempre disponible debes instalar el complemento, cuando lo instales debes copiarlo en un lugar y no moverlo, cambiar de nombre o eliminar el archivo del complemento (extension .xla) Responder
Responder
lcruz mayo 2, 2013 Hola, Si pero solo si usas la carpeta Dropbox que se crea en tu computadora. Responder
nat mayo 30, 2013 Disculpame, la formula es genial. AHORA NO TENGO QUE ESCRIBIR TODO GRACIAS pero desconozco del tema, y no tengo idea que complemento debo instalar para tener la funcion en excel y no solo en el libro. Si me podrias ayudar con eso, seria genial . Responder
lcruz mayo 30, 2013 Hola, el complemento lo podes descargar desde aquihttp://facilparami.com/ejemplos/numletras.xla Para instrucciones de como instalarlo: En Excel 2010: http://excel.facilparami.com/2012/07/agregar-complementos-excel2010/ En Excel 2007: http://excel.facilparami.com/2012/09/agregar-complementos-excel2007/ Responder
8.
Alvaro mayo 23, 2013 Muy bueno amigos, alguien me puede orientar para trasnformar lo siguiente: 205-8 a letras de la siguiente forma; dos cero ocho guion ocho. desde ya muchas gracias Responder
9.
Argelio Victoria mayo 23, 2013 pero la funcin esta excelente gracias Responder
10.
11.
Excelente Saludos
Mario Navarro mayo 28, 2013 Funcin, espero ver ms cosas tiles.
Responder
lcruz mayo 29, 2013 Gracias, har todo lo posible por seguir escribiendo artculos tiles para todos. Responder
12.
javier junio 1, 2013 hola, gracias por tu aporte, me podrias ayudar para pasar los datos numericos de los promedios de calificaciones, as: 8,90 = ocho con noventa decimas, 8,00 = ocho; 8.09=ocho con nueve decimas, telo agradezco. Responder
13.
14.
Rodrigo junio 12, 2013 Mil gracias por compartir esta info, quisiera saber si es posible ampliar la macro de manera tal que se pueda trabajar con millardos, es decir cifras de 12 dgitos. Mil gracias! Responder
Hola Rodrigo, lastimosamente la macro fue diseada para numeros de hasta 999,999,999.99 que ya es un numero bastante alto. Puede ser ampliada pero requiere de cambios mayores. Responder
15.
Rodrigo junio 12, 2013 Que lstima, mil gracias de todos modos.
En las opciones, selecciona Complementos, en la parte izquierda, y haz clic sobre el botn Ir que se muestra en la parte derecha.
Ahora veras la pantalla de complementos, para agregar uno haz clic sobre el boton Examinar, y selecciona el archivo xla o xlam que guardaste previamente, luego el nuevo complemento se mostrar en la parte izquierda. Ahora para activar o desactivar un complemento solo debes marcar/desmarcar el cheque que aparece con el nombre.
Obtenlo Gratis!
Como lo mencione antes este complemento es gratis y puedes descargarlo con este enlace, y opcionalmente puedes mostrar tu agradecimiento de estas formas: Siguindome en Twitter Darme un like en Facebook Compartiendo este articulo con tus amigos en tus redes sociales.