domingo, febrero 21, 2010

Estilo de referencia F1C1 en Excel

Pregunta: ¿Qué hay de particular en esta imagen?




Efectivamente, las referencias a las columnas son números en lugar de letras. Cuando abrimos una instancia de Excel, la referencia a las columnas son, por defecto, letras. Pero Excel tiene otro sistema de referencia a las celdas conocido como "estilo F1C1" (o estilo R1C1 donde R significa row, fila en inglés, y C obviamente columna).

Cuando usamos el estilo F1C1, las direcciones de las celdas son expresadas sólo con números. A diferencia del estilo "normal", nos referimos primero a la fila y luego a la columna. De esta manera la referencia a la celda superior izquierda de la hoja en lugar de A1 será F1C1.

Para pasar de un estilo de referencia al otro en Excel Clásico usamos el menú Herramientas-Opciones y en la pestaña General marcamos la opción Estilo de referencia F1C1



En Excel 2007 apretamos el botón del Office y en Opciones de Excel pulsamos Fórmulas y marcamos la el Estilo de Referencia F1C1



Vamos a profundizar un poco más en el tema y trataremos de responder a lo que seguramente se pregunta más de un lector: ¿para qué sirve esto?



Al igual que en el estilo normal, existen referencias absolutas, relativas y mixtas. Por ejemplo, la fórmula =F1C1+F2C1 se refiere siempre a la celdas A1 yA2, no importe donde copiemos o pongamos la fórmula. Es decir, esta notación es absoluta, el equivalente a =$A$1+$A$2.

Si queremos usar referencias relativas usamos corchetes o paréntesis, dependiendo de las definiciones regionales, de esta manera

=F[1]C[1]+F[2]C[1]

o =F(1)C(1)+F(2)C(1).

A esta altura de los acontecimientos es importante distinguir qué significa referencia relativa en este caso.
=F(1)C(1)+F(2)C(1) significa: tomemos el valor de la celda que se encuentra una fila hacia debajo de la celda activa y una columna a la derecha y sumemos este valor al de la celda que se encuentra dos filas hacia abajo y una columna a la derecha.

Tomemos como ejemplo esta tabla



Los valores de la columna D son calculados con la fórmula =C2*B2 que hemos copiado al resto de las celdas en la columna. En forma automática Excel cambia la referencia cambiando la letra y el número de referencia



Veamos ahora que pasa si usamos el estilo de referencia F1C1



Todas las fórmulas son idénticas: =FC(-1)*FC(-2)

Como podemos apreciar, se trata de dos métodos distintos de referenciar celdas en la hoja. La referencia nn el método normal, aún cuando nos referimos específicamente a la celda A1, por ejemplo, es relativa. Si la usamos en una fórmula y copiamos esta fórmula a otra ubicación en la hoja, la referencia cambiará de en relación a la nueva ubicación.
En cambio, cuando usamos F1C1, no importa donde copiemos la fórmula siempre nos estaremos refiriendo a la primer celda de la hoja.

¿Por qué existen ambos métodos en Excel? No sé si Microsoft se ha expedido sobre el tema en alguna oportunidad pera parece ser que los motivos son históricos. La primer hoja de cálculo comercial, VisiCalc usaba el sistema de referencia A1. Lotus, la más popular de las hojas en los años 80 y principios del 90 también usaba este sistema. El primer producto de Microsoft en esta área fue el Microsoft Multiplan que usaba el sistema F1C1. Aparentemente, al crear Excel Microsoft decidió dar la batalla por el mercado y adoptó el mismo sistema de Lotus, que en esos tiempos dominaba el mercado.

Y ahora llegamos al núcleo de la cuestión: ¿para qué sirve este método? O la pregunta equivalente, ¿por qué tengo que saber que existe?

Respuestas posibles son:

  • Para poder demostrar nuestros profundos conocimientos sobre Excel e impresionar a nuestro jefe (o a su secretaria, o a la nueva empleada del departamento de contaduría).
  • Para entender por qué cuando grabamos una macro vemos esto en el módulo del editor
  • ActiveCell.FormulaR1C1 = "=RC[-2]*RC[-1]"
  • Porque según dicen, en algunos casos es mejor usar este método.
  • Debo confesar que hasta el día de hoy no me he visto en una situación donde imprescindiblemente tenga que usar este método. Pero nunca se sabe…

lunes, febrero 15, 2010

Diagramas Gantt dinámicos en Excel

En los albores de este blog publiqué una nota sobre cómo construir un diagrama Gantt con Excel. Mostramos allí dos posibilidades: usando formato condicional o usando gráficos.

En esta nota mostraremos como construir un diagrama de Gantt dinámico que nos permite mostrar en pantalla tareas que se extienden por períodos muy largos.

Cuando construimos el diagrama de Gantt en Excel con formato condicional, usamos una fila para cada tarea y una celda para cada unidad de tiempo. El modelo general consiste en usar la primer columna para definir las tareas, la segunda para la fecha de iniciación, la tercera para la duración, la cuarta para la fecha de finalización y a partir de la quinta columna usamos cada celda para representar una unidad de tiempo. Este es un ejemplo clásico



