jueves, enero 10, 2008

Distribuir datos en hojas Excel sin macros.

Supongamos esta situación: una empresa de transporte lleva el registro de los viajes un cuaderno Excel con varias hojas. En la primera se anotan los datos (fecha, destino, conductor y ruta). Por cada ruta hay una hoja. Nuestro objetivo es que al anotar los viajes en la primer hoja, éstos aparezcan automáticamente en la hoja correspondiente por ruta.

Esta es la tabla que aparece en la primer hoja (que llamaremos "Datos")




Queremos que cada línea aparezca en otra hoja. Los viajes de la ruta 1 en una hoja que se llamará "Ruta 1", los de la ruta 2 en "Ruta 2", etc.

Hay dos formas más o menos inmediatas de resolver el problema: macros y tablas dinámicas. Con tablas dinámicas no estaríamos distribuyendo los datos, pero podríamos generar con facilidad listas por ruta.

Pero el desafío es hacerlo con fórmulas. No es que esté aburrido y no tenga lo que hacer. Pero curiosamente he recibido varias veces esta consulta en las últimas semanas. A veces se trata de transporte por rutas, como en el ejemplo, a veces una escuela de fútbol que lleva un registro de alumnos por edad, a veces una tienda que quiere manejar el inventario por tipo de producto.

Finalmente decidí aceptar el desafío, a pesar que la solución que propondré más adelante no es eficiente como el uso de tablas dinámicas o macros.

El primer paso es crear tres hojas, una para cada ruta, donde pondremos las fórmulas que reflejaran los datos correspondientes de la hoja Datos. En estas hoja ponemos los mismos encabezamientos como en Datos, pero agregamos una columna, "Orden"



En la celda A2 ponemos esta fórmula: =SI(Datos!$D2=1,Datos!A2,"")
Esta fórmula trae el contenido de la celda A2 de Datos, si el valor de la columna D de Datos es 1, es decir, la ruta 1. En la Hoja Ruta 2 copiamos la misma fórmula, pero cambiamos el argumento Datos!$D2=1 por Datos!$D2=2.

Copiamos la fórmula en las celdas B2 y C2 (prestar atención a los símbolos $ en las direcciones de la celda) y luego al rango A3:C11.
Como se puede ver, los valores que aparecen en el rango son los de la ruta 1. Sino, aparece una celda en blanco.



En la celda D2 ponemos esta fórmula, que ya explicamos en la nota sobre ordenar texto en Excel con fórmulas,

=CONTAR.SI($A$2:$A$11,"<="&A2) y la copiamos al rango D3:D11.



Como se puede apreciar, esta fórmula hace las veces de la función JERARQUIA para textos. Si bien las fechas son números, y por lo tanto podríamos usar JERARQUIA, el problema surge con las celdas en blanco. Por ese motivo usamos la fórmula señalada.


Ahora creamos una segunda tablas en el rango F1:H11. En la primer fila copiamos los encabezamientos. En la celda F2 ponemos esta fórmula

=INDICE($A$2:$E$11,COINCIDIR(FILA()-1,$D$2:$D$11,0),COINCIDIR(F$1,$A$1:$C$1,0))

que copiamos al rango F2:H11



En la nueva tabla, las líneas que pertenecen a la ruta aparecen ordenadas por fecha, y las que pertenecen a otras rutas aparecen como #N/A. Para mejorar la apariencia de la lista podemos aplicar Formato Condicional



dándole color blanco a la fuente de la celda que cumple la condición, para hacer "desaparecer" el resulta #N/A. También hemos ocultado las columnas A:E.

¿Cómo funciona la fórmula con al función INDICE? Esta función da como resultado el valor de una matriz que se encuentra en la celda determinada por el valor del segundo argumento (fila) y del tercer argumento (columna). La matriz es el rango A2:E11, que contiene también la columna Orden.
La fila es determinada por la función COINCIDIR(FILA()-1,$D$2:$D$11,0), que encuentra en que lugar del rango D2:D11 se encuentra la fila con el número de orden 1, 2 etc. El número de orden es determinado por el número de fila de la celda que contiene la fórmula, menos 1. Así, en la fila 2 aparecerán los datos que tienen el número de orden 1, en la fila tres los que tienen el número de orden 2, y así sucesivamente.
La segunda función COINCIDIR, hace que los datos en la celda correspondan a la columna indicada.

Como verán, hemos encontrado una solución con fórmulas al problema. Pero esta solución tienen dos problemas importantes, si queremos trabajar con gran cantidad de datos:
- la función FILA(), es volátil y causa que cada cambio en la hoja provoque un recálculo de toda lo hoja;
- INDICE y COINCIDIR tienden a ser lentas cuando trabajamos con gran cantidad de datos.

El archivo se puede descargar distribuir a hojasaquí




Technorati Tags:

domingo, enero 06, 2008

Cálculos con pies (feet) y pulgadas (inches) en Excel.

Hace unos días me consultaba un lector sobre cómo hacer cálculos en pies (feet) y pulgadas (inches) con Excel.
Debo confesar que nunca me había planteado esta pregunta. Dado que despertó mi curiosidad, en definitiva en los Estados Unidos siguen usando estas medidas, empecé por informarme un poco sobre el tema.
Como casi siempre en estos casos, empezamos por Wikipedia. Así nos enteramos que 1 pie (foot) equivale a 12 pulgadas (inches), la que se suele escribir: 1' = 12". Las fracciones de pulgada más comunes son: 1/2", 1/4", 1/8", 1/16", 1/32" y 1/64". Ciertas fracciones comunes son expresadas en su forma reducida, por ejemplo 6/32" es presentada como 3/16".
Según la nota de Wikipedia, las equivalencias también se presentan en forma decimal. 1/2" = .5, 1/4"=.25, 1/8"=.125, 1/16"=.0625, 1/32"=.03125 y 1/64"=.015625; de ahí, el resto de las fracciones, por ejemplo: 3/8"=.375 ó 63/64"=.984375.

Volviendo a la consulta de mi lector, se trataba de sumar 3'-4 1/2"+ 2'-2 5/8. La primera dificultad para los que crecimos y vivimos en un mundo métrico, es entender la notación. El primer número en la suma es, en letras, tres pies y cuatro y media pulgadas; el segundo es dos pies con dos cinco y ochoavos pulgadas.

Tras una breve búsqueda en la Internet, llegué al sitio de John Lacher quien ofrece descargar una función UDF para convertir pies y pulgadas a medidas métricas.

Otra alternativa es usar funciones nativas de Excel y columnas auxiliares, como mostraremos en esta nota.

Para resolver el problema empezaremos por reducir todo a pulgadas, el mínimo común denominador. En el primer número 3 pies equivalen a 36 pulgadas; así que todo el número expresado en pulgadas es 40.5. El segundo equivales a 26.65 pulgadas (2*12 + 2 + 5/8 = 24+2+0.625).

Como vemos, la conversión no es problemática. El problema es cómo indicarle a que Excel cuál es la parte del número expresado en pies y cuál en pulgadas.

Para esta tarea tendremos que recurrir a funciones texto. Empezamos por construir una plantilla




En la celda B2 ponemos esta fórmula =IZQUIERDA(A2;ENCONTRAR("'";A2)-1) y la copiamos en la celda B3. El resultado es un texto. Para poder aplicar más adelante operaciones matemáticas los convertimos en número usado la función VALOR



Para extraer la parte de pulgadas usamos la función EXTRAE combinada con la función LARGO:

=VALOR(EXTRAE(A2;ENCONTRAR("-";A2)+1;LARGO(A2)-ENCONTRAR("-";A2)-1))



Finalmente, para calcular el total de pulgadas usamos en D2 la fórmula =B2*12+C2 y la copiamos a D3. Calculamos los totales para cada columna



Todo lo que nos queda es reducir el resultado 67,125 pulgadas a su expresión en pies y pulgadas. Para esto usamos las funciones ENTERO y RESIDUO y TEXTO. En la celda D5 ponemos la fórmula

=ENTERO(D4/12)&" - "&TEXTO(RESIDUO(D4;12);"# ??/??")

Usamos la función texto, ya que tenemos que unir el resultado de la función ENTERO, que es numérico, con la parte fraccional que es texto.



A quien tenga que hacer frecuentemente cálculos con pies y pulgadas, le convendrá sin dudas descargar alguna función de la Internet, como la que ofrece Lacher.

Technorati Tags:

miércoles, enero 02, 2008

JLD en Castellano – Balance del segundo año

Hace un año atrás, hacía el balance del primer año de este blog. Ahora ha llegado el momento de presentarles el balance del segundo año.
Durante el 2007 he estado utilizando los servicios (gratuitos) de StatCounter. La ventaja de este servicio es que permite extraer datos históricos con facilidad. Sencillamente se introducen las fechas de inicio y fin del período y el sitio genera una tabla con las estadísticas diarias. El sitio también nos permite descargar la tabla a un archivo en formato Excel o csv.
Esto que parece tan trivial, se convierte en un verdadero ejercicio de manipulación de datos, cuando nuestro sistema está instalado "en castellano". En una próxima nota estaré describiendo las técnicas que tuve que utilizar con los datos de StatCounter para poder generar la información y los gráficos que muestro aquí.

Durante el 2007 han visitado mi este blog 222.328 lectores, de los cuales 171.176 lo hacían por primera vez (First Time Visitors - 77%) y 51.152 ya lo habían hecho en el pasado (Returning Visitors - 23%).

Estos 222.328 visitantes leyeron 533.567 páginas, es decir un promedio de 2.4 páginas por visitante.

Dicho en términos diarios: 609 visitantes por día, de los cuales 469 lo hacían por primera vez, y 1.462 páginas leídas por día.




En forma gráfica:






El 25 de octubre fue el día record de visitas, con 1.419 visitantes y 3.219 páginas.

En el 2006, el primer año de este blog, hubo cerca de 58.000 visitante y 163.000 páginas leídas. Es decir un crecimiento del 383% en la cantidad de visitantes y del 327% en la de páginas leídas.

A todo esto habría que sumar las suscripciones del feed del blog, que también han crecido a buen ritmo. Al final del 2006 contaba con 33 suscriptores. De acuerdo a las estadísticas de Feedburner, a fin del 2007 este blog tenía 257, es decir casi 8 veces más.

En el resumen del 2006 declaraba cuáles eran mis planes para el 2007: reunificar el blog de gráficos y presentación de datos en este blog, crear un sitio independiente que de solución a la descarga de archivos con ejemplos, mejorar la interfaz del blog y empezar a publicar una serie de guías prácticas en castellano.

Debo reconocer que de todos los planes sólo he cumplido el de mejorar, no dramáticamente debo reconocer, la interfaz del blog.
Las guías y el sitio pasan a ser las buenas intenciones para el 2008. En cuanto al blog de gráficos, sigo dudando qué hacer con él. Por ahora seguirá siendo un blog independiente.

En resumen, 2007 ha sido un año de buen crecimiento para el blog, por lo que le estoy agradecido a mis lectores. Ha sido un año en el que sentido la gratitud de muchos de ustedes, también en los momentos difíciles que me han tocado vivir en mi vida personal.

A todos, muchas gracias y mis mejores deseos de un feliz y próspero 2008.



Technorati Tags: