lunes, marzo 01, 2010

Activar Macros y controles ActiveX en Excel 2010

Quien haya descargado e instalado Excel 2010 descubrirá, como en Excel 2007, que por defecto la pestaña de Programador no aparece en la cinta. Esto se debe a que por defecto las macros no están habilitadas en Excel 2010. Tampoco tenemos acceso a los controles (formulario y ActiveX).

Si están buscando una solución al problema "No se puede insertar el objeto", debido a la actualización de Microsoft del 9 de diciembre, lean esta nota.

Para poder usar las macros y los controles en Excel 2010 tenemos que seguir los siguientes pasos:
Activamos la pestaña Archivo y apretamos el botón Opciones



Activamos el Centro de Confianza y apretamos el botón Configuración del centro de confianza



En el centro e confianza activamos la opción Configuración de macros y habilitamos la opción Habilitar todas las macros



Apretamos Aceptar con lo que habremos habilitado las macros en nuestra copia de Excel 2010.
Sin embargo la pestaña de Programador no aparecerá. Para hacerla aparecer usamos nuevamente el menú Opciones de Archivo y en Personalizar la cinta de opciones marcamos Programador




A partir de ese momento podemos grabar, editar y crear macros y también usar controles en nuestros cuadernos.

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í 
.