Como crear tus propias funciones para Calc usando macros

Crear tus propias funciones para Calc usando macros es realmente sencillo.

 

Veamos un sencillo ejemplo como muestra: necesitamos una función que calcule la raiz (cuadrada, triple, cuarta...) de un valor. Por supuesto que se puede realizar con una sencilla fórmula (por ejemplo, calcular en la celda B3 la raiz cuarta del valor contenido en la celda A3 es tan sencillo como escribir en B3 la fórmula =A3^(1/4)), pero en este post sólo pretendemos ilustrar cómo crear una función; la complejidad de ésta depende de las necesidades del usuario.

Crear la función

Paso 1: Activar el editor de macros

Abre un nuevo documento Calc, y guárdalo con un nombre, por ejemplo Mi_Función.ods. Activar el editor de macros desde el menú Herramientas > Macros > Organizar macros > OpenOffice.org Basic....

OOo mostrará el diálogo Macros básicas de OpenOffice.org; haz clic sobre el signo + que se muestra delante del nombre de tu archivo (en nuestro ejemplo, Mi_Funicón.ods), y selecciona la carpeta Standard; a continuación, haz clic sobre el botón Nuevo. OOo creará un nuevo módulo dentro de tu documento, y solicitará la confirmación del nombre de éste; dado que para nosotros es intrascendente, aceptaremos sin más.

 

 

 

 

Paso 2: Escribir la función en el editor de macros

La función que vamos a crear es sencilla; la llamaremos RaizX (sin acento), y precisará que le indiquemos el número y qué raiz deseamos que calcule; al primer valor lo llamaremos Numero, sin acento, y al segundo, Raiz, tambien sin acento.

En el editor Basic teclearemos el siguiente código justo debajo de la instrucción Sub Main / End Sub:

Function RaizX( Numero, Raiz )

Ten en cuenta que escribimos sin utilizar acentos, y que ponemos Function, en inglés, no Funcion, en castellano. Además, a diferencia de las funciones que utiliza Calc en la que los argumentos se separan por puntos y coma (;) en Basic los argumentos de la función se separan por comas (,).

Con esta instrucción declaramos la función RaizX, que necesitará dos parámetros (argumentos), a los que llamaremos Numero y Raiz.

A diferencia de las subrutinas, identificadas como Sub en Basic, las funciones devuelven un valor, por lo que serán perfectas para utilizarlas en Calc.

