Eres un usuario Anonimo. Haz clic aqui para entrar | Registrate

Autofiltro con más de dos condiciones

El autofiltro en Excel VBA permite solamente dos criterios. El siguiente código muestra cómo se pueden utilizar tres o más criterios con el autofiltro:

Sub MultiFiltro()
   
    Dim rngTarget As Range, rng1 As Range, rng2 As Range, rngMyRange As Range
    Const Crit1 As String = "DEF, LLC"
    Const Crit2 As String = "FGH LTD."
    Const Crit3 As String = "QRS INC."
    'Los criterios de autofiltro a utilizar
    
    Application.ScreenUpdating = False
    With Worksheets("Hoja1")
        .Rows(1).Insert
        .Range("A1").Value = "dummy"
        'Establecer un encabezado
        
        Set rngTarget = .Range("A1:A" & .Cells(Rows.Count, 1).End(xlUp).Row)
        'Establecer el rango de trabajo
        
        rngTarget.AutoFilter Field:=1, Criteria1:=Crit1, Operator:=xlOr, Criteria2:=Crit2
        'Obtener los primeros dos criterios
        
        Set rng1 = .AutoFilter.Range.Offset(1, 0).Resize(.AutoFilter.Range.Rows.Count - 1).SpecialCells(xlCellTypeVisible)
        'rango con los primeros dos (utilizar Offset y cambiar el tamaño para excluir el encabezado)
        
        rngTarget.AutoFilter
        'Restablecer Autofiltro
        
        rngTarget.AutoFilter Field:=1, Criteria1:=Crit3
        'Obtener el tercer criterio
        
        Set rng2 = .AutoFilter.Range.Offset(1, 0).Resize(.AutoFilter.Range.Rows.Count - 1).SpecialCells(xlCellTypeVisible)
        'Rango con el tercero
        
        rngTarget.AutoFilter
        .Rows(1).Delete
        'Eliminar el encabezado
        
        Set rngMyRange = Union(rng1, rng2)
        'Combinar el rango
        
        rngMyRange.EntireRow.Copy Destination:=Worksheets("AF Results").Range("A2")
        'o cualquier cosa que quieras hacer ...
    End With
    Worksheets("Hoja2").Select
    Application.ScreenUpdating = True
    MsgBox "Filtro completado"
End Sub