Macro Para filtro de datos en etiquetas de fila de tabla dinámica

Quisiera Filtrar los datos de cualquiera de los campos que están en las etiquetas de fila de una tabla dinámica de acuerdon con valores ingresados en celdas es decir:

Al escribir la palabra que debe filtrar en las celdas de color moradas se filte la tabla dinámica por cada campo correspondiente, si en B1 por ejemplo escribo residencia automáticamente filte la tabla dinámica con esa palabra, luego si en B2 escribo juan automáticamente también filtre la columna correspondiente con esa palabra, y asiii, para este ejemplo son solo 3 etiquetas de fila, pero la realidad es que pueden ser hasta 8 etiquetas de fila...

Si las celdas moradas están en blanco pss no se debe filtrar nada, pero si se introduce una palabra filtrar automáticamente.

¿Esto se puede?

Respuesta
3

Sí, esto es muy fácil.

Se usa el principio del filtro avanzado.

En el siguiente ejemplo hay un rango de base de datos que he nombrado "Base_de_datos" y cubre todo el rango A4:D48, he copiado los nombres de campo de la base en la fila 1 le he aplicado un rango de criterios que he nombrado "CriteriosFiltro" al rango A1:D2. Importante dejar dos filas en blanco o mas entre los textos.

Se copia la siguiente macro, que utiliza el filtro avanzado, en el editor de VB en la hoja donde está la base de datos.

Private Sub worksheet_change(ByVal Target As Range)
If ActiveCell.Row = 2 Then
    [Base_de_datos].CurrentRegion.Name = "Base_de_datos"
    [Base_de_datos].AdvancedFilter Action:=xlFilterInPlace, CriteriaRange _
        :=[CriteriosFiltro], Unique:=False
End If
End Sub

Al escribrir cualquier texto en la fila 2 en la columna correspondiente se activa el filtro. Ejemplo:

, al borrarlo se visualizan los datos de nuevo.

Acabo de darme cuenta que estás hablando de una tabla dinámica, no de una base de datos. Perdona, entonces es distinto.

Miguel Te agradezco de igual manera tu interés muchas gracias por tu tiempo

Rectifico para tabla dinámica.

Puedes copiar esta macro en el mismo sitio:

Private Sub worksheet_change(ByVal Target As Range)
On Error GoTo FINAL
With ActiveSheet.PivotTables("Tabla dinámica1").PivotFields(Cells(ActiveCell.Row, ActiveCell.Column - 1).Value)
PVIC = .PivotItems.Count
If ActiveCell.Value = 0 Then
    For i = 1 To PVIC
    .PivotItems(i).Visible = True
    Next
Else
    For ii = 2 To PVIC
        .PivotItems(ii).Visible = False
    Next
        .PivotItems(ActiveCell.Value).Visible = True
        If [B1].Value <> .PivotItems(1).Name Then .PivotItems(1).Visible = False
End If
    End With
FINAL:
End Sub

escribe los nombres de campo en una celda (en el ejemplo siguiente A1 y A2) y el item por el que quieres filtrar lo escribes a la derecha  (B1 y B2), así ejecuta el filtro. Borrando hace visibles los campos de nuevo. La macro la he aplicado a esta tabla:

Para que funcione mejor añade p.f. estas instrucciones:

Justo al principio después del nombre

Application.EnableEvents = False

Justo al final antes de end sub

Application.EnableEvents = True

Fredy ya te contesté la pregunta para tabla dinámica, pero creo que no has visto la respuesta aún.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas