Funciones utilizadas:
Espacios()
EsTexto()
Rangos con nombre:
Modelo3=Modelos!$A$1:$D$61
Filtro1=Filtro!$A$1:$F$2
Filtro2=Filtro!$A$8:$F$9
Destino=Salida!$A$1:$D$1
La semana pasada estuve ayudando a mi mujer a preparar un filtro que le daba problemas. Aparentemente el filtro estaba bien hecho, pero no funcionaba.
Los datos provenían de la informática corporativa de su empresa, un fichero de texto separado por punto y coma. La importación del fichero, como no podía ser de otra manera, se realizó sin ningún tipo de problemas.
El filtro es un filtro atípico, hay que filtrar unos determinados códigos, es decir hay que quedarse con aquellos códigos que son distintos a una lista de códigos.
Al cabo de un rato de trastear con el fichero vimos que la columna con los códigos a filtrar incluía una serie de espacios en blanco (no visibles) después del código, que eran los que hacían que el filtro no funcionase.
Como, evidentemente, no puedo subir a la red un fichero con los datos reales de la empresa, he preparado un fichero, a base de fechas, emulando el problema encontrado (y encontrando otro). Los datos son una sola columna (Columna A de la hoja Modelos) con fechas en formato AAAAMMDD seguidas de unos espacios en blanco. En el ejemplo compruebo la existencia o no de espacios indeseados concatenando por delante y por detrás un asterisco (columna B). En la columna C, mediante la función ESPACIOS() elimino esos espacios no deseados. En la columna D compruebo que esos espacios han desaparecido. Hecho esto preparé un filtro (filtro2) para no seleccionar determinados domingos, pero, el filtro no funcionaba, no filtraba esos domingos.
¿Qué le sucede a este filtro? Muy sencillo, los datos de la columna C son texto y los datos del filtro preparado, tal cual lo preparé (hoja filtro rango A8:F9) son numéricos. La existencia de esta diferencia la compruebo en E2 (=C2=20120101, que da falso) y en F2 (=C2="20120101", que da verdadero). En E3 (=ESTEXTO(C2)) pregunto expresamente si es texto y el resultado es verdadero.
En el fichero original, el de mi esposa, los códigos son alfanuméricos, pueden ser numéricos puros, alfabéticos puros o una una mezcla de ambos. Además, algún código puede que se haya retocado, o incluso incluido, a mano una vez convertido a excel el fichero de texto original. Por tanto nadie nos garantiza que todos los elementos de la columna con los códigos sean texto. Para no complicarme mucho la vida fuerzo a que todos los códigos sean texto concatenando un * por delante y otro por detrás (columna D de la hoja modelos) y modifico el filtro (filtro1) para incluir asteriscos (hoja Filtro, rango A1:F2). No he profundizado en mejorar este tema, probablemente se pueda, pero de esta manera funciona correctamente.