martes, 9 de febrero de 2010

Ordenación y Filtro con Tabla dinámica.

Supongamos que disponemos de un listado de alumnos, con los siguientes campos: 'Orden', 'Nombre', 'Apellido' y 'Calificación'.
Necesitamos obtener un listado con los cinco mejores alumnos respecto a su calificación obtenida; para ello aplicaremos los criterios de orden y filtro de las tablas dinámicas.
Disponemos del siguiente listado de alumnos:


Lo primero que haremos será construir nuestra tabla dinámica, para lo que seleccionaremos el rango de nuestra base de datos A1:D11; deberemos mandar, del Listado de campos el campo 'Nombre' y 'Apellido' al Área de rótulos de filas y el campo 'Calificación' al Área de valores.
Obtendremos practicamente el mismo listado del que partimos, pero esto es sólo el comienzo; le damos el primer formato quitándole el Subtotal al campo 'Nombre' (botón derecho del ratón sobre el campo 'Nombre' y desmarcamos Subtotal "Nombre"). Nos quedará entonces:


Ya casi acabamos, con el botón derecho del ratón en el campo 'Nombre', buscamos Filtro > Los 10 mejores...


activando la siguiente ventana diálogo, que configuraremos como sigue:
Seleccionaremos los 5 elementos superiores del campo Calificación


Para terminar sólo nos queda ordenar a los cinco alumnos de mayor a menor 'Calificación'. Repetimos la operación, con el botón derecho del ratón en el campo 'Nombre', buscamos Ordenar > Más opciones de ordenación...
ordenaremos según el criterio de las 'Calificaciones' en sentido descendente (de mayor a menor, i.e., de Z a A)


El resultado final obtenido es el deseado, disponemos de un listado con 'Nombres' y 'Apellidos' de los alumnos con las mejores 'Calificaciones'.

15 comentarios:

  1. mil gracias!!! me tenia loco buscando esta opcion en excel 2010. buen blog.

    ResponderEliminar
  2. Estimado Ismael,
    Estoy tratando de filtrar los valores de una tabla dinámica y estoy usando este código:

    Sheets("Resumen").PivotTables("Movimientos").PivotFields("Cód. Item")
    .CurrentPage = Hoja1.Range("J2")

    para que el filtro dependa de la celda J2 pero sale el error 1004 y no sé que puede estar mal luego usé este código:

    With Sheets("Resumen").PivotTables("Movimientos").PivotFields("Cód. Item")
    For i = 1 To .PivotItems.Count
    .PivotItems(i).Visible = False
    .PivotItems(NumCod).Visible = True
    Next i
    End With

    Para que haga invisible todos los ítems salvo el que necesito, y sí calcula pero me sigue apareciendo un error. A ver si podrías darme una mano.
    Gracias anticipadas!!

    ResponderEliminar
    Respuestas
    1. Hola Yuri,
      entiendo que recorres todos los elemtnos del campo "Cód. Item" para ocultarlos, y que sólo haces visible el elemento NumCod.. que no sé si es una variable que previamente has creado para identificar cuál quieres ver o que el elemento se llama así...
      En cualquier caso saca fuera del bucle For la línea
      .PivotItems(NumCod).Visible = True

      En todo caso, podría darse la situación de tener un elemento (en blanco) sin valor.. esto suele dar problemas.

      Slds

      Eliminar
    2. Hola Ismael,
      Claro, numcod es de tipo "string" y apunta a la celda "J2", los errores se pueden arreglar con condicionales, pero el error es arrojado en la línea:
      ".PivotItems(i).Visible = False"
      Pero aunque ya había intentado sacarlo el bucle sigue apareciéndome el error en la línea que te comento.
      He visto en otros ejemplos que el primer código debería funcionar pero hay error de código según me dice excel.

      Eliminar
    3. Hola Yuri,
      En principio parece correcto... ya te habrás dado cuenta que trabajar con Tablas dinámicas en las macros se complica muy fácilmente.
      Alguna vez he intentado algo similar a lo que tu propones y el fallo, como te indicaba, lo generaba el Item en blanco...
      verifica o controla ese Item ( en blanco ) y seguramente te funcione.

      Slds

      Eliminar
    4. Hola Ismael,
      Me puse a revisar y los más crítico es que no existe ítems en blanco jeje, creo que son uno de esos misterios que se arregla cambiando de versión, o copiando y pegando nuevamente, o cerrando y abriendo el archivo...que complicado resulta a veces esto...muchas gracias por la atención prestada Ismael..a seguir intentando.
      Saludos

      Eliminar
  3. Saludos Ismael, una pregunta: Como puedo hacer para ordenar a 300 estudiantes con su nota definitiva y si por ejemplo si hay dos con la misma nota les asigne un numero diferente, ejemplo si hay un 9.8 entre tres estudiantes, les corresponderia el nùmero 1,2 y 3 o les debe corresponder el nùmero uno a los tres,gracias por su ayuda, es facil para 10 estudiantes pero para 300 que puedo hacer si no se programar, Gracias de nuevo.

    ResponderEliminar
    Respuestas
    1. Hola Fernando,
      creo que algo de lo que se explica respecto a JERARQUIA y CONTAR.SI en esta entrada te servirá...

      http://excelforo.blogspot.com.es/2009/10/la-funcion-jerarquia-la-ordenacion-de.html

      Slds

      Eliminar
  4. He creado una tabla dinámica con varios niveles de filtros, por ejemplo: 1. Localidad 2. Clientes; cuando filtro por localidad, pensaba que en clientes solo me aparecerían los clientes de la selección; pero siguen apareciendo todos. Uso Excel 2007. Existe alguna forma de lograr que se filtre de esta manera. Aunque no soy programador VBA, me salen algunas cositas que he probado. Tabla de datos esta creadas por columnas con una para localidad y otra con los clientes, etc.

    ResponderEliminar
  5. Hola que tal estás? Un placer saludarte igualmente.
    No es posible hacer nada al respecto... en versiones superiores han implementado la herramienta de Segmentación de datos que cumple con lo que necesitas.

    Un cordial saludo

    ResponderEliminar
  6. HOLA TENGO ESTA TABLA DINÁMICA:

    Sub Macro1()
    '
    ' Macro1 Macro
    '
    X = 6 / 8 / 2018
    '
    With ActiveSheet.PivotTables("Tabla dinámica1").PivotFields("DÍA")
    .PivotItems(8 / 7 / 2018).Visible = False
    .PivotItems(X).Visible = True
    End With
    End Sub

    QUISIERA SABER COMO CAMBIAR LAS FECHAS DE LA MISMAS PERO LAS FECHAS SON NUMEROS Y SIEMPRE ME ARROJA UN ERROR EL ERROR ES EL 1004 GRACIAS POR SU AYUDA

    ResponderEliminar
    Respuestas
    1. Hola
      habría que ver los datos de origen y cómo es tu tabla dinámica...
      pero empezaría mirando que los datos son fechas de verdad (no son texto), y luego definiría la variable X como Date

      Saludos

      Eliminar
    2. Si, en efecto mis datos son numero no es texto el problema es que el error siempre ocurre en esta parte y no sé como solucionarlo .PivotItems(8 / 7 / 2018).Visible = False

      Eliminar
    3. Hola,
      prueba poniendo entrecomillado la fecha:
      .PivotItems("7/6/2018").Visible = False
      y asegurándote que cumple el patrón mm/dd/yyyy

      esto es, si la fecha es el 7-ago-2018 entonces "8/7/2018"

      Saludos

      Eliminar
  7. Este comentario ha sido eliminado por el autor.

    ResponderEliminar

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