Verificar los valores antes de filtrar

Tengo una base de datos con muchisima información, he realizado una macro que me limpia la base haciendo filtros y elimina los datos que no quiero que me analice. El problema sucede cuando ejecuto la macro y no encuentra alguno de los criterios, me borra todo el contenido de la base...

De paso pregunto si hay alguna forma de hacer que el codigo se ejecute mas rapido

Sub limpiabase()

miStop4 = Range("A1").CurrentRegion.Rows.Count
ActiveSheet.Range(Cells(1, 1), Cells(miStop4, 34)).AutoFilter Field:=27, Criteria1:= _
"caparros"
Range(Cells(2, 1), Cells(miStop4, 34)).Select
Selection.Delete Shift:=xlUp
ActiveSheet.ShowAllData
ActiveSheet.Range(Cells(1, 1), Cells(miStop4, 34)).AutoFilter Field:=22, Criteria1:= _
"<>17 qtr3", Operator:=xlAnd
Range(Cells(2, 1), Cells(miStop4, 34)).Select
Selection.Delete Shift:=xlUp
ActiveSheet.ShowAllData
ActiveSheet.Range(Cells(1, 1), Cells(miStop4, 34)).AutoFilter Field:=7, Criteria1:="<>New" _
, Operator:=xlAnd, Criteria2:="<>Renewal"
Range(Cells(2, 1), Cells(miStop4, 34)).Select
Selection.Delete Shift:=xlUp
ActiveSheet.ShowAllData

ActiveSheet.Range(Cells(1, 1), Cells(miStop4, 34)).AutoFilter Field:=8, Criteria1:="Administrative"
Range(Cells(2, 1), Cells(miStop4, 34)).Select
Selection.Delete Shift:=xlUp
ActiveSheet.ShowAllData

End Sub

1 Respuesta

Respuesta
1

Cuando se trata de tener mucha información, lo mejor es Access... Gestiona mejor los datos y es mucho más estable y fiable que un libro de Excel con mucha información.

No obstante, te paso un ejemplo de un filtro avanzado y seguro que le encontrarás mucha utilidad...

Private Sub Worksheet_Change(ByVal Target As Range)
    '********************************************'
    Const strTablaDatos = "tblPedidos"
    Const strTablaCriterios = "tblCriterios"
    '********************************************'
    Dim rngTablaDatos As Range
    Dim rngTablaCriterios As Range
    Set rngTablaDatos = Range(strTablaDatos & "[#All]")
    Set rngTablaCriterios = Range(strTablaCriterios & "[#All]")
    'Si se modifica alguna celda dentro del rango de criterios, se ejecuta el filtro avanzado.
    If Not Intersect(Target, rngTablaCriterios) Is Nothing Then
        'El filtro avanzado necesita saber cuantos criterios utilizamos para un mismo campo;
        'Por ello, rastreamos desde la última fila a la primera del rango de criterios (fila a fila);
        'En la primera que aparezca algún criterio determinará el rango con criterios.
        fil_ini = rngTablaCriterios.Cells(1, 1).Row
        col_ini = rngTablaCriterios.Cells(1, 1).Column
        col_fin = rngTablaCriterios.Columns.Count
        For numCriterios = rngTablaCriterios.Rows.Count To fil_ini + 1 Step -1
            If WorksheetFunction.CountA(Range(Cells(numCriterios, col_ini), Cells(numCriterios, col_fin))) Then
                Exit For
            End If
        Next numCriterios
        'Aplica el filtro
        rngTablaDatos.AdvancedFilter Action:=xlFilterInPlace, _
            CriteriaRange:=Range(Cells(fil_ini, col_ini), Cells(numCriterios, col_fin)), _
            Unique:=False
    End If
End Sub

Saludos y espero que esto te resulte interesante.....

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas