Hoy te proponemos escribir una “macro” para Microsoft Excel que te permitirá expresar números como su equivalente en letras. Se trata de una función muy buscada y que no viene “de serie” en la planilla de cálculo. En NeoTeo te mostraremos, paso a paso, como puedes escribirla tu mismo.
Todos los que utilizamos la planilla de cálculo de Microsoft en algún momento nos hemos topado con la necesidad de convertir importes expresados como números (“138.55 €”) a su equivalente en letras (“ciento treinta y ocho euros con cincuenta y cinco centavos.”).
Este tipo de conversión es casi indispensable cuando utilizamos Excel en labores relacionadas con la confección de facturas, presupuestos, liquidación de recibos de haberes, trabajos contables, emisión de comprobantes con importes o cualquier otra ligada al manejo de importes. Aunque no siempre sea obligatorio declarar los importes con ese formato, el hacerlo le da más “seriedad” a nuestros informes.
Excel, al igual que los demás integrantes de la suite Microsoft Office, permite la construcción de macroinstrucciones sumamente complejas, utilizando un lenguaje llamado Visual Basic para Aplicaciones (o VBA), que, como su nombre lo indica, es muy similar al Visual Basic.
Aprovechando lo que hemos aprendido en nuestro tutorial sobre Visual BASIC 2005, en especial lo que se refiere a las instrucciones de control de flujo del programa, podemos escribir una macro que realice la conversión mencionada en Excel.
Escribiendo la macro
Para escribir una macro, necesitamos en primer lugar abrir el editor de VBA que tiene incluido Excel. Para ello, como puede verse en la figura siguiente, vamos al menú principal de la aplicación y desde allí seleccionamos la opción “Herramientas”, luego “Macro” y del submenú que se abre hacemos clic en “Editor de Visual Basic”. (ALT-F11 realiza la misma acción).
Como puede verse en la imagen de la derecha, el editor de VBA, que se parece mucho a lo visto en nuestro tutorial de VB, propone cuatro ubicaciones para (“Hoja1”, “Hoja2”, “Hoja3” y “ThisWorkbook”) el código que vamos a escribir.
Le damos doble clic a la opción “ThisWorkbook”, y el editor tomará este aspecto:
En la sección en blanco que aparece deberemos pegar el código que te mostramos al final de este artículo, o descargar esta planilla de ejemplo.
No vamos a explicar aquí el funcionamiento detallado de la macro, por que lo abordaremos en el tutorial de VB. Basta con saber que se divide en dos funciones. Una de ellas (“num2letras”) convierte un número comprendido entre 0 y 999 en su equivalente en letras (“cero” a “novecientos noventa y nueve”). La otra, a la que hemos llamado “num2let” se encarga de llamar las veces que sea necesaria a la primera de ellas para “armar” el texto correspondiente al importe.
Para utilizarla, basta con escribir en una celda cualquiera de nuestra hoja de cálculo (aquella en que queremos aparezca el importe en letras) algo parecido a lo siguiente:
Al hacerlo, en el lugar que hemos escrito la fórmula aparecerá el importe tal como puede verse en rojo.
Por supuesto, es mucho más interesante hacer algo como lo que se ve en esta captura de pantalla:
Ya que de esa manera podemos convertir a letras el valor de otra celda, que puede ser el resultado de algún cálculo más o menos complejo. La función “Concatenar” simplemente le agrega el texto “Son” al principio de la cadena.
Código de la macro
Este es el código de la macro en cuestión. Simplemente, debemos seleccionarlo con el ratón, copiarlo al portapapeles (con CTRL-C) y luego pegarlo en el editor de VBA (con CTRL-V):
‘————————————-
Public i
Function num2let(importe) If importe = 1 Then final = " peso" 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 num2let = num2let + " con " + num2letras((importe – Int(importe)) * 100) + " centavos." 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 ‘num2letras = Mid(num2letras, 1, Len(num2letras) – 6) Select Case unidad2 ‘Case 0: num2letras = num2letras + " cero" 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