Note: The other languages of the website are Google-translated. Back to English

¿Cómo filtrar la tabla dinámica en función de un valor de celda específico en Excel?

Normalmente, estamos filtrando datos en una tabla dinámica seleccionando elementos en la lista desplegable como se muestra en la captura de pantalla a continuación. En realidad, puede filtrar una tabla dinámica según el valor en una celda específica. El método VBA en este artículo lo ayudará a resolver el problema.

Filtrar la tabla dinámica en función de un valor de celda específico con código VBA


Filtrar la tabla dinámica en función de un valor de celda específico con código VBA

El siguiente código de VBA puede ayudarlo a filtrar una tabla dinámica en función de un valor de celda específico en Excel. Haz lo siguiente.

1. Ingrese un valor en el que filtrará la tabla dinámica en una celda de antemano (aquí selecciono la celda H6).

2. Abra la hoja de trabajo que contiene la tabla dinámica que filtrará por valor de celda. Luego, haga clic con el botón derecho en la pestaña de la hoja y seleccione Ver código en el menú contextual. Ver captura de pantalla:

3. En la apertura Microsoft Visual Basic para aplicaciones ventana, copie debajo del código VBA en la ventana Código.

Código de VBA: tabla dinámica de filtro según el valor de la celda

Private Sub Worksheet_Change(ByVal Target As Range)
'Update by Extendoffice 20180702
    Dim xPTable As PivotTable
    Dim xPFile As PivotField
    Dim xStr As String
    On Error Resume Next
    If Intersect(Target, Range("H6:H7")) Is Nothing Then Exit Sub
    Application.ScreenUpdating = False
    Set xPTable = Worksheets("Sheet1").PivotTables("PivotTable2")
    Set xPFile = xPTable.PivotFields("Category")
    xStr = Target.Text
    xPFile.ClearAllFilters
    xPFile.CurrentPage = xStr
    Application.ScreenUpdating = True
End Sub

Notas: En el código,

1) "Sheet1”Es el nombre de la hoja de trabajo.
2) "PivotTable2”Es el nombre de la tabla dinámica.
3) El campo de filtrado de la tabla dinámica se llama "Categoría".
4) El valor que desea filtrar la tabla dinámica se coloca en la celda H6.
Puede cambiar los valores de las variables anteriores según lo necesite.

4. presione el otro + Q llaves para cerrar el Microsoft Visual Basic para aplicaciones ventana.

Luego, la tabla dinámica se filtra en función del valor en la celda H6 como se muestra a continuación:

Puede cambiar el valor de la celda a otros que necesite.

Nota:: Los valores que escriba en la celda H6 deben coincidir exactamente con los valores de la lista desplegable Categoría de la tabla dinámica.


Artículos relacionados:


Las mejores herramientas de productividad de oficina

Kutools para Excel resuelve la mayoría de sus problemas y aumenta su productividad en un 80%

  • Reutilizar: Inserte rápidamente fórmulas complejas, gráficos y cualquier cosa que hayas usado antes; Cifrar celdas con contraseña; Crear lista de distribución y enviar correos electrónicos ...
  • Barra de súper fórmula (edite fácilmente varias líneas de texto y fórmulas); Diseño de lectura (leer y editar fácilmente un gran número de celdas); Pegar en rango filtrado...
  • Combinar celdas / filas / columnas sin perder datos; Contenido de celdas divididas; Combinar filas / columnas duplicadas... Prevenir celdas duplicadas; Comparar rangos...
  • Seleccione Duplicado o Único Filas; Seleccionar filas en blanco (todas las celdas están vacías); Super Find y Fuzzy Find en muchos libros de trabajo; Selección aleatoria ...
  • Copia exacta Varias celdas sin cambiar la referencia de la fórmula; Crear referencias automáticamente a varias hojas; Insertar viñetas, Casillas de verificación y más ...
  • Extraer texto, Agregar texto, Eliminar por posición, Quitar espacio; Crear e imprimir subtotales de paginación; Convertir entre contenido de celdas y comentarios...
  • Súper filtro (guardar y aplicar esquemas de filtros a otras hojas); Orden avanzado por mes / semana / día, frecuencia y más; Filtro especial en negrita, cursiva ...
  • Combinar libros y hojas de trabajo; Combinar tablas basadas en columnas clave; Dividir datos en varias hojas; Conversión por lotes de xls, xlsx y PDF...
  • Más de 300 potentes funciones. Compatible con Office/Excel 2007-2021 y 365. Compatible con todos los idiomas. Fácil implementación en su empresa u organización. Funciones completas Prueba gratuita de 30 días. Garantía de devolución de dinero de 60 días.
