martes, 13 de octubre de 2009

Un ejemplo de Filtro Avanzado en Excel.

Nos adentraremos, un poco al menos, en el mundo de los filtros avanzados. Son útiles, en especial, cuando estamos trabajando con bases de datos en Excel; si bien conviene recordar que Excel es una Hoja de cálculo y no un gestor de Bases de datos, como lo podría ser Access.
Supondremos que tenemos una Base de datos en nuestra hoja de cálculo, y que pretendemos aplicarles, para encontrar o filtrar algunos de sus registros, un filtro; en aquellas ocasiones en que los Autofiltros se quedan 'cortos' para lo que pretendemos obtener, aplicaremos los Filtros Avanzados, donde desaparecerán las restricciones o limitaciones que tenía el Autofiltro.
En primer lugar recordaremos desde donde activamos esta herramienta avanzada; si utilizamos Excel 2003 navegaremos por el Menú Datos > Filtro > Filtro avanzado; si nos decidimos por la versión Excel 2007 iremos al Menú Datos > Ordenar y Filtrar > Avanzadas.
Para poder aplicar esta herramienta avanzada debemos saber que además de nuestra Base de datos, necesitamos un rango de celdas a parte donde indicar cuáles son los criterios de filtro, es decir, dos rangos: Rango de la lista y Rango de criterios.


Otra ventaja que tenemos al aplicar este filtro avanzado es que podemos optar bien por filtrar sobre la misma base de datos, al igual que el Autofiltro, o bien realizar un copiado con los registros filtrados que cumplan las condiciones o criterios dados en el lugar que seleccionemos.

De nuestra base de datos necesitamos conocer qué registros cumplen la condición que el número de productos vendidos, campo 'unidades del producto', sea menor de 56 o que sea mayor de 79 y menor de 96 (trabajaremos en nuestro ejemplo con desigualdades estrictas para facilitar el trabajo).


Para poder aplicar nuestro 'Filtro Avanzado' construimos en otro lugar de la hoja de cálculo un rango de criterios, en el cual deberemos incluir la cabecera o título del campo sobre el que queremos aplicar el filtro. De forma similar a como aplicabamos las restricciones en la funciones de bases de datos, actuaremos con estos Filtros avanzados, es decir, teniendo presente que las condiciones dadas en una misma fila indicarán el cumplimiento simultáneo (i.e., equivale a un operador Y), y que las condiciones en distintas filas indicarán un cumplimiento adicional (i.e., equivale a un operador O).
En nuestro ejemplo, el rango de criterios quedará entonces:


Ejecutando la herramienta de Filtro avanzado, y seleccionando el Rango de la base de datos, y el Rango de criterios, así como la opción de Copiar el resultado a otro lugar:


obtendremos el siguiente resultado de registros que cumplen las condiciones dadas:


Debemos saber que el filtro avanzado, al igual que el Autofiltro, respeta el orden de los registros de la Base de datos original; que no existen restricciones o limitaciones en cuanto a número de condiciones sobre un mismo campo (recordemos que con el Autofiltro no podíamos aplicar más de dos condiciones al tiempo sobre un mismo campo). Y muy importante conocer la forma de aplicar estas distintas restricciones; siempre que las condiciones estén en la misma fila, independientemente del campo que sea, estamos forzando el cumplimiento simultáneo, mientras que si se encuentran en distintas filas forzamos todas las condiciones alternativamente.

Por ejemplo, podríamos haber necesitado extraer aquellos registros que cumplieran, además de la anterior condición, cuya fecha de operación es anterior al 31/12/2009, para lo que tendría que haber dado como rango de criterios:


es decir, filtramos aquellos registros que cumplan al tiempo que su número de productos vendidos sea mayor de 79 y menor de 96 y que además su fecha de operación sea anterior o igual al 31/12/2009, por otro lado buscamos también aquellos registros cuyo número de productos vendidos sea inferior a 56 y además su fecha de operación sea igual o menor a 31/12/2009.