Las barras de color del diagrama las logramos usando estas fórmulas de formato condicional:



para las filas pares =Y($C3=F$2,$E3=F$2,RESIDUO(FILA(),2)=0)

para las filas impares =Y($C3=F$2,$E3;=F$2,RESIDUO(FILA(),2)=1)

Para construir la escala del tiempo (en la fila 2) ponemos en la celda F2 esta fórmula

=MIN(C3:C6)+7

que calcula la primer fecha más una semana de la primer tarea a realizar. En la celda G2 ponemos "=F2+7" y así sucesivamente.

Si observamos atentamente veremos que si bien la primer tarea concluye el 15/02/10, el diagrama parece indicar que lo hace el 12/02/10. Esto se debe a que usamos una resolución semanal para mostrar las tareas.
Podemos solucionar este problema usando una resolución diaria. En total necesitamos 90 días (la última fecha es el 26/03/10).

Si bien esto resuelve el problema, nos crea uno nuevo, el diagrama excede los límites de la pantalla



La solución ideal es, por lo tanto, trabajar con una resolución diaria pero que no exceda el ancho de la pantalla.

Empezamos por insertar algunas filas por encima de nuestro diagrama.



En la celda E3 calculamos la primer fecha del proyecto usando la función MIN. En la celda F5 creamos una referencia a la celda E3; en la celda G5 ponemos "=F5+1" y así sucesivamente para crear la escala de tiempo.

En la celda F6 creamos una referencia a la celda F5, seleccionamos el rango que comprende la semana (F6:L6) y aplicamos "combinar y centrar"


Cambiamos el ancho de las columnas de la selección a 0.6, quitamos los bordes interiores y obtenemos este resultado


Nótese que la fecha 01/01/10 parece ocupar una columna pero en realidad comprende 7 columnas, una para cada día de la semana.

Volvemos a aplicar esta técnica a cada grupo de siete columnas hasta obtener este resultado


Hemos mejorado en buena medida nuestro diagrama, pero aún nos queda una cuestión por solucionar.

Nuestro diagrama cubre ahora 13 semanas, con resolución diaria. Pero, ¿que pasa si una tarea se extienda por más de de 90 días del inicio del proyecto?
Esto lo solucionaremos creando un diagrama Gantt dinámico con fórmulas sencillas y una barra de desplazamiento de la barra de formularios.

Introducimos estos cambios en nuestro modelo:

1 – insertamos una columna a la izquierda de la hoja (la tabla del diagrama empieza ahora en la columna C).

2 – en la celda G3 ponemos la fórmula "=MIN(D5:D8)+A2"; el papel a cumplir por la celda A2 será explicado enseguida


3 –reemplazamos la fórmula en la celda G4 por una referencia a la celda G3

4 – en la pestaña Programador abrimos la etiqueta Insertar e insertamos una barra de desplazamiento


5 – definimos los parámetros de la barra de desplazamiento en la pestaña "control" del menú "formato de control"


Nótese que vinculamos el control con la celda A2. Esto hará que cuando movemos el cursor de la barra, la fecha en la celda G3 se va incrementando y así el resto de las celdas.

Para ejemplificarlo cambiamos la cantidad de días en la duración y podemos ver como al desplazar el cursor de la barra, se van modificando las fechas y actualizando el diagrama




El archivo puede descargarse aquí 
.

viernes, febrero 12, 2010

Datos Externos en tablas dinámicas de Excel – ampliación

En la nota anterior sobre uso de archivos de texto como fuente para una tabla dinámica, vimos cómo agregar un origen de datos a la lista de las posibilidades del MS Query. Los archivos de textos usan distintos elementos para separar los campos como comas (archivos .cvs), espacios o tabs. Pero también puede darse el caso que se use un separador no convencional como el pipe (|).

En esos casos tendremos que agregar algunos pasos a nuestra solución, lo que mostraremos en esta nota.

Supongamos que queremos analizar los datos de este archivo de texto con una tabla dinámica



Como puede observarse los campos están separados por el carácter "|" (pipe).

Empezamos el proceso tal como lo mostramos en la nota anterior hasta llegar a la etapa "Crear nuevo origen de datos"





Como en el caso anterior elegimos un controlador adecuado para el tipo de datos (texto)



Apretamos el botón Conectar lo que abre el diálogo "ODBC Text Setup"



En esta etapa apretamos el botón Options lo que abre una nueva zona en el formulario



Apretamos el botón Define Format para definir las definiciones del nuevo tipo de archivo. En la parte izquierda del formulario señalamos el archivo que queremos usar (el que sirve de modelo para el nuevo origen), si tiene encabezados y los más importante, cuál es el separador (delimiter)


Luego apretamos el botón Guess lo que nos permite ver las columnas, cambiar el tipo de datos y el nombre del campo



Apretamos OK y en el formulario de Crear nuevo origen de datos apretamos Aceptar.

Esto nos lleva nuevamente al formulario Elegir origen de datos




Al aceptar el nuevo origen volvemos al diálogo del asistente para consultas. También podemos interrumpir el proceso y usar el nuevo origen más adelante.