viernes, marzo 09, 2007

Funciones Texto Excel en megafórmulas

Uno de mis lectores me preguntaba si existe alguna función en Excel que, dado un nombre propio, de cómo resultado el sexo de la persona.
Semejante función no existe, pero basándonos en una lista de nombres y sexos, podemos construir una fórmula que lo haga.
El objetivo de esta nota es doble. Demostrar el uso de algunas funciones de texto y como podemos combinarlas y, una vez más, cavilar sobre el tema de "megafórmulas" versus "tablas auxiliares".

Comencemos por considerar esta mega_formtabla.




Los nombres son de alumnos de mi promoción del Colegio Nacional de Buenos Aires (y espero que nadie se moleste por publicarlos sin su consentimiento).
La idea es crear una fórmula en la columna B que de cómo resultado el sexo de la persona, basándose en el nombre propio.

El primer lugar creamos una lista que contiene nombres propios y el sexo apropiado (por suerte en castellano no hay nombres "duales").



A la tabla le asociamos el nombre "sexo"

Volviendo a la tabla de los alumnos, vemos que el apellido está separado de los nombres propios por una coma. Esto nos servirá para extraer el primer nombre propio del alumno, que a su vez nos servirá de argumento de una función BUSCARV para obtener el sexo del nombre en la tabla "sexo".

Primero mostraremos como resolvemos el problema usando tablas auxiliares. La solución es la siguiente



En la columna D ponemos esta fórmula: =ENCONTRAR(",";A2)+2
El resultado de ENCONTRAR es la posición de la coma, que separa el apellidos de los nombres propios, en la cadena de texto (apellido + nombres propios). Al sumarle 2 obtenemos la posición de la primer letra del nombre propio.

En la columna E ponemos la fórmula:

=SI(ESERROR(ENCONTRAR(" ";A2;D2+2));LARGO(A2)+D2;ENCONTRAR(" ";A2;D2+2))

Esta fórmula calcula la posición de la última letra del primer nombre propio. La función SI es necesaria para evitar que la fórmula de error si hay un solo nombre propio.
De haber más de un nombre propio basta con la fórmula ENCONTRAR(" ";A2;D2+2), que busca la posición del primer espacio después de la coma. Pero de haber un solo nombre, no hay espacio y la función da resultado ERROR. En ese caso usamos la función LARGO.

En la columna F ponemos la fórmula =EXTRAE(A2;D2;E2-D2), que se basa en los resultados de las columnas auxiliares. Como ven, aquí obtenemos el nombre propio.

Todo lo que nos queda por hacer es buscar el sexo del nombre en la tabla "sexo". Esto lo hacemos con la función BUSCARV, que ponemos en la columna B

=BUSCARV(F2;sexo;2;0)

Otra alternativa es construir una "megafórmula". Un megafórmula combina en una sola fórmula todas las funciones que hemos usado en las columnas auxiliares. La megafórmula que usaríamos es

=BUSCARV(EXTRAE(A2;ENCONTRAR(",";A2)+2;SI(ESERROR(ENCONTRAR(" ";A2;(ENCONTRAR(",";A2)+2)+2));LARGO(A2)+(ENCONTRAR(",";A2)+2);ENCONTRAR(" ";A2;(ENCONTRAR(",";A2)+2)+2))-(ENCONTRAR(",";A2)+2));sexo;2;0)

La ventaja de usar "megafórmulas" es que eliminamos las columnas auxiliares, resultando en archivos más pequeños y con menor tiempo de recálculo.
La desventaja consiste en que estas "megafórmulas" son muy difíciles, o imposibles, de interpretar.

Technorati Tags:

No hay comentarios.:

Publicar un comentario

Nota: sólo los miembros de este blog pueden publicar comentarios.