109 comentarios:

  1. Amigo muy buenas necesito una gran ayuda suya, resulta que tengo una coleccion de datos de 4 columnas y 200 filas, la necesidad es que 1 de las columnas que representa fecha, se pueda filtrar pero mediante un rango, osea en una celda ubico fecha inicial y en otra fecha final, y mediante eso me filtre mi colexion de datos. Desde ya gracias por tu ayuda

    ResponderEliminar
  2. Hola CrIsToFeR,
    para hacer sencilla la solución, creo que lo mejor sería aplicar un Filtro Avanzado sobre tu colección de datos. Si sigues las indicaciones de este mismo post, podrás construir el filtro avanzado adecuado.
    Supongamos que tus columnas de datos son A:D con nommres de campo Column1(Fecha), Column2, Column3 y Column 4 y tantos registros como sean 8en tu caso 200).
    Puesto que deseas filtrar tus registros por fecha entre dos valores dados, lo primero que haría sería definir un rango de criterios 'dinámico', quiero decir, si en las celdas I1 y I2 tienes las fechas inicial y final, en un rango aparte F1:G2 creamos lo que será el rango de criterios para nuestro filtro avanzado; en el cual pondremos en la primera fila F1:G1 el nombre del campo a filtrar (Column1 = Fecha), en la celda F2 =">"&I1 y en la celda G2 ="<"&I2
    Sobre esto podrás aplicar la opción de filtro avanzado...
    Espero haber dado algo de luz a tu consulta.
    Slds

    ResponderEliminar
  3. Una pregunta... ¿En los filtros avanzados se necesitan mínimo tres filas vacías por encima de los datos para establecer los criterios de filtrado?
    Muchas gracias por la ayuda.

    ResponderEliminar
  4. Hola,
    si, es correcto. Debe existir un espacio mínimo (suele ser esas tres filas que comentas) entre el rango de criterios y la tabla de datos a filtrar para aplicar el Filtro Avanzado. el motivo es para que esta herramienta sepa distinguir entre criterios y datos. En todo caso, lo habitual es no ponerlos encima uno de otro, si no más bien al lado de la tabla de datos.
    Slds

    ResponderEliminar
  5. quiero aplicar filtros en una tabla dinamica

    ResponderEliminar
  6. Hola, buenos días
    prueba a leer esta entrada, quizá te sea útil:
    http://excelforo.blogspot.com/2010/08/tablas-dinamicas-ocultar-registros-sin.html
    Un saludo y gracias

    ResponderEliminar
  7. Estimados amigos, tengo una necesidad con una tablita, necesito crear una lista desplegable condicionada ejemplo

    DEPARTAMENTOS: SAN SALVADOR, LA UNION, SANTA ANA, LA LIBERTAD.

    (dentro de cada Departamento, tengo varios municipios)

    Ya hice la lista para que me aparezcan los departamentos, pero no se como condicionar cuando salga el departamento de La Libertad, me aparezcan en otra columna una lista desplegable de los municipios que corresponden a ese departamento es especifico.

    Si me ayudan se los agradecere mucho.

    ResponderEliminar
  8. Hola,
    para realizar una validación de celdas, en función de otra previamente validada, echa un vistazo a
    http://excelforo.blogspot.com/2010/02/validacion-de-celdas-con-lista-o-tabla.html
    o también a
    http://excelforo.blogspot.com/2009/10/ejemplo-de-doble-validacion.html
    En estos dos ejemplos se da solución a tu cuestión.
    Un saludo

    ResponderEliminar
  9. Hola:tengo un problema con una columna de numeros a la hora de hacer filtros.Estos numeros en realaidad responden a un criterio que paso a describir: supongamos que tengo el numero 123645 este numero para mi significaria segun el valor previo que le he dado el siguiente:1=prenda de señora. 2=invierno 36=abrigo 45=proveedor "pepito".De modo que puedo una serie de prendas de señora de invierno que son abrigos y que son de otros proveedores ademas de pepito.Igualmente podrian ser jerseis. o pantalones etc. y tendrian su codigo respectivo en los digitos centrales.
    A la hora de hacer un filtro avanzado para saber el numero de abrigos que tengo comprados de todos los proveedores que tenga no me permite hacer nada en la opcion avanzada que dice que empiece por... Comolo podria solucionar. Agradezco la ayuda.

    ResponderEliminar
  10. Hola,
    prueba a añadir como criterio o condición el comodín '?'. Por ejemplo, si quieres filtrar por el proveedor 'pepito', código 45, entonces pondrías ????45.
    Estamos suponiendo que todos los códigos tienen el mismo número de dígitos. Si no es así, habría que probar con *45
    Espero haberte ayudado.
    Slds

    ResponderEliminar
  11. Gracias excelforo por las respuesta pero ya lo habia intentado y no obtengo la respuesta adecuada y creo que debe ser por ser numeros ya que si antepongo o postpongo una letra a cada celda el filtro si funciona.La duda la tengo ahora para anteponer a las 5000 celdas un letra de modo cojunto y no de una en una.Hay alguna soolucion?. Gracias.

    ResponderEliminar
  12. Hola de nuevo...
    es algo raro lo que me comentas, ya que los criterios de filtro operan de igual forma.
    Para tu otra cuestión, añadir una letra (supongo por ejemplo al principio de cada número) podrías construir en una columna anexa a la tabla una fórmula con CONCATENAR; algo como CONCATENAR("a";A1) y arrastrar las 5000 filas (suponiendo los datos a filtrar estén en la columna A). Luego si quieres, puedes filtrar sobre esta nueva columna de datos, o bien copiar y pegar valores sobre la vieja columna sólo de números.
    Espero te sirva.
    Slds

    ResponderEliminar
  13. Gracias excelforo.Lo que me pasa es extraño aunque yo pensaba que al no ser caracteres alfanumericos sino solo numericos era por eso. Respecto a la otra solucion si pudiera explicarme un poco mas detallado lo que hay que hacer se lo agradeceria mucho(no soy experto en estas cosas ni en otras)¿donde colocar la funcion? como se hace los de arrastrar las 5000 filas?acaso es copiar y luego pegar?.Ya le digo solo manejo lo mas elemental de este programa.
    Gracias por toda la ayuda.

    ResponderEliminar
  14. Hola!!
    bien, por partes.
    Añadir una columna con la siguiente fórmula a la derecha (por ejemplo) de donde finalice tu tabla.
    Supongamos tu tabla de datos ocupa las columnas A:D, siendo la columna A donde se encuentran los códigos; y pongamos que en la fila 1 aparecen rótulos con nombres de campos.
    Bajo este supuesto escribimos en la columna E, en la celda E2, la función =CONCATENAR("a";A1); una vez validada esta primera celda, la copiamos y pegamos a esas 5000 restantes filas de esa columna E...
    Para trabajar sobre la 'nueva' base de datos seleccionamos todo el rango A:E y aplicamos los filtros oportunos, esta vez sobre nuestra columna E.
    Si tienes algún problema con las indicaciones, envíame un fichero a
    excelforo@gmail.com
    Un saludo

    ResponderEliminar
  15. Un ejemplo de filtro avanzado

    ResponderEliminar
    Respuestas
    1. Jonatan urregofebrero 02, 2012

      Amigo Aki arriba lo tiene.

      Eliminar
  16. hola soy nuevo y tengo una duda sobre una hoja de calculo donde anoto
    asientos contables de clientes y proveedores, es lo que se llama un fichero plano en excel y a la hora de anotar las facturas tanto de proveedores como de clientes el formato de hoja es el siguiente:

    Fecha Nº.fra. Base 4% IVA 4% Base 8% IVA 8% Base 18% IVA 18%

    estas serian las cabeceras y los datos se introducen en las celdas de abajo de las cabeceras, como puedo hacer para que si yo anoto en horizontal debajo de las cabeceras y es una factura con tres tipos de iva me coloque una linea en horizontal por cada tipo de iva de la misma factura y fecha.

    gracias y espero haberme explicado

    ResponderEliminar
    Respuestas
    1. Hola,
      si he entendido bien podrías emplear la herramienta subtotales; de tal forma que una vez incluidos todos los registros en la base de datos, ejecutaras hasta en tres veces la herramienta Subtotal; la primera de ellas sumando los campos Base 4% IVA 4%; después los campos Base 8% IVA 8% y por último Base 18% IVA 18%, siempre para cada cambio en el campo Nºfra.
      Asi conseguirías el efecto que buscas sin necesidad de macros, de manera rápida y sencilla en tres pasos.
      Espero te sirva.
      Slds

      Eliminar
  17. hola e gustaria que me ayudes tengo una tabla de datos de 500 filas y 5 columnas quiero filtararlas a otra ohjas dentro del mismo libro eso sii lo iso pero aca viene el problemac que si yo ingro un nuevo dato en esta tabla no me lo jala a la hoja dnede genere el filtro

    ResponderEliminar
    Respuestas
    1. Hola,
      es normal, ya que el filtro es algo estático, esto es, una vez ejecutado no actualiza nuevos valores...
      quizá te interese más trabajar con una tabla dinámica simulando el filtro de datos realizado, de esta manera te asegura que nuevos regitros en el origen, se mostrarán en el resultado filtrado.
      Slds

      Eliminar
  18. GRACIAS
    PERO ME PODRIAS DAR UN EJMEPLO POR FAVOR

    ResponderEliminar
  19. cordial saludo

    como hago para realizar un filtro, teniendo el rengo pero de la columna, es decir no los valores de la celda si no el valor de la columna,1,2...500, y realizar el filtro con otra hoja pero esta si con los valores de la celda

    ResponderEliminar
    Respuestas
    1. Hola,
      los filtros sólo son aplicables por columnas, es decir, con rótulos y registros por filas; daría igual qué tuvieras en la primera fila si rótulos o valores.
      Lo que no entiendo es la última parte de la cuestión, ¿realizar un filtro con otra hoja?. Los Autofiltros sólo se pueden ejecutar sobre la hoja con la que trabajas...
      Slds

      Eliminar
  20. holas buenos dias.
    quisiera saber si me podrian ayudar con un problemita q tengo me piden
    extraer d una base d datos

    tipo 2 o sea masculino

    como haria para extraer eso.
    muchas gracias.

    ResponderEliminar
    Respuestas
    1. Hola Paul,
      no das muchos datos de cómo tienes estructurada la base de datos, pero supongo que se tratará de extraer una serie de registros en base al elemento 2 (masculino) de un campo llamado 'Sexo'.
      Lo más facil sería aplicar sobre la base de datos un Autofiltro, para luego sobre el campo en cuestión desplegar sólo el elemento deseado.
      Espero haberte orientado en algo.
      Un saludo

      Eliminar
  21. Acabo de adquirir el Excel 2007, pero tengo problemas con el “autofiltro”, al intentar copiar y pegar "lo filtrado" me copia incluso lo q no esta filtrado... ¿sabrás como puedo resolver esa situación?. Con el excel antiguo trabaja muy bien.

    ResponderEliminar
    Respuestas
    1. Hola,
      la solución sería que mostraras en la Barra de herramientas de acceso rápido el botón para el Comando Seleccionar celdas visibles.
      Cuando tengas el filtro aplicado, marcas el área y presionas Seleccionar celdas visibles, copias y ya puedes pegar donde quieras...
      Slds

      Eliminar
  22. Hola,tengo un hoja de calculo en exel donde tengo 5 columnas y 1868 filas donde se repiten codigos que se ubican en la columna b, las descripsiones se ubican el lacolumna c, en la columna d su unidad del material y las de mas culumnas restantes solo tienen su titulo, ¿como podria hacer un registro unico con el filtro avanzado para lograr a si ver solo un codigo y descripsion, sin repetision?. Porfavor se le Agradeceria por tada su vida si logra ayudarnos... n.n

    ResponderEliminar
    Respuestas
    1. Hola,
      para conseguir los registros únicos, sin repetición, de tu base de datos de 5 columnas, empleando la herramienta de Sólo Registros únicos del Filtro avanzado, tendrías que seleccionar exclusivamente los campos 'código' y 'descripción' en el Rango de Lista, y luego, por ejemplo marcar la Acción de 'Copiar a otro lugar', y listo, te mostrará sólo esos dós campos con la combinación de registros sin repetición.
      Espero haberte orientado.
      Slds

      Eliminar
  23. Hola, me gustaría saber como realizarías el filtro si necesitaras por decir la fecha de operación entre agosto de 2009 y diciembre de 2009, llevo un rato tratando de hacer una avanzado con intervalo de fecha y nada que puedo, gracias

    ResponderEliminar
    Respuestas
    1. Hola,
      como quieres aplicar un criterio Y, tienes que poner en la misma línea ambas condiciones, así que pones en dos columnas el campo Fecha, y en una de ellas '>=01/08/2009' y en la otra '<=31/12/2009'.
      Parecido al ejemplo de esta entrada con el campo 'Unidades del producto' (última imagen).
      UN cordial saludo

      Eliminar
  24. Hola, ahora si me dio la fecha entre rangos como me explicaste, muchísimas gracias, llevaba todo el día varada en eso, saludos! :)

    ResponderEliminar
  25. hola, me aprovecho de tus conocimientos. tengo una base con estas columnas: Codigo, Nombre, Cantidad, Valores, Mercado(5 Mercados distintos). La base tiene 5000 lineas.Por lo que uso Filtro Avanzado y genero 5 hojas (una por cada Mercado).El problema que tengo es que Filtra perfecto, pero no puedo SUMAR las lineas de un mismo Codigo que se vende en un mismo Mercado ¿me entiendes?. ¿como podría sumar en el Filtro Avanzado?. Gracias

    ResponderEliminar
    Respuestas
    1. Hola Ivan_10,
      bueno, el asunto es que realmente la herramienta de Filtro (Autofiltro o Filtro avanzado) sólo está pensada para obtener un listado de registros que cumplan ciertas condiciones.
      Si pretendes obtener una suma acumulada para un mismo código de producto tendrás que aplicar una función SUMAR.SI.CONJUNTO aplicándo condiciones sobre el campo 'Código' y 'Mercado', o bien trabajar con tablas dinámicas.
      La otra opción, si por algún motivo sólo es posible trabajar con Filtros, sería aplicar una vez realizado el filtro, una SUMA a esos registros obtenidos.
      Un saludo

      Eliminar
  26. Desde ya, gracias por tu tiempo y respuesta.Use la opción Filtro avanzado, ya que, como mencione, de una "gran sabana de datos",hago 5 hojas individuales donde la abro en 5 hojas individuales, pero ya sumados los productos.¿me puedes sugerir una opcion?, ¿Me podrías guiar o ejemplificar tu frase: "la funcion SUMAR.SI.CONJUNTO aplicándo condiciones sobre el campo 'Código' y 'Mercado'". Gracias nuevamente

    ResponderEliminar
    Respuestas
    1. Me refería a que si sólo necesitas obtener la suma acumulada de toda esa 'gran sábana de datos', quizá te sea más útil emplear la función SUMAR.SI.CONJUNTO.
      Por ejemplo, quieres conocer el acumulado de la CANTIDAD, para un MERCADO y un CODIGO determinado; si es el caso, aplicas la función:
      =SUMAR.SI.CONJUNTO(rangoCANTIDAD; rangoMERCADO; "mercado1"; rangoCODIGO; "codigo25")
      siendo rangoCANTIDAD la columna donde se encuentre el campo CANTIDAD con sus 5000 líneas; igual con rangoMERCADO y rangoCODIGO, y "mercado1" y "código25" son los valores para esos campos sobre los que quieres obtener el acumulado...
      y todo sin necesidad de hacer filtros.
      Espero lo veas más claro... si no envíame el fichero a
      excelforo@gmail.com
      Un saludo

      Eliminar
  27. Estimado Excel Foro, que pasa si tengo el filtro avanzado ya creado en una base con una macro, si agrego mas datos a la macro como puedo modificarla sin ingresar a la programacion, tengo que grabar una macro nueva y al grabarla como puedo darle un rango de base de datos standar es decir, que pueda aumentar o disminuir datos???

    ResponderEliminar
    Respuestas
    1. Hola,
      para programación con rangos variables, tipo tablas, donde hay una continuidad de datos, merece la pena trabajar empleando la propiedad CurrentRegion.
      Por ejemplo, una tabla que comienza en A1 y no sabes donde termina, podrías referenciarla en tu macro como
      Range("A1").Currentregion

      Slds

      Eliminar
  28. Hola mi consulta es cuantos caracteres caen en una celda, por ejemplo necesito copiar el siguiente numero hacia abajo y que vaya cambiando el ultimo numero al darle un copiar.
    la idea es que al darle arrastrar la celda vaya cambiando
    309659281000041461
    309659281000041462

    ResponderEliminar
    Respuestas
    1. Hola!,
      Lo primero y fundamental que debemos saber a la hora de trabajar con Excel es que la precisión en cuanto a numéros es de 15 dígitos, por lo que lo trabajar con un número tan alto como el que planteas es complicado con Excel.
      Sin embargo, si esa secuencia de valores 309659281000041461, 309659281000041462, etc es algo visual,y no necesitas trabajar sobre esos datos puedes optar por un formato de celda personalizado tipo: "3096592810000"0, con lo que podrás incluir los últimos valores de los dígitos 41461, 41462, etc y visualizarlos con la máscara completa... claro está que pierdes la integridad del valor.
      Espero te sirva.
      Slds

      Eliminar
  29. muchas gracias

    ResponderEliminar
  30. Hola
    una consulta?
    tengo mis datos en 5 colunna: 1fecha, 2Kg ,3Propietario, 4Corral y 5 Nro de caravana, de las 5 columna tengo que buscar cuando se registra salida por Nro e caravana, y quisiera saber algun metodo mas rapido, por que estoy haciendo actualmete filtro y despues copio imprimo y busco por nro de carbana.

    aguardo su ayuda

    desde ya gracias

    ResponderEliminar
    Respuestas
    1. Hola,
      podrías aplicar un Filtro avanzado que te permite copiar el resultado del filtro directamente donde quieras.
      Para ello necesitas tener un rango donde colocar los criterios de filtro (Nro y Caravana), que podrás ir cambiando según necesites...
      Slds

      Eliminar
  31. Hola! Una pregunta no me deja filtrar a otra hoja dentro del mismo libro. Me dice que solo se puede a la hoja activa. Hasta intente asignando nombre al rango a donde quiero copiarlo, pero no me deja...
    Gracias!

    ResponderEliminar
    Respuestas
    1. Hola,
      correcto. Para aplicar el filtro avanzado desde otra hoja, debes activar la herramienta en la hoja destino, no desde donde estén los datos.
      Si permite seleccionar rango de datos y de criterios en otra hoja, pero no Copiar datos en.
      Slds

      Eliminar
  32. Hola,
    Tengo una lista de datos (Rango A:D) con encabezados (Fecha,Factura,Importe,Referencia)y una macro que funciona como un filtro avanzado. Estoy intentado filtrar los datos en funcion de un criterio de fechas (desde-hasta) y para ello he seguido los comentarios de tus posts (08/01/11 y 01/07/12) pero no consigo que funcione. ¿Puedes sugerirme alguna alternativa?
    Gracias.

    ResponderEliminar
    Respuestas
    1. Hola,
      no me queda claro qué no te funciona, ¿los criterios o que incorpore los nuevos registros?.
      Debo entender que lo que no te funciona es la agregación al rango de los nuevos registros, si es así, y trabajas con Excel 2007/2010, podrías convertir tu rango en una tabla, y en tu código indicar el rango origen como Range(Tabla1).
      Es difícil concretar más, lo siento.
      Slds

      Eliminar
  33. Intentaré ser más concreto:
    Si programo la macro como un AutoFiltro, funciona el filtrado de fechas pero no me permite realizar más filtrados:

    Sub filter()
    Dim desde As Long, hasta As Long
    desde = Range("A2")
    hasta = Range("A3")
    Range("data").AutoFilter field:=1, Criteria1:=">=" & desde, _
    Operator:=xlAnd, Criteria2:="<=" & hasta
    End Sub

    Y si programo la macro como un Filtro Avanzado, me permite realizar filtrados simultáneos pero no por fechas:

    Sub filter()
    Range("data").AdvancedFilter Action:=xlFilterCopy, CriteriaRange:= _
    Range("A1:D3"), CopyToRange:=Range("A6:D6"), Unique:=False
    End Sub

    ¿Se puede combinar un Filtro Avanzado con un AutoFiltro?

    Gracias anticipadas.

    ResponderEliminar
    Respuestas
    1. Hola,
      no es posible combinar filtro avanzado y autofiltro, pero si es posible trabajar con el filtro avanzado como si fuera un autofiltro.
      Respecto al código
      Sub filter()
      Range("data").AdvancedFilter Action:=xlFilterCopy, CriteriaRange:= _
      Range("A1:D3"), CopyToRange:=Range("A6"), Unique:=False
      End Sub

      parece correcto, con la mínima corrección del CopyToRange.
      Si en el rango de criterios A1:D3 están correctamente definidas las condiciones funciona perfectamente...
      Revisa que tus condiciones cumplen con las formas que se requieren... echa un vistazo a este mismo post del blog.
      Slds

      Eliminar
    2. Hola de nuevo,
      Con la modificación de CopyToRange:=("A6") solo me filtra los datos de la columna A.
      Por lo demás, el problema sigue siendo que si en los criterios pongo p.e. A2=2-Abr-12 y en A3=5-Abr-12 filtra los datos de los días 2-Abr y 5-Abr pero no los días intermedios (3 y 4).
      ¿Como sería el código para que el Filtro Avanzado trabajase como si fuera un AutoFiltro?
      Saludos.

      Eliminar
    3. Ummm...
      CopyToRange indica la celda a partir de la cual empieza a pegar el resultado del filtro.
      Si has leído algo del post, te habrás dado cuenta que para aplicar el criterio entre dos datos, tienes que indicarlo con los signos de mayor y menor, en tu caso:
      A2: >=2-Abr-12 y en A3: <=5-Abr-12
      Slds

      Eliminar
    4. ¿Como puedo incluir en el código del Filtro Avanzado los criterios ">=" y "<=" para que la selección sea automática, como un AutoFiltro?
      Gracias

      Eliminar
    5. No puedes, en el código del filtro avanzado sólo puedes incluir el rango de criterios en la hoja de cálculo.
      Tienes que centrarte en una de las dos herramientas, o Filtro avanzado o Autofiltro, las dos a la vez no es posible.

      Eliminar
    6. Ummm, he encontrado una manera muy simple de que funcione:

      Fechadesde = Range("A2")
      Fechahasta = Range("B2")
      Range("A2") = ">=" & Fechadesde
      Range("B2") = "<=" & Fechahasta
      Range("datos").AdvancedFilter Action:=xlFilterCopy, CriteriaRange:=Range( _
      "A1:D2"), CopyToRange:=Range("A6:D6"), Unique:=False
      End Sub

      ¿Como se puede hacer que la macro actualice los datos cada vez que modifique un criterio sin necesidad del botón comando?

      Gracias por tu consejo!

      Eliminar
    7. Hola,
      incluye tu código en un procedimiento con evento _change:
      Private Sub Worksheet_Change(ByVal Target As Range)
      'tu código
      End Sub
      incluido no en un módulu, si no en la hoja que sea dentro del explorador de proyectos.
      Slds

      Eliminar
    8. Hola de nuevo,
      Ahora tengo el código de la siguiente manera:

      Private Sub Worksheet_Change(ByVal Target As Range)
      If Not Intersect(Target, Range("A2:E2")) Is Nothing Then
      Fechadesde = Range("A2")
      Fechahasta = Range("B2")
      Range("H2") = ">=" & Fechadesde
      Range("I2") = "<=" & Fechahasta
      Range("Datos").AdvancedFilter Action:=xlFilterCopy, CriteriaRange:= _
      Range("H1:L2"), CopyToRange:=Range("A6:D6"), Unique:=False
      End Sub

      Los criterios son varios (Fecha/Factura/Importe/Nombre) y tengo el problema de que la macro realiza el filtrado con el criterio Fecha (desde/hasta) y actualiza los datos al realizar cualquier modificación, pero no permite filtrar más que este criterio, pues si a Fecha le añado otro criterio no lo tiene en cuenta y si busco con un criterio que no incluya Fecha tampoco funciona.
      ¿Que se puede hacer para que el filtrado se permita cualquiera de los criterios, por separado (Fecha, Factura, Nombre, etc.) o en combinación (Fecha desde-hasta, Fecha-Factura, Factura-Nombre, etc.)?

      Gracias.

      Eliminar
    9. Hola, como te he indicado en comentarios anteriores, tu problema es entender el funcionamiento de los filtros.
      Que es:
      criterios en al misma fila, implica la condición Y (es decir, se cumplen al tiempo).
      criterios en diferentes filas implica la condición O (esto es, se cumplen además del resto de criterios).

      Si quieres que se verifiquen otras condiciones además de la de las fechas, deberás añadir más filas con condiciones (según los campos Factua, Nombre, etc) en el rango de criterios.
      Slds

      Eliminar
    10. Para entenderlo mejor, ¿me puedes facilitar un ejemplo?

      Eliminar
    11. ¿Has leído esta entrada???

      Eliminar
  34. ¿se puede hacer el filtro en una hoja diferente?

    ResponderEliminar
    Respuestas
    1. Hola, que tal?
      si es posible, para ello debes ejecutar la herramienta filtro avanzado desde la hoja destino, no desde la que tenga la base de datos.
      Slds

      Eliminar
  35. Hola,
    Tengo una tabla con 7 columnas referentes a Codigo, Artículo, Precio, Proveedor, F. Pedido, F. Entrega y Cantidad. Me piden utilizar autofiltro para obtener solo artículos, fecha de pedido y cantidad correspondientes a dos proveedores llamados Gemesa y Papelsa... lo he hecho pero me salen para todas las columnas y sólo quiero los campos mencionados. A ver si me podéis ayudar. Gracias

    ResponderEliminar
    Respuestas
    1. Hola,
      con el Autofiltro sólo es posible filtrar, según condiciones, por filas; si quieres que muestre sólo esos campos, yo apostaría por ocultar el resto de columnas que no quieres ver.
      No hay otra opción.

      Slds

      Eliminar
  36. Antes que nada, felicitarte por tu blog.

    Tengo un problema con la condición en el filtro avanzado. Quiero que un de los criterios para filtrar, sea un valor superior a un valor en otra celda. Ejemplo:
    En la celda D6 tengo un valor numérico producto de una formula, y quiero que uno de los criterios de filtrado avanzado sean valores superiores a la celda D6. He intentado poniendo en la celda de filtrado algo así:
    =">"&D6

    Pero al ejecutar el filtrado no devuelve ningún dato. Si escribo en la celda de filtrado el valor de la celda D6 manualmente, si se ejecuta correctamente. ¿Cuál crees que pueda ser el error?

    Un saludo,

    ResponderEliminar
    Respuestas
    1. Hola, muchas gracias!!
      Bueno, la forma en que has construido el valor de la celda parece correcto.
      En primer lugar me aseguraría (supongo es así) que la celda superior a =">"&D6 aparece con el rótulo correspondiente. Si es así, lo segundo que miraría es qué tipo de formato tienes los elementos de ese campo en la Tabla, en ocasiones, podemos pensar que estamos trabajando con valores numéricos, pero sin embargo, el formato que tienen es de tipo Texto y dar problemas como el que me planteas.

      Confirma estas dos cosillas, y si te sigue dando el mismo problema, envíame el fichero a
      excelforo@gmail.com
      Slds

      Eliminar
  37. He revisado tus sugerencias, y continua el problema. Te envío el archivo.
    Gracias

    ResponderEliminar
    Respuestas
    1. OK,
      lo estoy revisando, pero el problema está en la macro, ya que si lo ejecutas 'manualmente' funciona bien.
      Te digo algo.
      Slds

      Eliminar
  38. He utilizado tu macro, y funciona perfectamente ¡¡¡.
    Muchas gracias por tu colaboración y tiempo.

    Esta claro que dominas este tema … yo nunca hubiese encontrado el problema en la interpretación de comas y puntos.
    Saludos,

    ResponderEliminar
  39. hola,
    tengo una tabla con estos campos EJEMPLO
    poblacion,hectareas,nombre poblacion,fecha evento,descripcion evento
    y en una poblacion ocurren varios eventos el mismo dia,EJEMPLO FECHA:10/12/2031 DESCRIPCION:concierto, FECHA:10/12/2031 DESCRIPCION:cabalgata, como haria para que estos me aparecieran separados mediante algun filtro o funcion buscarv o validacion de datos
    de antemano muchas saludos

    ResponderEliminar
    Respuestas
    1. Hola,
      no acabo de comprender adecuadamente la composición de tu problema, necesitaría concretar más la estructura de datos, ya que no veo claro si esa variedad de registros para una misma población se da en diferentes registros (líneas de la tabla)...
      ¿Podrías enviarme un fichero con el ejemplo a excelforo@gmail.com? y si es posible cómo lo querrías...
      Un saludo

      Eliminar
  40. Hola ExcelForo!
    Me gustaría conseguir mediante un filtro avanzado los 10 mejores resultados de una serie de datos que están en una columna, ¿qué tendría que poner en criterios?

    Gracias y felicidades por la web!

    Luo

    ResponderEliminar
    Respuestas
    1. Hola Luo, muchas gracias!
      entiendo que son resultados numéricos. Suponiendo el rango sea A2:A8, entonces en el rango de criterios añadiríamos la fórmula (por ejemplo en C2):
      =A2>=K.ESIMO.MAYOR($A$2:$A$8;3)

      Recuerda que en este caso debes seleccionar como rango de criterios como C1:C2).

      Cordiales saludos

      Eliminar
    2. Buenas!
      Gracias por la respuesta, pero lo he intentado y me sigue sin salir.. verás, la cosa es que la columna con los datos está en otra hoja (llamada Resultados), entonces yo pongo como condición una cosa así:
      Resultados!C7>K.ESIMO.MAYOR(Resultados!C7:D7;9)
      ¿En qué puede fallar?

      Gracias ;)

      Luo

      Eliminar
    3. Hola Luo,
      para aplicar un filtro avanzado en hojas diferentes tienes que ejecutarlo todo desde la hoja destino, no es tanto el problema de la fórmula, si no que estás ejecutando el filtro en la hoja origen.
      Slds

      Eliminar
    4. Si, me sitúo en la hoja de destino y ahí aplico la fórmula que te puse como criterio.
      Verás, te concreto más:
      · En la hoja destino escribo en unas celdas (A64:A65) las condiciones:
      NOTA MEDIA (cabecera)
      Resultados!C7>K.ESIMO.MAYOR(Resultados!C7:D7;9)

      · Celdas A67:B67 pongo las cabeceras de la hoja 'Resultados': Apellidos y Nombre (que es lo que quiero que se muestre)

      · Aplico filtro avanzado:
      1)Rango de la lista: el nombre que le di a la tabla de la hoja 'Resultados'.
      2)Rango de criterios: $A$64:$A$65
      3)Copiar a: $A$67:$B$67

      Gracias,
      Luo

      Eliminar
    5. ¿Me envías mejor el fichero a excelforo@gmail.com?

      Eliminar
  41. Me ha encantado el tutorial. SUPER util, pero tengo un problema.
    Me funciona perfectamente excepto con las fechas.
    Tengo una columna con las fecha y hora, y tengo que filtrar por dia.
    He generado un criterio=>que una fecha y otro <fecha. El filtro funciona bien, pero cuando lo intento automatizar con macro no funciona. De hecho cada vez me da un problema diferente...Ayuda pleaseee!!










    ResponderEliminar
    Respuestas
    1. Hola, muchas gracias!
      Trabajar con macros los filtros avanzados, como has podido ver, es muy delicado...
      Me imagino en tu código tendrás algo de este estilo:
      Range("Datos").AdvancedFilter Action:=xlFilterCopy, CriteriaRange:= _
      Range("H1:L2"), CopyToRange:=Range("A6:D6"), Unique:=False

      cambialo por
      Range("Datos").AdvancedFilter Action:=xlFilterCopy, CriteriaRange:= _
      Range("H1:L2"), CopyToRange:=Range("A6"), Unique:=False

      en principio no debería fallar, ojo con las fechas...mejor trabaja con la función FECHA(año;mes;día).
      Slds cordiales

      Eliminar
  42. Como hago para filtrar una serie de datos (servicios con sus respectivas características) que están en una misma columna, de tal manera que en el filtro aparezcan los servicios y de ahí se desprendan las características, como por ejemplo cuando uno filtra fechas, que aparece el año y de ahí se desprenden los meses.

    ResponderEliminar
    Respuestas
    1. Hola, buenas tardes, ¿cómo estás?.
      Lo que comentas de los filtros de fechas es una funcionalidad estándar de Excel y es exclusiva para las fechas...
      Para aplicarlo a tu caso, en esta herramienta, tendrías que definir el árbol con sus ramas par que aparecieran como quieres, y esto es imposible.
      Lo siento.
      Saludos cordiales

      Eliminar
  43. Muchas gracias por tu respuesta.

    ResponderEliminar
  44. Hola, tengo una matriz que crece continuamente y debo filtrarla con diferentes criterio, al utilizar filtro avanzado me pide el "rango de lista", pero como este crece no se como definirlo. Ej $A$1:$K$n , donde " n " es la variable creciente, es porque se van agregando registros.

    ResponderEliminar
    Respuestas
    1. Hola Martín,
      para estos casos de rango variable lo mejor es trabajar sobre una Tabla, es decir, crear con el rango $A$1:$K$10 (el que tengas en este momento) una Tabla, llámala como quieras, por ejemplo 'Datos', y luego usa ese nombre en el rango de Lista... de esta manera el filtro se adapatará al número de registros que tengas en cada momento.
      Slds

      Eliminar
  45. tengo una base de datos en excel,nombres, telefonos me piden hallar que el quinto caracter del telefono sea 8 con filtro avanzado como elaboro mi criterio. gracias

    ResponderEliminar
    Respuestas
    1. Hola, que tal?
      debes emplear los caracteres comodines:
      el ? para representar un único caracter
      y el * para representar un número indefinido de caracteres

      Si quieres que el quinto caracter sea un 8, tendrás que aplicar sobre el campo que sea el criterio:
      ????8*
      Slds

      Eliminar
  46. mi pregunta es la siguiente, tengo varias tablas dinámicas con el mismo filtro de tabla dinámica. necesito que al digitar el valor del filtro, automáticamente se cambie en las otras tablas. es eso posible. Seria com asignarle al filtro de la tabla dinámica una formula

    ResponderEliminar
    Respuestas
    1. Hola,
      sería posible aplicando macros, de tal forma que al seleccionar y aplicar un elemento (diltrando) sobre un campo de una de las TD, la macro recoja dicho cambio y lo aplique al resto de TD...
      Slds

      Eliminar
  47. Hola Ismael,
    Yo otra vez...bueno con respecto a este tema me surgió una idea hace un tiempo mientras estaba en el trabajo, y se trata de realizar una especie de filtro avanzado que vaya filtrando la información mientra escribe el criterio y que vaya reduciendo simultáneamente mientras terminas de escribir el criterio de filtro, he visto este tipo de consultas instantáneas en sql y plataformas de visual studio...sabes de algún método aplicado en excel para el caso que te comento?

    Saludos.

    ResponderEliminar
    Respuestas
    1. Hola Yuri!!
      el problema que veo, es sólo mi opinión, es que en Excel neceistas validar la celda (presionando Enter o similar) para que admita el valor introducido.. por lo que no creo sea posible tal planteamiento desde la hoja de cálculo.
      Quizá desde un UserForm o un control ActiveX se pudiera actuar de manera parecida... pero supongo habría que filtrar siempre sobre el mismo campo, con un mismo tipo de datos (texto, fecha, numérico...)
      Slds

      Eliminar
    2. Hola Ismael,
      Te comentaba de esto porque estoy pensando en hacer una especie de pequeño sistema de facturación y control de inventario y a veces es necesario hacer consultas rápidas, así que me di la libertad de enviarte un archivo a tu correo de gmail, estuve pensando y consultando la misma ayuda de office y la verdad no sé ni cómo llegué a hacer eso pero a ver si le das una ojeada porque salió algo interesante.
      Me das tus observaciones luego.
      Saludos

      Eliminar
    3. Hola Yuri...
      la idea es la misma que tenía en la cabeza.
      Realmente lo que haces con esa macro (a mí me falla bastante, a tí no?), es aplicar un filtro avanzado cada vez que cambias el texto en el TextBox... es decir engañas al ojo del usuario con el efecto que según escribes en el TextBox se muestra en el ListBox o en la hoja de cálculo el refresco de datos.

      Pero con un par de líneas más, quedaría 'resultón'.
      Podrías añadir al principio y al final
      Application.ScreenUpdating = False
      ....
      Application.ScreenUpdating = True

      Podrías borrar el rango cada vez que escribas algo nuevo, justo antes de que vuelvas a aplicar el Filtro
      Sheets("Hoja1").Range("E20", Range("G" & Rows.Count).End(xlUp)).Clear

      Lo del ListBox no entiendo para qué sirve, qué utilidad le das....

      Está muy bien
      ;-)

      Slds

      Eliminar
  48. malisimo el foro, no entendi nada de nada, prefiero yahoo respuestas.

    ResponderEliminar
  49. necesito ayuda:

    A1: AD
    A2: AD
    A3: A
    A4: A
    A5: D
    A6: AD

    LUEGO FILTRO AD, PARA CAMBIARLES DE NOMBRE A AGUA Y DESAGUE, LOS DESPLAZO, Y EL A3, A4 Y A5 SUFREN LAS MODIFICACIONES, CUANDO YO SOLO QUIERO QUE LAS CELDAS FILTRADAS SE CAMBIEN, ES UN EJEMPLO NADA MAS, PORQUE LO QUE REALMENTE QUIERO ES DESPLAZAR FECHAS, PERO ESTAS SE COPIAN AUTOMATICAMENTE EN LAS CELDAS OCULTAS DE LOS FILTROS, POR FAVOR ALGUIEN ME PUEDE AYUDAR CON ESTE PROBLEMA M I CORREO ES JR2910@HOTMAIL.COM

    ResponderEliminar
    Respuestas
    1. Hola,
      para evitar esto emplea, una vez aplicado el filtro, la herramienta Seleccionar celdas visibles
      http://excelforo.blogspot.com.es/2011/09/la-herramienta-seleccionar-celdas.html
      Slds

      Eliminar
  50. Quiero filtrar registros cuya penultima letra del nombre sea la letra "O", el ejercicio dice

    "mostrar las personas nacidas en lima, que tengan hijos y que el penultimo caracter de su apellidos sea la O!

    ResponderEliminar
    Respuestas
    1. Hola que tal Amparo!, espero te encuentres bien.
      Para aplicar el filtro que indicas utiliza los comodines, en tu caso sería:
      *O?
      es decir caracteres indeterminados pero el segundo por la derecha debe ser O (el penúltimo caracter).

      Un cordial saludo

      Eliminar
  51. Hola Ismael:
    Resulta que tengo un problema quiero hacer un filtro "no autofiltro" que sea macro Tengo
    en la columna B6 hasta B3000 con fechas en la hoja2 y las demas columnas datos referentes a las fechas son fechas unicas.
    En la hoja1 quiero escribir en la celda L7 una fecha y me filtre la fecha y traiga los datos
    de la columna EJ: C , H , F , I , K de la hoja2
    Como hago para que traiga el dato de la columna C y lo pege en la celda B:17 de la hoja1 y de la columna F traiga el dato y lo pege en la celda B20 de la hoja1
    Lo que busco es hacer que yo le ponga en donde quiera que se pegen los datos filtrados en las celdas que desee
    Muchas gracias de antemano

    ResponderEliminar
  52. Hola,
    mi recomendación sería que grabaras con el asistente de grabación el empleo de un Filtro avanzado, para luego personalizar las variables...

    La ventaja del filtro avanzado es que puedes copiar donde quieras el resultado del filtro aplicado, además de los campos que consideres... (pero siempre contiguos).

    Otras opciones (para tu caso quizá sirva) sería hacer un recorrido don un bucle FOR....NEXT por el rango B6:B3000 que vaya evaluando cada Fecha con u nIF.. THEN.. y cuando cumpla la condición copie y pegue donde tu le digas.

    Espero haberte orientado.
    Saludos cordiales

    ResponderEliminar
  53. Hola:
    Tengo una planilla en la cual tengo la nomina de alumnos de un colegio con sus respectivas asignaturas y docentes. Cada alumno esta identificado con un codigo unico, al igual que cada asignatura tiene un codigo que es unico. en otra hoja, tengo el listado de asignaturas,(con sus codigos) y los horarios de dichas asiganturas (algunas de ellas tienen clases mas de una vez a la semana, por lo que aparecen repetidas tantas veces como clases hay en la semana). Lo que pretendo hacer es una macro que me permita ingresar el codigo del alumno a partir del cual puedo con filro avanzado buscar sus asignaturas, y en base a ese resultado puedo aplicar otro filtro avanzado y buscar el horario de esas asignaturas......el problema es que no todos los alumnos tienen la misma cantidad de asignaturas por lo que no se como definir el rango de criterios para hacer el 2do filtro.....manualmente funciona, pero para hacer la macro ¿que coloco el rango de criterio del 2do filtro, si no se cuantas asignaturas tendrá el alumno?....he probado y si en el rango es mayor al numero de asignaturas del alumno, me tira todo el listado de horarios....¿me puedes ayudar? gracias

    ResponderEliminar
    Respuestas
    1. Hola,
      no sé si comprendí bien (y quizá necesitaría saber cuál y como construyes los filtros).. pero para indicar como condición a ese 2do filtro puedes insertar una función de conteo (CONTAR.SI.CONJUNTO), que te indique el número de horas por asignatura y alumno...
      que me parece es lo que necesitas.
      Espero haberte orientado.
      Slds

      Eliminar
  54. Excelente Foro!!!, con algo tan simple y bien explicado como presentaste lo de poner criterios ordenados en diferente columna pero en la misma fila con el mismo encabezado para lograr hacer un filtro con lógica Boleana ("Y") y en diferente fila ("O") para los filtros avanzados me ayudo enormemente.

    Gracias de nuevo

    ResponderEliminar
  55. Buenos días, tengo un inconveniente con una hoja de calculo la cual quiero coger los valores superiores a cero, pero en el momento de realizar el filtro avanzado me esconde todas las celdas, que puede ser ??
    gracias

    ResponderEliminar
    Respuestas
    1. Hola,
      lo primero sería comprobar que no es un problema del formato de esos valores.. podría ser que fueran todos valores positivos.. pero por algún tipo de formato parecieran negativos!!.

      Otro caso, quizá más probable es que a la hora de aplicar el Filtro (supongo avanzado) estés tomando alguna fila vacía en el rango de criterios.. lo que te llevaría a mostrar todos los registros (positivos o negativos)...

      Es difícil decir sin tener delante el ejemplo..
      Si no es ninguno de los casos comentados puedes enviarme el ejemplo a
      excelforo@gmail.com

      Un saludo

      Eliminar
  56. ok, ya te envío al correo.
    te agradezco

    ResponderEliminar
  57. tu correo rebota, por favor me regalas otro. gracias.

    ResponderEliminar
    Respuestas
    1. ??
      excelforo@gmail.com
      es el correo correcto... recibo unos cuantos a diario sin probelma..
      lo siento pero no hay otro
      Prueba de nuevo, quizá sea un problema puntual

      Eliminar

Nota: solo los miembros de este blog pueden publicar comentarios.