Macro para Filtro Avanzado por columna en Excel.

Espero me puedan ayudar con mi problema.

Tengo un libro de Excel con información de A4 hasta F#####. En la fila 3, están mis encabezados y en la fila 2, tengo las celdas que sirven para buscar la información que necesito y lo hacen por columna. Se entiende que la Celda A2, buscara información en la columna A .. Y así hasta la Celda F2, buscara en la columna F. Este filtro debera mostrar la info sobre la misma hoja y aplicar filtro sobre filtro. La macro que tengo es:

Private Sub Worksheet_Change(ByVal Target As Range)
Application.ScreenUpdating = False
If Not Intersect(Target, Range("A2:F2")) Is Nothing Then
If ActiveSheet.FilterMode Then ShowAllData 'Selection.AutoFilter
If Target.Count > 1 Then Exit Sub
u = Range("A" & Rows.Count).End(xlUp).Row
Range("AA2:AF2") = [A4]
Range("AA3:AF3") = ""
If [A2] <> "" Then [AA3] = "*" & [A2] & "*"
If [B2] <> "" Then [AB3] = "*" & [B2] & "*"
If [C2] <> "" Then [AC3] = "*" & [C2] & "*"
If [D2] <> "" Then [AD3] = "*" & [D2] & "*"
If [E2] <> "" Then [AE3] = "*" & [E2] & "*"
If [F2] <> "" Then [AF3] = "*" & [F2] & "*"
Range("A4:F" & u).AdvancedFilter Action:=xlFilterInPlace, _
CriteriaRange:=Range("AA2:AF3"), Unique:=False
End If
End Sub

También puedo buscar con cualquier parte de la descripción del contenido de cada celda, no precisamente con el comienzo o el final, el problema es que al momento de aplicar el primer filtro en la celda A2 y manda a buscar en la columna A, si lo hace, pero si aplico un segundo filtro en cualquiera de las otras columnas, me manda un único registro, no aplica el segundo filtro, sobre el primero.

NOTA: La columna C debe buscar por fecha.

Si es necesario enviar el archivo, lo puedo hacer sin problema.

1 respuesta

Respuesta
1

El problema está en la fila de los encabezados

En esta línea, solamente estás pasando el dato de la celda A4

Range("AA2:AF2") = [A4]

Si tus encabezados están en la fila 3, entonces debería ser así:

Range("AA2:AF2").Value = [A3:F3].Value

También al momento de filtrar, estás empezando en la fila 4:

Range("A4:F" & u).AdvancedFilter Action:=xlFilterInPlace, _
CriteriaRange:=Range("AA2:AF3"), Unique:=False

Debes empezar en la fila 3:

        Range("A3:F" & u).AdvancedFilter Action:=xlFilterInPlace, _
            CriteriaRange:=Range("AA2:AF3"), Unique:=False

Entonces quedaría así:

Private Sub Worksheet_Change(ByVal Target As Range)
    Application.ScreenUpdating = False
    If Not Intersect(Target, Range("A2:F2")) Is Nothing Then
        If ActiveSheet.FilterMode Then ShowAllData 'Selection.AutoFilter
        If Target.Count > 1 Then Exit Sub
        u = Range("A" & Rows.Count).End(xlUp).Row
        Range("AA2:AF2").Value = [A3:F3].Value
        Range("AA3:AF3") = ""
        If [A2] <> "" Then [AA3] = "*" & [A2] & "*"
        If [B2] <> "" Then [AB3] = "*" & [B2] & "*"
        If [C2] <> "" Then [AC3] = "*" & [C2] & "*"
        If [D2] <> "" Then [AD3] = "*" & [D2] & "*"
        If [E2] <> "" Then [AE3] = "*" & [E2] & "*"
        If [F2] <> "" Then [AF3] = "*" & [F2] & "*"
        Range("A3:F" & u).AdvancedFilter Action:=xlFilterInPlace, _
            CriteriaRange:=Range("AA2:AF3"), Unique:=False
    End If
End Sub


'.[Sal u dos.  No olvides valorar la respuesta. 

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas