jueves, 16 de febrero de 2012

Filtro avanzado de datos.


El filtro avanzado de datos permite una selección de datos mucho mas flexible y amplia que el filtro automático. Como casi todas las explicaciones de Microsoft la ayuda del filtro avanzado es un galimatías que no hay quien entienda, pero que en la práctica es muy sencillo de utilizar. Es mas, permite filtrar datos desde otra página distinta a la que contiene los datos. Los datos se pueden filtrar en la propia hoja o se puede obtener una copia del resultado del filtro en otra hoja distinta. En el libro que he preparado hay una hoja para el filtro, otra para los datos y otra para los datos filtrados. Utilizo, como datos, la relación de los mas de 18000 pueblos de España, y en este caso no utilizo funciones, pero si rangos con nombre.

Variables o rangos con nombre:
Prv=Pobl!$E$1:$E$18642
Fil=Filtro!$A$1:$B$2
RanDat=Pobl!$A:$E

  • Los datos a filtrar deben tener cabecera, cada columna debe presentar su cabecera. Estas cabeceras funcionan como nombre o rótulo de la columna. Al definir el filtro debemos utilizar ese nombre de columna, y debajo de el indicar la condición del filtro.
  •  El filtro debe tener como mínimo una fila con el/los nombres (para facilitar el diseño del filtro yo copio la cabecera de los datos a filtrar, entera) de las columnas que intervienen en el filtro y al menos una fila mas con las condiciones del filtro. Estas condiciones se ponen debajo del cada nombre de columna.
  •  El rango de criterios (el filtro) puede estar en una hoja distinta a la de los datos, en este caso la hoja FILTRO. Los datos resultantes del filtro los copio a la hoja DATOS.
  • En el filtro pueden intervenir los campos que componen los datos mas de una vez. 
  • Al definir el filtro los valores situados en una línea están vinculados mediante un Y lógico y a su vez, si utilizamos mas de una línea, las líneas entre si están vinculadas mediante un O lógico.
  •  Si en el ejemplo queremos encontrar los pueblos de la provincia de CADIZ que empiecen por V debemos poner CADIZ debajo de provincia y V debajo de nombre (conviene leerse la ayuda de excel).
  •  Si quisiéramos obtener los pueblos de CADIZ y HUELVA (lo decimos así pero en realidad estamos indicando de CADIZ o de HUELVA) pondríamos, debajo de provincia, CADIZ en la primera línea y HUELVA en la segunda.
  •  Si necesitamos hacer un filtro del tipo, para los datos del ejemplo, latitud mayor o igual a 42 y menor que 43 (42<=Lat <43) en la fila de cabecera pondríamos dos veces el rótulo LAT y en la misma fila, debajo de  uno de ellos pondríamos >=42 y debajo del otro <43.
  • Los valores del filtro admiten funciones, referencias a otras celdas y variables o rangos con nombre ( En el libro excel adjunto hay dos rangos de datos con nombre, RanDat y Prv)
  • Podemos utilizar un nombre para todos los rangos utilizados al hacer un filtro avanzado.
  • Para obtener una copia del resultado del filtro hay que activar el filtro desde la hoja de destino, en este caso la hoja "datos".
  •  Una vez en esa hoja activamos el filtro avanzado. A veces, según donde estemos,Excel nos envía un mensaje indicando que no puede encontrar los rótulos de las columnas, aceptamos y aparece un desplegable que nos pide los rangos de los datos, del filtro, del destino de los datos, si queremos copiar los datos y si queremos registro único.  
  • No es necesario que el rango del filtro incluya todas las cabeceras, solo hay que incluir aquellas que participen en el filtro (con sus correspondientes valores).
  • Conviene leer la ayuda de excel sobre este tema, ya que soporta caracteres comodín y otras combinaciones ( >,>=,<,<=)




La entrada anterior del Blog esta pensada para ver algunas opciones de las funciones de búsqueda. En ella busqué el nombre de las distintas provincias mediante las funciones Buscar,BuscarV y Coincidir. Para obtener esos mismos nombres con el filtro avanzado podemos dejar el blanco la celda E2 (provincia) del filtro  o el carácter comodín *, activamos el filtro, como rango de datos ponemos el rango con nombre Prv, el rango del filtro sera en este caso Filtro!$E$1:$E$2 , como destino Datos!$A$1, señalamos que queremos copia y señalamos SOLO REGISTROS Únicos.





lunes, 13 de febrero de 2012

Items en una lista.Funciones de búsqueda BUSCAR,BUSCARV y COINCIDIR.

En principio todos pensamos que una función de búsqueda, para que funcione correctamente, debe devolvernos bien un valor exactamente igual al valor buscado, o bien un error. No es así, algunas opciones de las funciones de búsqueda en excel encuentran valores distintos a los buscados, no es ninguna novedad, ya lo he mencionado con anterioridad y la ayuda de excel   para estas funciones lo deja claro. Algunas opciones de las funciones BUSCAR, BUSCARV y COINCIDIR encuentran el mayor valor que es menor o igual al valor buscado (último valor anterior al valor buscado). La función COINCIDIR en una de sus opciones encuentra el menor valor que es mayor o igual al valor buscado (primer valor mayor que el valor buscado). 
Basándome en las opciones de estas funciones que no devuelven exactamente el valor buscado he preparado un par de trabajos que me permiten conocer, dentro de una lista, los distintos valores, que repetidos conforman la lista. Utilizo la lista de  los mas de 18000 pueblos de España. La información de cada pueblo esta compuesta por el nombre, coordenadas y el nombre de la provincia. En la columna nombre de  la provincia realizo la búsqueda de los distintos items que la componen.

Funciones utilizadas:

BUSCAR()
BUSCARV()
COINCIDIR()
CARACTER()
CODIGO()
LARGO()
DERECHA()
IZQUIERDA()

Variable o rango con nombre:

Prv=Pobl!$E:$E Se refiere a la columna con los nombres de las provincias (columna E de la hoja Pob)

En BusquedaItems3.xls busco los nombres de las provincias desde la última a la primera. En este caso al buscar encuentro el último valor anterior al valor buscado, lo que me obliga a buscar en orden descendente. En principio puedo buscar cualquier valor, algo encontraría, pero si quiero buscar hacia arriba no puedo sistematizar la búsqueda. Puedo conocer un valor, o el siguiente valor menor al último encontrado, pero si utilizo un algoritmo similar para valores mayores al último valor encontrado probablemente me conduzca a ese mismo valor.    Lo hago utilizando las funciones COINCIDIR (columnas A y B), BUSCARV (columnas C y D) y BUSCAR (columnas E y F). Lo hago así aprovechando que las funciones me van a devolver "el mayor valor que sea menor o igual al buscado". En este caso busco cadenas de distinta longitud, alfabéticas y ordenadas de modo ascendente. En este caso el máximo valor que puede tomar una cadena alfabética es una cadena compuesta por zetas. Por tanto la primera búsqueda que hago es =BUSCARV("ZZZ";Prv;VERDADERO) , que encuentra ZARAGOZA (entre los valores del ejemplo). ¿Cual es el valor anterior, en un ordenamiento alfabético, a ZARAGOZA? ¿como lo calculo de una manera genérica? Para este caso el valor anterior es sustituir el último carácter de la cadena por el carácter anterior a ese último carácter. Para ZARAGOZA el último carácter es A y el carácter anterior a A es @. Por tanto la cadena anterior a ZARAGOZA es ZARAGOZ@ . Esta trasformación la hago mediante la formula:

IZQUIERDA($A3;LARGO($A3)-1) & CARACTER(CODIGO(DERECHA($A3;1))-1)

Separo el último carácter de la cadena mediante la función DERECHA, hallo el código ASCII de ese carácter mediante la función CODIGO, le resto uno a ese código y reconstruyo el carácter mediante la función  CARACTER. El resto de la cadena la separo mediante las funciones IZQUIERDA y LARGO (Columnas B,D y F)
La siguiente (y sucesivas) búsquedas las hago mediante la siguiente fórmulas:
=INDICE(Prv;COINCIDIR($B3;Prv;1))
=BUSCARV($D3;Prv;VERDADERO)
=BUSCAR($F3;Prv)

En BusquedaItems2.xls busco los nombres de las provincias desde la primera a la última. Aquí solo utilizo (de las funciones de BÚSQUEDA) la función COINCIDIR(). En este caso la lista con los nombres está ordenada de modo descendente. En este caso buscamos el menor valor que sea mayor o igual al valor buscado. El primer valor buscado es la @. El valor encontrado es "A CORUÑA". En las sucesivas búsquedas buscamos un valor mayor que último valor encontrado. Como en este caso solo utilizamos caracteres alfabéticos el siguiente valor a buscar es la concatenación del valor encontrado con cualquier carácter menor o igual a la @. Utilizo @ en =A1&"@" y  busco la siguiente provincia mediante =INDICE(Prv;COINCIDIR($C1;Prv;-1))

jueves, 9 de febrero de 2012

Web cam.Pequeño y barato método de instalar una web cam de vigilancia.

Pequeño y barato método de instalar una web cam de vigilancia.
  1. Necesitamos una cámara web  con software de detección de movimiento (Logitech lo tiene). En preferencias seleccionamos el directorio de detección de movimiento.
  2. Necesitamos un servidor web y/o una utilidad que permita compartir ficheros. El navegador Opera tiene una utilidad, Opera unite, que entre otras cosas, tiene un servidor web y un compartidor de ficheros. Activamos ambos y como directorio para ambos ponemos el mismo directorio que hemos puesto para la detección de movimiento. Protegemos o no el acceso con clave (creo que funciona mejor sin clave, con acceso libre)
  3. El servidor,en este caso Opera unite, nos da una dirección (una para el servidor web y otra para compartir ficheros), a la que podemos acceder desde cualquier otro ordenador conectado a internet. 
  4. Podemos mejorar estos mínimos creando o modificando páginas html que reconozcan los ficheros creados al detectarse un movimiento.
No es que sea una solución perfecta, de hecho no lo es, pero permite tener un sistema de videovigilancia sin grandes alardes ni económicos ni técnicos.