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.

martes, febrero 09, 2010

Tablas dinámicas en Excel con archivos de texto externos

En las primeras etapas de este blog escribí una serie de notas sobre tablas dinámicas en Excel. Uno de los temas que pasé por alto es el del uso de fuentes de datos externas para construir tablas dinámicas.

La importancia del tema es evidente. Una hoja en Excel Clásico puede contener hasta 65536 filas, lo cual puede ser una limitación crítica si tenemos que analizar grandes cantidades de datos. Si bien Excel 2007 y 2010 han extendido este límite más allá del millón de filas, no creo que un cuaderno con semejante cantidad de datos sea una alternativa razonable.

Excel viene provisto con un mecanismo que le permite conectarse con fuentes de datos externas. Hemos visto este mecanismo en acción en algunas de las notas sobre el uso de MS Query y la importación de datos externos a hojas de Excel.

En esta nota mostraremos como crear una tabla dinámica a partir de datos remotos, es decir, que no se encuentran en el cuaderno que contiene la tabla dinámica.

Estos datos remotos pueden estar en archivos de distinto tipo como Access (.mdb), Texto (.csv, .txt), Excel y otros. Si la fuente de datos aparece en la lista de Excel, el proceso es sencillo. Pero en ciertos casos la fuente no existe y debemos crearla.

En nuestro caso vamos suponer que tenemos los datos en un archivo de texto tipo .csv (comma separated values). En Excel Clásico empezamos el proceso abriendo un cuaderno Excel y usando el menú Datos-Informe de Tablas y Gráficos Dinámicos elegimos la opción Fuente de datos externa. Al apretar el botón Siguiente se abre el diálogo para ubicar la fuente de los datos



En nuestro caso podemos ver que el tipo de datos que queremos usar no figura en la lista. En este caso usamos la opción "Nuevo origen de datos"




En la ventanilla superior ponemos el nombre que queremos dar a la nueva fuente (archivoTXT o cualquier otro que crean conveniente), en la ventanilla 2 elegimos el controlador (driver) indicado para el tipo de datos y finalmente apretamos el botón Conectar.

En el nuevo formulario que se abre ubicamos el archivo que queremos que sirva de base a nuestra tabla dinámica



Si el directorio no coincide con el que aparece en el formulario, quitamos la señal de la casilla "Use current directory" para poder elegir la ubicación indicada.

Finalmente apretamos OK y Aceptar. Con este hemos creado una nueva fuente de datos



El próximo paso es elegir el archivo que contiene los datos



Y seguimos apretando Aceptar hasta llegar a la etapa final



Aquí señalamos la opción "Devolver datos a Microsoft Excel" y Aceptar, lo que no lleva de regreso al asistente de tablas dinámicas (por si no se dieron cuenta, hasta ahora hemos trabajado en el MS Query)



El próximo paso nos lleva al conocido formulario de ubicación de la tabla dinámica en la hoja



Al apretar Aceptar se creará la tabla dinámica



En Excel 2007 hay algunas diferencias, por lo que mostraremos dos caminos. Excel 2007 nos permite usar la interfaz de tablas dinámicas de Excel Clásico usando el atajo de teclado Alt+T+B



A partir de aquí procedemos como mostramos más arriba.

Otra alternativa es comenzar el proceso en la pestaña Datos – Obtener datos externos-de otras fuentes-MS Query



Esto abre el diálogo del MS Query para elegir el origen de datos, tal como sucede con Excel Clásico.



viernes, febrero 05, 2010

Uso de Estilos en Excel

Alguna vez he mencionado que estaba preparando una nota sobre el uso de estilos en Excel. Esta es una funcionalidad tan útil como ignorada, o por lo menos subestimada, por gran parte de los usuarios de Excel.

El tema volvió a mi conciencia a partir de la consulta de un lector a quien “lo mata” (sic) que no pueda controlar el formato de la fuente de los hipervínculos. Cada vez que crea un hipervínculo, Excel le pone la fuente Arial con el tamaño 10, cosa que él nunca usa ni considera usar en algún futuro cercano o lejano.

Primero veamos cómo podemos solucionar el problema de mi sufrido lector y luego nos referiremos al tema de la nota.

Como ya sabemos, podemos agregar un hipervínculo a una celda. El hipervínculo puede dirigirse a una página Web, a un archivo o a una ubicación en una hoja de Excel (y también a un párrafo específico de un documento Word, como ya hemos visto).

En Excel Clásico la tarea de cambiar el estilo de los hipervínculos es sencilla. Seleccionamos una de las celdas con hipervínculo y abrimos el menú Formato-Estilos



En la lista desplegable de nombres de Estilo, aparece Hipervínculo. Apretando el botón Modificar podemos cambiar los formatos a nuestro parecer



Al apretar Aceptar, el formato de todas las celdas que contienen hipervínculos cambiará



Al agregar un nuevo hipervínculo éste recibirá los formatos del nuevo estilo





El nuevo estilo es guardado con el cuaderno donde lo hemos creado y no se aplica a los otros cuadernos.



En Excel 2007 usamos



El menú de las opciones lo abrimos apuntando al estilo (Hipervínculo) y apretando el botón derecho del mouse. Elegimos Modificar y cambiamos los formatos a nuestro gusto.