pestaña kte 201905

Office Tab lleva la interfaz con pestañas a Office y hace que su trabajo sea mucho más fácil

  • Habilite la edición y lectura con pestañas en Word, Excel, PowerPoint, Publisher, Access, Visio y Project.
  • Abra y cree varios documentos en nuevas pestañas de la misma ventana, en lugar de en nuevas ventanas.
  • ¡Aumenta su productividad en un 50% y reduce cientos de clics del mouse todos los días!
officetab parte inferior
Comentarios (23)
Aún no hay calificaciones. ¡Sé el primero en calificar!
Este comentario fue minimizado por el moderador en el sitio
Usando este código (actualizado para mis variables, por supuesto), al cambiar el campo, el filtro cambia momentáneamente al correcto y luego se borra casi de inmediato. Tratando de averiguar por qué está haciendo esto (¿se pregunta si tiene algo que ver con ClearAllFilters al final del sub?)
Este comentario fue minimizado por el moderador en el sitio
¿Cómo haría esto con un filtro de informe que tiene una jerarquía?
Este comentario fue minimizado por el moderador en el sitio
¡Oye! Gracias por tu macro.

Estaba tratando de usarlo para más de una tabla dinámica en la misma página, pero no funciona. Lo escribí así:

Sub hoja de trabajo privada_Cambio (según el rango de destino ByVal)
Dim xPTable1 como tabla dinámica
Atenuar xPFile1 como campo dinámico
Dim xStr1 como cadena
On Error Resume Next
Si Intersect(Target, Range("D7")) no es nada, entonces salga de Sub
Application.ScreenUpdating = False
Establecer xPTable1 = Hojas de Trabajo("BUSCADOR").PivotTables("PV_ETAPA1")
Establecer xPFile1 = xPTable1.PivotFields("ETAPA1")
xStr1 = Destino.Texto
xPFile1.Borrartodoslosfiltros
xPFile1.PáginaActual = xStr1
Application.ScreenUpdating = True

Dim xPTable2 como tabla dinámica
Atenuar xPFile2 como campo dinámico
Dim xStr2 como cadena
On Error Resume Next
Si Intersect(Target, Range("G7")) no es nada, salga de Sub
Application.ScreenUpdating = False
Establecer xPTable2 = Hojas de Trabajo("BUSCADOR").PivotTables("PV_ETAPA2")
Establecer xPFile2 = xPTable2.PivotFields("ETAPA2")
xStr2 = Destino.Texto
xPFile2.Borrartodoslosfiltros
xPFile2.PáginaActual = xStr2
Application.ScreenUpdating = True

End Sub

¡Talvez tu puedes ayudarme a salir!

Gracias de antemano!
Este comentario fue minimizado por el moderador en el sitio
Hi


gracias por la macro


Estoy intentando lo mismo pero no puedo hacer que funcione en 2 tablas. ambos están mirando la misma celda solo 2 tablas dinámicas diferentes


gracias
Este comentario fue minimizado por el moderador en el sitio
Tienes que cambiar el nombre de la tabla dinámica. Cada tabla dinámica tiene un nombre diferente. para obtener eso, haga clic derecho en el pivote y seleccione la configuración de la tabla dinámica, el nombre estará en la parte superior
Este comentario fue minimizado por el moderador en el sitio
Hola,

Je ne comprends pas comment ajouter le nom du second TCD dans la macro pour que cela fonctionne sur les deux.
Pourriez-vous m'aider?

