Autofilter met meerdere criteria

Status
Niet open voor verdere reacties.

lieke66

Gebruiker
Lid geworden
29 jul 2016
Berichten
47
Beste Helpmij'ers,

Ik heb een excel file met 2 bladen
Blad 1 = Data (hierop worden rijen verwijderd)
Blad 2 = Criteria (als de rijen voldoen aan criteria, moet de rij blijven. Anders verwijderen)

Met behulp van de autofilter kan ik 'snel' rijen verwijderen.

En als ik .Autofilter 1, = "<>111-1" gebruik, blijft alleen 111-1 over. Perfect

Maar onderstaande code werkt niet. Hij verwijdert alle rijen.

Code:
Sub DeleteRowIf()

    Dim MyRange As Range

    Set MyRange = Sheets("Lijst X").Range("A2")
    Set MyRange = Range(MyRange, MyRange.End(xlDown))
    
    With Sheets("Data BE").Cells(4, 1).CurrentRegion
        .AutoFilter 1, Application.Transpose("<>MyRange")
        .Offset(1).EntireRow.Delete
        .AutoFilter 1
    End With
    
End Sub

Hoe kan ik de lijst met criteria toevoegen, zonder alles 1 voor 1 hoeven te typen?

Dankjewel!
 

Bijlagen

  • DeleteRow.xlsm
    25,8 KB · Weergaven: 25
Volgens mij klopt het bestand niet met de beschrijving.
 
Sorry, je hebt gelijk.
Zie hier:
 

Bijlagen

  • DeleteRow.xlsm
    23,8 KB · Weergaven: 34
Het is misschien niet de netste code, maar het werkt bijna.
Met deze code verwijdert hij alles in MyRange.

Nu de laatste stap: Alles wat NIET in MyRange staat verwijderen

Code:
Sub DeleteRowIf()

    Dim MyRange As Range
    Dim V As Variant

    Set MyRange = Sheets("Lijst X").Range("A2")
    Set MyRange = Range(MyRange, MyRange.End(xlDown))
    V = MyRange
    V = Application.Transpose(V)
    V = Split(Join(V, ","), ",")
       
    With Sheets("Data BE").Cells(4, 1).CurrentRegion
        .AutoFilter 1, V, xlFilterValues
        .Offset(1).EntireRow.Delete
        .AutoFilter 1
    End With
    
End Sub

Ik heb geprobeerd:
Code:
.AutoFilter 1, "<> V", xlFilterValues
Dit verwijdert alles

En
Code:
.AutoFilter 1, "<>" & V, xlFilterValues

Dan krijg ik de melding: Typen komen niet met elkaar overeen.

Ik heb het gevoel dat ik er bijna ben!
Dank jullie voor de hulp !
 
Laatst bewerkt:
Het voorbeeldje vind ik niet echt helder wat is het nut van de gekleurde balk in rij 4? Ik zit meer aan zoiets te denken.

Code:
Sub VenA()
  With Sheets("Data BE").Cells(4, 1).CurrentRegion
    .Parent.Cells(2, 6).Formula = "=COUNTIF('Lijst X'!$A$1:$A$100,A5)=0"
    .AdvancedFilter 1, .Parent.Range("F1:F2")
    .Offset(1).EntireRow.Delete
    .Parent.ShowAllData
  End With
End Sub

Nb. Waarom 2 draadjes met dezelfde vraag en 2 Pm's?
 
Laatst bewerkt:
Andere methode.
Zonder de autofilter of geavanceerde filter.
Code:
Sub hsv()
 Sheets("data be").Cells(4, 1).CurrentRegion.Columns(1).Offset(1).Name = "br"
 Sheets("lijst x").Cells(1).CurrentRegion.Columns(1).Offset(1).Name = "br_2"
   sv = Split(Join(Filter([transpose(if(countif(br_2,br),br,"~"))], "~", 0), "|"), "|")
   [br].EntireRow.Delete
 Sheets("data be").Cells(5, 1).Resize(UBound(sv) + 1) = Application.Transpose(sv)
End Sub
 
Beste VenA,

Dank voor jouw code. Dit werkt perfect.
Eigenlijk heb ik nog 1 uitdaging. Ik probeerde dit zelf, maar ik kom er niet uit.

Ik zie dat 111-1 ook 111-2 kan zijn.
Dat betekent dat het criterium 111 moet zijn. En het bereik LINKS met 3 tekens.

Alleen dit lukt me niet.

Ik probeerde:
Code:
.Parent.Cells(2, 6).Formula = "=COUNTIF('Lijst X'!$A$1:$A$100,LEFT(A5,4))=0"

Maar dat werkt niet.

Beste HSV,

Dank voor jouw code. Het werkt. Helaas heb ik nog niet veel kaas van VBA gegeten dat ik hem kan ontcijferen en er zelf dingen aan kan toevoegen.
 
zo?
Code:
.Parent.Cells(2, 6).Formula = "=COUNTIF('Lijst X'!$A$1:$A$100,LEFT(A5,3)&"*")=0"
 
Idem dito.
Code:
 sv = Split(Join(Filter([transpose(if(countif(br_2,left(br,3)&"*"),br,"~"))], "~", 0), "|"), "|")
 
Goedemorgen,

VenA; bij deze code geeft ie aan "Typen komen niet overeen".
Deze fout kreeg ik ook bij mijn eigen gemaakte versie:
Code:
.AutoFilter 1, "<>" & V, xlFilterValues


HSV; bij deze code verwijdert ie alles en loopt daardoor vast op
Code:
 Sheets("data be").Cells(5, 1).Resize(UBound(sv) + 1) = Application.Transpose(sv)
Want hij heeft niks meer te laten zien.

Mijn gedachten nu: Ik moet iets parsen naar String of iets anders naar Integer...
Als het helpt: De waarde in "Lijst X" = Value
De waarde in "Data BE" = Text

Zie bijgaand nieuwste bestand.
 

Bijlagen

  • DeleteRow.xlsm
    27 KB · Weergaven: 27
Laatst bewerkt:
In jouw voorbeeldbestand werkt het uitstekend met die voorwaarden.
Plaats anders een nieuw bestand met het te verwachten resultaat.
Ik heb er op dit moment geen tijd voor, maar anderen waarschijnlijk wel.
 
Hi HSV,

Sowieso al heel erg bedankt voor je tijd!
 

Bijlagen

  • DeleteRow.xlsm
    27 KB · Weergaven: 27
Misschien eerst even bedenken wat je nu precies wil.
Code:
.Parent.Cells(2, 6).Formula = "=COUNTIF('Lijst X'!$A$1:$A$100,LEFT(A5,3))=0"

Of in de code van HSV
Code:
sv = Split(Join(Filter([transpose(if(countif(br_2,left(br,3)),br,"~"))], "~", 0), "|"), "|")
 
Het werkt !! Ik was een haakje sluiten vergeten...
Dank, dank !! Voor jullie help!
 
Status
Niet open voor verdere reacties.
Steun Ons

Nieuwste berichten

Terug
Bovenaan Onderaan