Pero Estilos, como ya habrán entendido, no se limita a Hipervínculos. Cada Estilo es una colección de formatos que incluye los formatos de números, fuente, bordes, tramas y protección de la celda. Una vez creado el estilo lo podemos aplicar a una celda o a un rango de celdas con el menú Formato-Estilo en Excel Clásico o con Inicio-Estilo de Celdas en Excel 2007.

Podemos crear un estilo con el menú, como indicamos más arriba, o aplicando todos los formatos a una celda y luego usando la opción “según el ejemplo”



Aquí, por ejemplo, hemos creado el estilo Título 1 basándonos en las definiciones de la celda B2.

Entre Excel clásico y Excel 2007 hay algunas diferencias en los métodos de guardar los nuevos estilos que hemos definido.

En Excel Clásico el formulario tiene dos botones para guardar el estilo: Agregar y Aceptar


Si apretamos Aceptar, el todas las celdas de la selección reciben el nuevo estilo (suponiendo que hemos seleccionado más de una celda). Si usamos Agregar y luego Aceptar, se crea el nuevo estilo, pero las celdas de la selección no cambian.

En Excel 2003 podemos agregar la lista desplegable de estilos a una barra



lo que es una forma muy eficiente de usarlos.

En Excel 2007 lo podemos agregar a la barra de acceso rápido



Aplicar estilos es muy sencillo. Vamos a mostrar esto creando un nuevo estilo, EstiloNuevo, con fuente Arial 20, color de fuente azul subrayado y relleno amarillo








Para aplicar el nuevo estilo a este rango



en Excel 2007 después de seleccionar el rango abrimos el menú Estilo de Celdas; al apuntar al nuevo estilo el rango es mostrado como se verá si aceptamos la opción



En Excel Clásico seleccionamos el rango y abrimos la lista desplegable de estilo



¿Cuáles son las ventajas de aplicar estilos? Puede ser a que a primera no sean evidens. Usar estilos nos permite
  • realizar cambios a grandes cantidades de celdas con un solo clic. Todo cambio en la definición del estilo se refleja inmediatamente en todas las celdas definidas con él;
  • mantener la uniformidad en los cuadernos que creamos;
  • ayudan a considerar más a fondo el diseño de las hojas y a conservar su consistencia.

lunes, febrero 01, 2010

Hipervínculos en Excel - cambiar ubicación

Excel permite crear hipervínculos en celdas tanto a páginas Web como a archivos. Como ya hemos visto, Excel nos proporciona dos caminos:



  • con el menú Insertar-Hipervínculo en Excel Clásico o Hipervínculo en la pestaña Insertar de Excel 2007 (o con el atajo de teclado Ctrl+Alt+K en ambas versiones de Excel o con el menú contextual)



Este último método tiene la ventaja de permitirnos crear ubicación del vínculo, es decir el texto con la ruta del archivo, en forma dinámica.

Con dinámica nos referimos a que en lugar de un texto fijo, ponemos una referencia a una celda que contiene el texto. De esta manera, podemos cambiar el texto en la celda y la referencia cambiará automáticamente.

Esta técnica puede ser muy útil en ciertas situaciones. Por ejemplo, si tenemos hipervínculos a varios archivos en una carpeta y por algún motivo debemos moverlos a otra carpeta. Los hipervínculos creados con el menú no son dinámicos y al mover los archivos dejarán de funcionar. En estos casos la solución será usar macros, que mostraremos más adelante.



En este ejemplo podemos ver que la ruta del archivo se crea combinando el valor de B1 con el nombre del archivo





De esta manera, si movemos el archivo a otra carpeta todo lo que tenemos que hacer es cambiar el valor de la celda B1.

Pero la vida, como siempre, nos enfrenta a situaciones más complicadas. Como el caso de uno de mis lectores que fue creando hipervínculos a archivos guardados en una carpeta y verse necesitado a moverlos a otra carpeta. Como los hipervínculos no fueron creados con la función, sólo tenemos dos alternativas: o cambiar cada vínculo manualmente o usar una macro.




Vamos a mostrar una macro sencilla para reemplazar la ruta de todos los hipervínculos en una hoja. En esta hoja hemos creado cuatro hipervínculos a archivos en la carpeta “D:\My Documents\temp”.



Si queremos cambiar la ruta a “D:\My Documents\blog” podemos usar esta macro

Sub hipervinc_cambio()

    Dim hpVinc As Hyperlink
    Dim strOldAddress As String, strNewAddres As String
  
    strOldAddress = "D:\My Documents\blog\"
    strNewAddres = "D:\My Documents\algodistinto\"
  
    For Each hpVinc In ActiveSheet.Hyperlinks
        hpVinc.Address = Replace(hpVinc.Address, strOldAddress, strNewAddres)
    Next
  
End Sub


Esta es una macro simplificada a los solos efectos de demostrar cómo cambiar los vínculos programáticamente.
En lugar de poner las rutas en el cuerpo del código podemos ponerlas en celdas de la hoja y modificar el código de acuerdo.
Por ejemplo podemos usar las celdas E1 y E2 para alojar el texto de la ruta




y usar esta rutina

Sub hipervinc_cambio()

    Dim hpVinc As Hyperlink
    Dim strOldAddress As String, strNewAddres As String
  
    strOldAddress = Range("E1")
    strNewAddres = Range("E2")
  
    For Each hpVinc In ActiveSheet.Hyperlinks
        hpVinc.Address = Replace(hpVinc.Address, strOldAddress, strNewAddres)
    Next
  
End Sub