Merci
Este comentario fue minimizado por el moderador en el sitio
Hola, por alguna razón, esta macro después de ingresar a la página de Visual Basic, no aparece en absoluto. No puedo habilitar/ejecutar esta macro, verifiqué todas las configuraciones del centro de confianza, pero no sucede nada, por favor ayúdenme
Este comentario fue minimizado por el moderador en el sitio
Hola, parece que no puedo hacer que esto funcione. La celda a la que quiero referirme se extrae de una fórmula. ¿Será por eso que el filtro no puede encontrarla, ya que está mirando la fórmula en lugar del valor que devuelve la fórmula? Gracias de antemano Heather McDonagh
Este comentario fue minimizado por el moderador en el sitio
Hola Heather, encontraste una solución. Tengo el mismo problema.
Este comentario fue minimizado por el moderador en el sitio
Pude modificar/filtrar 3 pivotes diferentes que están en la misma pestaña. También agregué una fila en mi conjunto de datos "No se encontraron datos", de lo contrario, dejó el filtro en "TODOS", que no quería. Lo anterior fue de gran ayuda para ganarme Felicitaciones con la administración, así que quería compartirlo. Tenga en cuenta que (Todos) distingue entre mayúsculas y minúsculas. Me tomó un poco darme cuenta de eso.
Sub hoja de trabajo privada_Cambio (según el rango de destino ByVal)
'prueba
Dim xPTable como tabla dinámica
Dim xPFile como PivotField
Dim xStr como cadena

Dim x2PTable como tabla dinámica
Dim x2PFile como campo dinámico
Dim x2Str como cadena

Dim x3PTable como tabla dinámica
Dim x3PFile como campo dinámico
Dim x3Str como cadena

On Error Resume Next
Si Intersect(Target, Range("a2:e2")) no es nada, entonces salga de Sub

Application.ScreenUpdating = False

'tbl-1
Establecer xPTable = Hojas de trabajo ("Gráfico"). Tablas dinámicas ("PivotTable1")
Establecer xPFile = xPTable.PivotFields("Departamento MR - Departamento")
xStr = Destino.Texto
xPFile.ClearAllFilters
xPFile.PáginaActual = xStr
Si xPFile.CurrentPage = "(Todos)" Entonces xPFile.CurrentPage = "No se encontraron datos"

'tbl-2
Establecer x2PTable = Hojas de trabajo ("Gráfico"). Tablas dinámicas ("PivotTable2")
Establecer x2PFile = x2PTable.PivotFields("Departamento MR - Departamento")
x2Str = Destino.Texto
x2PFile.BorrarTodosLosFiltros
x2PFile.PáginaActual = x2Str
Si x2PFile.CurrentPage = "(Todos)" Entonces x2PFile.CurrentPage = "No se encontraron datos"

'tbl-3
Establecer x3PTable = Hojas de trabajo ("Gráfico"). Tablas dinámicas ("PivotTable3")
Establecer x3PFile = x3PTable.PivotFields("Departamento MR - Departamento")
x3Str = Destino.Texto
x3PFile.BorrarTodosLosFiltros
x3PFile.PáginaActual = x3Str
Si x3PFile.CurrentPage = "(Todos)" Entonces x3PFile.CurrentPage = "No se encontraron datos"

Application.ScreenUpdating = True

End Sub
Este comentario fue minimizado por el moderador en el sitio
¿Es esto posible con las hojas de Google? ¿Si es así, cómo?
Este comentario fue minimizado por el moderador en el sitio
Hojas de cálculo de Google no requerirá ninguna tabla dinámica. puede realizar directamente a través de la función de filtro
Este comentario fue minimizado por el moderador en el sitio
Me gustaría usar varios códigos de cambio de hoja de trabajo en la misma hoja de trabajo. ¿Como hacer eso? Mi código es el siguiente:
Sub hoja de trabajo privada_Cambio (según el rango de destino ByVal)
'Filtro de tabla dinámica basado en el valor de la celda
Dim xPTable como tabla dinámica
Dim xPFile como PivotField
Dim xStr como cadena
On Error Resume Next
Si Intersect(Target, Range("D20:D21")) no es nada, entonces salga de Sub
Application.ScreenUpdating = False
Establecer xPTable = Worksheets("Sheet1").PivotTables("PivotTable2")
Establecer xPFile = xPTable.PivotFields("Designación")
xStr = Destino.Texto
xPFile.ClearAllFilters
xPFile.PáginaActual = xStr
Application.ScreenUpdating = True
End Sub

Subhoja de trabajo privada_Change2(ByVal Target As Range)
'Filtro de tabla dinámica basado en el valor de celda 2
Dim xPTable como tabla dinámica
Dim xPFile como PivotField
Dim xStr como cadena
On Error Resume Next
Si Intersect(Target, Range("H20:H21")) no es nada, entonces salga de Sub
Application.ScreenUpdating = False
Establecer xPTable = Worksheets("Sheet1").PivotTables("PivotTable2")
Establecer xPFile = xPTable.PivotFields("Oferta")
xStr = Destino.Texto
xPFile.ClearAllFilters
xPFile.PáginaActual = xStr
Application.ScreenUpdating = True
End Sub
Este comentario fue minimizado por el moderador en el sitio
Olá, gostaria de saber se quisesse filtrar mais de uma categoria como podría ser?
Este comentario fue minimizado por el moderador en el sitio
¿Qué pasa si quiero vincular la celda de selección a una pestaña diferente? Este es mi código hasta ahora
Sub hoja de trabajo privada_Cambio (según el rango de destino ByVal)
Dim xPTable1 como tabla dinámica
Atenuar xPFile1 como campo dinámico
Dim xStr1 como cadena
On Error Resume Next
Si Intersect(Target, Range("B1")) no es nada, entonces salga de Sub
Application.ScreenUpdating = False
Establecer xPTable1 = Hojas de trabajo ("SM_SKU PIVOTS").PivotTables ("PivotTable1")
Establecer xPFile1 = xPTable1.PivotFields("Geografía")
xStr1 = Destino.Texto
xPFile1.Borrartodoslosfiltros
xPFile1.PáginaActual = xStr1
Application.ScreenUpdating = True

Dim xPTable2 como tabla dinámica
Atenuar xPFile2 como campo dinámico
Dim xStr2 como cadena
On Error Resume Next
Si Intersect(Target, Range("B1")) no es nada, entonces salga de Sub
Application.ScreenUpdating = False
Establecer xPTable2 = Hojas de trabajo ("SM_SKU PIVOTS").PivotTables ("PivotTable4")
Establecer xPFile2 = xPTable2.PivotFields("Geografía")
xStr2 = Destino.Texto
xPFile2.Borrartodoslosfiltros
xPFile2.PáginaActual = xStr2
Application.ScreenUpdating = True

Dim xPTable3 como tabla dinámica
Atenuar xPFile3 como campo dinámico
Dim xStr3 como cadena
On Error Resume Next
Si Intersect(Target, Range("B1")) no es nada, entonces salga de Sub
Application.ScreenUpdating = False
Establecer xPTable3 = Hojas de trabajo ("SM_SKU PIVOTS").PivotTables ("PivotTable8")
Establecer xPFile3 = xPTable3.PivotFields("Geografía")
xStr3 = Destino.Texto
xPFile3.Borrartodoslosfiltros
xPFile3.PáginaActual = xStr3
Application.ScreenUpdating = True

End Sub
Este comentario fue minimizado por el moderador en el sitio
Hola!

Soy nuevo con VBA y me gustaría tener un código para seleccionar un filtro dinámico basado en un rango de celdas.
¿Cómo puedo cambiar "Página actual" para que sea un valor de rango?
Gracias !!
-------------------------------------------------- -----------------------------------------
Sub Recorrido de impresión()

ActiveSheet.PivotTables("PivotTable1").PivotFields( _
"[Bereich 1].[Recorrido].[Recorrido]"). _
BorrarTodosLosFiltros
ActiveSheet.PivotTables("PivotTable1").PivotFields( _
"[Bereich 1].[Tour].[Tour]"). _
CurrentPage = "[Bereich 1].[Tour lt. Anlieferungstag].&[4001-01]"
End Sub
Este comentario fue minimizado por el moderador en el sitio
¡Muchas gracias por este código! Lo hice funcionar después de ajustarlo para cumplir con mis campos, pero después de formatear algunos cambios en mi hoja, ¡ahora no funciona! Lo moví de A1 a B1, cambié el formato de algunas celdas para que se destaque, etc. Nada demasiado loco, pero ahora no se actualiza cuando cambio el texto en B1. ¿Alguien tiene alguna idea?

Sub hoja de trabajo privada_Cambio (según el rango de destino ByVal)
'prueba
Dim xPTable como tabla dinámica
Dim xPFile como PivotField
Dim xStr como cadena

Dim x2PTable como tabla dinámica
Dim x2PFile como campo dinámico
Dim x2Str como cadena

Dim x3PTable como tabla dinámica
Dim x3PFile como campo dinámico
Dim x3Str como cadena

On Error Resume Next
Si Intersect(Target, Range("b1")) no es nada, salga de Sub