A continuación, escribiremos una nota aclaratoria, para que cualquier usuario que lo precise, o nosotros mismos, dentro de varios meses, nos describa qué hace esta función. La nota aclaratoria es una línea que empieza por una comilla sencilla (').

' Devuelve la raíz X de un número; por ejemplo, RaizX( 125, 3) devuelve la raiz cúbica de 125

Tecleamos una tercera línea, que realmente es el corazón de esta sencilla función. Para calcular la raiz X de un número, debemos elevar este número a 1/X. Matemáticamente es sencillo.

Para que la función devuelva el valor calculado, debemos asignarlo al nombre de la función; es tan sencillo como escribir el nombre de la función, un signo igual, y la operación matemática. Teclea la tercera línea.

RaizX = Numero^(1/Raiz)

Recuerda que no estamos utilizando acentos. Y observa que utilizamos las mismas combinaciones de letras mayúsculas y minúsculas en todo momento. Quizás prefieras escribir todo en minúsculas, o todo en mayúsculas. Eso, a tu gusto.

Para finalizar, le indicaremos a Basic que hemos terminado con nuestra función. Tan sólo necesitamos una línea más:

End Function

El código debe de quedar tal como muestra la imagen; las líneas adicionales son para mejorar la lectura del código.

Guardamos el código ( desde el editor Basic, selecciona desde el menú Archivo > Guardar, o haz clic sobre el botón con forma de disquete, o pulsa Ctrl + G) y cierra el editor Basic.

Paso 3: Probar el funcionamiento

En nuestra hoja de cálculo vamos a teclear unos datos (imagen a la izquierda): En la celda B2 tecleamos el número 125; en las celdas C2 a C5 tecleamos 2,3,4 y 5; en la celda D2 escribimos la siguiente fórmula: =RaizX(B2;C2) y pulsamos Intro. Debe de mostrar como resultado 11,18.

Observa que desde Calc SI que utilizamos ; en lugar de comas para separar los argumentos.

Corregimos la fórmula para convertir la celda B2 en referencia absoluta (imagen a la derecha), por lo que en la celda D2 tendremos la siguiente fórmula: =RaizX( $B$2;C2) y pulsamos Intro. Ahora extendemos la fórmula al rango  D3:D5 y comprobamos que todo ha ido perfectamente.

 

 

Dónde almacenar la función creada

A la hora de escribir una macro podemos almacenarla en una de estas dos áreas: Mis Macros o en el documento actual.

Almacenarla en Mis Macros supone que estará disponible para todas las aplicaciones de OOo, y por lo tanto, para todos los documentos Calc que utilicemos. Pero tiene un inconveniente: esta área tan sólo está disponible en nuestro equipo; si enviamos por correo un documento utilizando la función, el receptor del documento no tendrá acceso ésta, y por lo tanto, no la podrá utilizar.

Al mismo tiempo, si almacenamos la macro en el documento actual no será accesible para el resto de aplicaciones OOo, ni siquiera para otros documentos creados con Calc. En esta caso, en cambio, al mandar el documento por correo, dado que incorpora la función creada, sí que podrá ser ejecutada por el receptor del documento.

Podemos almacenar la macro creada en un documento, y guardar éste como plantilla. Cualquier documento creado a partir de ésta tendrá acceso a la macro, pero seguirá siendo invisible para otros documentos.

Lo ideal, por tanto, será generar la macro en el documento, y si deseamos utilizarla en otros documentos dentro de nuestro equipo, copiarla al área Mis Macros. Para el caso que deseamos utilizar la macro en otro documento, y enviarlo por correo a un tercero, deberemos almacenar una copia del código macro en el documento.

 

Copiar la macro desde el documento a Mis Macros, y viceversa

Realmente es sencillo; sigue estos sencillos pasos:

Paso 1: Copiar la macro del documento al portapapeles

Abrimos de nuevo el editor de macros: desde el menú Herramientas > Macros > Organizar macros > OpenOffice.org Basic... accedemos a la macro creada en el documento desde Mi_Función.ods > Standard > Module1 seleccionamos RaizX y pulsamos el botón Editar.

Ya en el editor Basic, seleccionamos todo el código de la función, lo copiamos al portapapeles (desde el menú Editar > Copiar o pulsando la combinación de teclas Ctrl + C).

 

Paso 2: Pegar la macro del portapapeles al área Mis Macros

Desde el editor de Basic, hacemos clic sobre el botón Seleccionar Módulo. Seleccionamos el módulo Mis Macros > Standard > Module1, y hacemos clic sobre el botón Editar.

Justo debajo de la sentencia Sub Main / End Sub hacemos clic, y pegamos (desde el menú Editar > Pegar o pulsando la combinación de teclas Ctrl + V).

Guardamos los cambios en el editor y cerramos éste.

 

 

Resumiendo...

Crear nuestras propias funciones para utilizarlas en Calc es sencillo; en la mayoría de las veces tan solo necesitamos unos básicos conocimientos de programación en Basic; lo más complicado es decidir donde almacenar la macro que contiene la función, y la respuesta es sencilla: la almacenaremos en Mis Macros y en el documento, para que en el caso de enviarlo a un tercero, tenga acceso a toda la funcionalidad de nuestra hoja.

16 comentarios

Comentario De: Miguel Ortiz [Visitante]

Necesito crear un boton de macros. pero no se como programarlo con la formula

ejemplo en el casilla b2 tengo el valor 10 que es un numero decimal pero en la casilla f2 quiero que me muestre el numero binario de esa cantidad pero no se como programarlo gracias

27.03.14 @ 19:50 Reply to this comment
Comentario De: [Miembro]

Para Miguel Ortiz:

Hola, no necesitas crear una macro.

Tan sólo tienes que poner en la casilla F2 esto: =DEC.A.BIN(B2;8)

Esto muestra en F2 el número binario, con 8 cifras, del número decimal que contiene B2.

Gracias por tu consulta, si bien en adelante es preferible que te dirijas al Foro Oficial (en la columna de la izquierda verás el enlace) desde donde un numeroso grupo de voluntarios podrán ayudarte.

27.03.14 @ 20:17 Reply to this comment
Comentario De: Natalia [Visitante]  

Hola, necesito crear un macro. La situación es tengo en una hoja una columna que entre otras variables tiene la variable edad. Necesito una función que me permita crear una nueva hoja con un cuadro con los diferentes rangos de edades a modo de ejemplo, una columna menor a un año, otra entre 1 y 4 años, 5 y 14 etcera. para poder saber cuantos tengo en esas edades. Estuve viendo la función contar.si y no logro usar, no sé si necesito un macro o esa función.
Gracias!!!!

29.04.14 @ 23:25 Reply to this comment
Comentario De: [Miembro]

Eso lo resolverás de forma muy elegante y fácil con una tabla dinámica.

Mira el ejemplo del apartado Agrupar campos de tipo Numérico

30.04.14 @ 17:40 Reply to this comment
Comentario De: Dante [Visitante]

He creado una función siguiendo el procedimiento aqui descripto, pero no logro que el nombre de la función aparezca en el listado de funciones cuando se hace click en el botón fx de la barra de fórmulas

11.08.14 @ 21:30 Reply to this comment
Comentario De: [Miembro]

Hola Dante
Las funciones creadas por los usuarios no se muestran en el botón Fx. Se deben escribir de forma manual en la barra de fórmulas.

12.08.14 @ 23:31 Reply to this comment
Comentario De: Pedro Rodriguez [Visitante]

Hola. Quizas la petición sea un poco extraña. Tengo un programa en python que desearia incorporar como macro en Calc. ¿ hay alguna forma de hacerlo directamente o tendría que recodificarlo en Basic?.
Muchas gracias. Saludos.

25.09.14 @ 15:08 Reply to this comment
Comentario De: [Miembro]

@Pedro: AOO admite tanto OOBasic como Python.
Te recomiendo que le eches un vistazo a la wiki oficial; se está desarrollando un apartado específico de Python en https://wiki.openoffice.org/wiki/ES/Manuales/GuiaAOO/TemasAvanzados/Macros/Python
De momento, nosotros no podemos ayudarte en este lenguaje, pero en el Foro Oficial encontrarás ayuda
Saludos

25.09.14 @ 17:02 Reply to this comment
Comentario De: luis [Visitante]

Tengo una tabla con 3 columnas de numeros (los saco de otra tabla), con los que hago un grafico. Necesito que al pulsar un boton(mi idea es asociarlo a un evento para que al actualizar la primera tabla, actualice el grafico, de momento el boton me vale), me ordene de mayor a menor la colunma 2, selección extendida, para que actualice el grafico. Gracias

13.10.14 @ 09:17 Reply to this comment
Comentario De: [Miembro]

@Luis: Gracias por tu consulta, si bien es preferible que te dirijas al Foro Oficial (en la columna de la izquierda verás el enlace) desde donde un numeroso grupo de voluntarios podrán ayudarte.

Comentario De: Claudio [Visitante]

Estimado, necesito crear una función que me devuelva el valor de una celda que contiene formulas.
Aquí hay una macro que lo que hace es devolver el valor sobre la misma celda que contiene la formula y se basa sobre el copiado y pegado especial:

Sub ConvertirFormulas()

'Copiar la selección de celdas
Selection.Copy

'Pegado Especial utlizando xlPasteValues
Selection.PasteSpecial Paste:=xlPasteValues

'Salir del modo de copiado
Application.CutCopyMode = False

End Sub

El problema es que yo necesito una función que obtenga los valores sin borrar la celda original que contiene la formula.

Le agradezco su ayuda

Claudio T

24.11.14 @ 20:46 Reply to this comment
Comentario De: Jos3fs [Visitante]  

Buenas tardes. Necesito un peque ayuda.
1. Necesito una hoja de calculo con varios usuarios y que cada usuario entre a una columna o fila determinada.
2. Necesito crear un macro, que dependiendo del mes, el usuario al entrar se coloque en la casilla correcta. Es decir, el usuario entra el 6 de enero, debería estar parado en la casilla Enero, las demás están bloqueadas. Si pueden guiarme en esto, se los agradeceria mucho.

01.05.16 @ 00:15 Reply to this comment
Comentario De: JENNIER HUMBERTO JIMENEZ H [Visitante]

Buenas noches necesito crear una macro que al ingresar información en una misma línea en varias celdas ej: Expediente, fecha, nombre, oficina, et... al tener todos los campos llenos oprima un botón y me lo registre en otra hoja o en la misma pero ubicándose al final del ultimo registro, que me limpie esos campos para ingresar nuevos datos y haga lo mismo me registre. Me urge trabajo en una empresa ingresando demasiada información.

Agradezco su pronta ayuda, gracias

Saludos desde Costa Rica

07.07.17 @ 06:07 Reply to this comment
Comentario De: [Miembro]

Consideramos que quizás un formulario del usuario te permita realizar lo que deseas más fácilmente.
Consulta nuestra wiki.
Saludos :)

06.02.18 @ 14:15 Reply to this comment
Comentario De: Joaquín [Visitante]

Hola, necesito completar las celdas vacías de una hoja de cálculo con el valor 1. Tengo que crear una función? Cómo podría hacerlo?
Muchas gracias.

25.05.18 @ 00:29 Reply to this comment
Comentario De: ignacio [Visitante]

felicitaciones por los post.. muy bueno... Me estoy confundiendo un poco con lo siguiente. Necesito hacer una macro que me arroje los resultados de una fórmula combinatoria, es decir que me aparezcan todos los resultados posible por ejemplo para una combinación de 5 en 3 elementos.
muchas gracias

04.02.20 @ 00:03 Reply to this comment


Form is loading...