Application.ScreenUpdating = False

'tbl-1
Establecer xPTable = Hojas de trabajo ("Informe de línea"). Tablas dinámicas ("PivotTable7")
Establecer xPFile = xPTable.PivotFields("Fuente de utopía")
xStr = Destino.Texto
xPFile.ClearAllFilters
xPFile.PáginaActual = xStr

'tbl-2
Establecer x2PTable = Worksheets("Line Report").PivotTables("PivotTable2")
Establecer x2PFile = x2PTable.PivotFields("Fuente de utopía")
x2Str = Destino.Texto
x2PFile.BorrarTodosLosFiltros
x2PFile.PáginaActual = x2Str

'tbl-3
Establecer x3PTable = Worksheets("Line Report").PivotTables("PivotTable3")
Establecer x3PFile = x3PTable.PivotFields("Fuente de utopía")
x3Str = Destino.Texto
x3PFile.BorrarTodosLosFiltros
x3PFile.PáginaActual = x3Str

Application.ScreenUpdating = True

End Sub
Este comentario fue minimizado por el moderador en el sitio
Hola Lanza,
Probé tu código y funciona bien en mi caso. Cambiar el formato de celda no afecta el funcionamiento del código.
Este comentario fue minimizado por el moderador en el sitio
¿Cómo funciona con Power Pivot cuando se usan varias tablas? Grabé macro cambiando el valor en el filtro. Hizo algunos cambios para que el código anterior funcione. Pero arroja un error de discrepancia de tipo. No importa lo que yo haga.
Este comentario fue minimizado por el moderador en el sitio
Hola DK,
El método no funciona para Power Pivot. Lo siento por los inconvenientes ocasionados.
Este comentario fue minimizado por el moderador en el sitio
Hola,
Muchas gracias por estas explicaciones.

J'aimerai utiliser un filtre (1 cellule) en F4 par exemple qui filtrerait deux TCD qui sont sur la même feuille.

Cela fonctionne très bien avec un TCD mais dès que j'essaye de combiner le second, ça ne marche pas.
Podria usted ayudarme ?

Muchas gracias
Ambrose
Este comentario fue minimizado por el moderador en el sitio
Hola,

Merci beaucoup pour cette explication qui marche parfaitement.
En revanche, j'aimerais pouvoir utiliser ce code pour pouvoir filtrer deux tableaux croisés dynamiques en même temps qui sont sur la même feuille. La seule petite différence entre les deux, c'est qu'ils n'utilisent pas les mêmes source. En revanche, le filtre sur lequel se base ces TDC est le même.

Pourriez-vous m'aider à faire évoluer ce code afin que cela fonctionne ?

Voici le code used quand il marche avec un TCD :

Sub hoja de trabajo privada_Cambio (según el rango de destino ByVal)
'Actualizar por Extendoffice 20180702
Dim xPTable como tabla dinámica
Dim xPFile como PivotField
Dim xStr como cadena
On Error Resume Next
Si Intersect(Target, Range("G4")) no es nada, salga de Sub
Application.ScreenUpdating = False
Establecer xPTable = Worksheets("Cadrage").PivotTables("Tableau croisé dynamique7")
Establecer xPFile = xPTable.PivotFields("N°PROYECTO")
xStr = Destino.Texto
xPFile.ClearAllFilters
xPFile.PáginaActual = xStr
Application.ScreenUpdating = True
End Sub

Muchas gracias
Este comentario fue minimizado por el moderador en el sitio
Hola Ambroise,

Lo sentimos, es difícil modificar este código para satisfacer sus necesidades. Si desea filtrar varias tablas dinámicas con un solo filtro, los métodos de este artículo a continuación pueden hacerle un favor:
¿Cómo conectar una sola cortadora a varias tablas dinámicas en Excel?
No hay comentarios publicados aquí todavía
Deje sus comentarios
Publicar como invitado
×
Califica esta publicación:
0   Personajes
Ubicaciones sugeridas

Seguinos

Copyright © 2009 - www.extendoffice.com. | Reservados todos los derechos. Energizado por ExtendOffice, | Mapa del Sitio
Microsoft y el logotipo de Office son marcas comerciales o marcas comerciales registradas de Microsoft Corporation en los Estados Unidos y / o en otros países.
Protegido por Sectigo SSL