• Privacywetgeving
    Het is bij Helpmij.nl niet toegestaan om persoonsgegevens in een voorbeeld te plaatsen. Alle voorbeelden die persoonsgegevens bevatten zullen zonder opgaaf van reden verwijderd worden. In de vraag zal specifiek vermeld moeten worden dat het om fictieve namen gaat.

Via autofilter zoeken op meerder zaken

Status
Niet open voor verdere reacties.

davylenders123

Gebruiker
Lid geworden
20 jun 2010
Berichten
902
Heb reeds via dit form volgende code bekomen.

Code:
  With ActiveSheet.Range("A3").CurrentRegion    'je gegevens
  
      .AutoFilter 1, "3-*"                       'filteren op beginnen met "3-"
      .Offset(1).EntireRow.Delete                'die rijen verwijderen
      .AutoFilter                                'filter terug uitzetten
   End With

Deze zoekt in kolom a naar nummers die starten met 3- en verwijderd dan deze rijen.

Nu is er wat gewijzigd aan het bestand en moet ik met 2 tabbladen gaan werken.
In de code staat ActieveScheet , maar dit moet ik nu gaan wijzigen dat hij naar het tabblad gaat met de naam "15 25" hoe doe ik dat juist ?

Ook zou ik de autofilter op meer zaken willen laten zoeken.
7-201 zou ook verwijderd moeten worden zoals de 3- nummer
7-301 zou ook verwijderd moeten worden zoals de 3- nummer
En als in kolom c de cel leeg is deze ook verwijderen.

Mijn code tot nu toe is , en deze laat ik draaien op de csv in bijlage

Code:
Sub Temp()

' Dit stukje gaat eerst het tabblad wijzigen in de naam dat in A1 staat en vervolgens het tabblad kopieren en namen ervan wijzigen
Dim rs As Worksheet
For Each rs In Sheets
rs.Name = rs.Range("A1")
Next rs
Sheets("Route").Select
    Sheets("Route").Copy Before:=Sheets(1)
    Sheets("Route").Select
    Sheets("Route").Name = "2 8"
    Sheets("Route (2)").Select
    Sheets("Route (2)").Name = "15 25"
    
    'Dit stukje code gaat in kolom A opzoek naar 3- en verwijderd dan de volledige rij.
   With ActiveSheet.Range("A3").CurrentRegion    'je gegevens
  
      .AutoFilter 1, "3-*"                       'filteren op beginnen met "3-"
      .Offset(1).EntireRow.Delete                'die rijen verwijderen
      .AutoFilter                                'filter terug uitzetten
   End With
    Columns("B:B").Select
    Selection.Delete Shift:=xlToLeft
    Columns("D:D").Select
    Selection.Delete Shift:=xlToLeft
    Selection.Delete Shift:=xlToLeft
    Columns("E:E").Select
    Selection.Delete Shift:=xlToLeft
    Columns("F:F").ColumnWidth = 25.29
    Columns("G:G").Select
    Selection.Delete Shift:=xlToLeft
    Range("G1").Select
    ActiveCell.FormulaR1C1 = "Datum controle"
    Range("G3").Select
    Columns("G:G").EntireColumn.AutoFit
    Range("H1").Select
    ActiveCell.FormulaR1C1 = "Uur controle"
    Range("J6").Select
    Columns("H:H").EntireColumn.AutoFit
    Range("I1").Select
    ActiveCell.FormulaR1C1 = "Temp"
    Range("J1").Select
    ActiveCell.FormulaR1C1 = "Naam"
    Cells.Select
    Selection.Borders(xlDiagonalDown).LineStyle = xlNone
    Selection.Borders(xlDiagonalUp).LineStyle = xlNone
    With Selection.Borders(xlEdgeLeft)
        .LineStyle = xlContinuous
        .ColorIndex = 0
        .TintAndShade = 0
        .Weight = xlThin
    End With
    With Selection.Borders(xlEdgeTop)
        .LineStyle = xlContinuous
        .ColorIndex = 0
        .TintAndShade = 0
        .Weight = xlThin
    End With
    With Selection.Borders(xlEdgeBottom)
        .LineStyle = xlContinuous
        .ColorIndex = 0
        .TintAndShade = 0
        .Weight = xlThin
    End With
    With Selection.Borders(xlEdgeRight)
        .LineStyle = xlContinuous
        .ColorIndex = 0
        .TintAndShade = 0
        .Weight = xlThin
    End With
    With Selection.Borders(xlInsideVertical)
        .LineStyle = xlContinuous
        .ColorIndex = 0
        .TintAndShade = 0
        .Weight = xlThin
    End With
    With Selection.Borders(xlInsideHorizontal)
        .LineStyle = xlContinuous
        .ColorIndex = 0
        .TintAndShade = 0
        .Weight = xlThin
    End With
End Sub
 

Bijlagen

  • Abfertigung 27-07-2020.CSV
    5,9 KB · Weergaven: 28
Code:
With [COLOR=#FF0000]Sheets("15 25")[/COLOR].Range("A3").CurrentRegion    'je gegevens
  
      .AutoFilter 1, "3-*"                       'filteren op beginnen met "3-"
      .Offset(1).EntireRow.Delete                'die rijen verwijderen
      .AutoFilter                                'filter terug uitzetten
   End With
Als je de code van de macro-recorder had bestudeerd, had je dat zelf ook wel kunnen verzinnen.
 
Laatst bewerkt:
Waarom ga je hier niet verder, is toch dezelfde vraag ? https://www.helpmij.nl/forum/showthread.php/955229-Gegevens-verwijderen-via-macro
Volgens mij kun je xlOr slechts 1 x toepassen dus in een aantal stappen
Code:
With Sheets("15 25").Range("A1").CurrentRegion    'je gegevens
      .AutoFilter 1, "3-*", [COLOR="#FF0000"]xlOr[/COLOR], "7-201", Operator:=xlFilterValues
      .Offset(1).EntireRow.Delete
      .AutoFilter
      .AutoFilter 1, "7-301", 7 '7=xlFilterValues
      .Offset(1).EntireRow.Delete
      .AutoFilter
      .AutoFilter 3, "=", 7
      .Offset(1).EntireRow.Delete
      .AutoFilter
 End With

en kijk ook eens hier:http://www.snb-vba.eu/VBA_Autofilter.html
 
Laatst bewerkt:
Bedankt al, voor jullie snelle reacties :thumb:

@ alphamax

Je oplossing had ik al geprobeerd maar krijg telkens een foutmelding , waarschijnlijk een teken vergeten te zetten :eek:


@ AD1957
Waarom ik in de andere post niet ben verder gegaan : Deze was eerder al op opgelost gezet geweest en dacht eerst open hem terug en stel hier mijn extra vragen in , maar achteraf dacht ik kan het misschien beter via nieuwe post doen. Ik heb dan het bericht verwijderd uit de andere post , maar blijkbaar niet op de juiste manier waar mijn excuses voor , heb het bericht uit de andere post nu wel verwijderd.

Je code werkt nog niet helemaal , heb nog wel een beetje aangepast ,nog een nummer waarop hij moet zoeken toegevoegd en de autoFilter op de lege cellen naar kolom 4 gezet . In mijn test bestand is het in kolom D dat er naar lege cellen moet gezocht worden om dan de rij te verwijderen en in mijn definitief bestand moet dit kolom C zijn daarom mijn verwarring .

Hij verwijderd nu al de 3- nummers , 7-201 , 7-301 en 8-888
Maar de rijen met lege cellen in kolom D (4) blijven staan.
Heb tussen de 2() het = teken al eens vervangen door een spatie maar dan werkt het ook niet.

Code:
With Sheets("15 25").Range("A1").CurrentRegion    'je gegevens
      .AutoFilter 1, "3-*", xlOr, "7-201", Operator:=xlFilterValues
      .Offset(1).EntireRow.Delete
      .AutoFilter
      .AutoFilter 1, "7-301", 7 '7=xlFilterValues
      .Offset(1).EntireRow.Delete
      .AutoFilter
      .AutoFilter 1, "8-888", 7 '7=xlFilterValues
      .Offset(1).EntireRow.Delete
      .AutoFilter
      .AutoFilter 4, " = ", 7
      .Offset(1).EntireRow.Delete
      .AutoFilter
 End With
 
Bedankt voor jullie hulp in deze.:thumb:


Was me reeds gelukt het werkende te krijgen door er .AutoFilter 4, " ", 7 van te maken .
Tussen de "" 3 spaties toegevoegd en werkt ook.

Heb ze nu aangepast naar .AutoFilter 4, "=", 7 en die werkt natuurlijk ook
 
Waarschijnlijk sneller bij veel data. De rest van de code kan ook veel eenvoudiger en sneller. Begin eerst met het opruimen van alle selects en selections.
Code:
Sub VenA()
  With Sheets("15 25").Cells(1).CurrentRegion
    ar = .Value
      For j = 2 To UBound(ar)
        If Left(ar(j, 1), 1) = 3 Or InStr("7-2017-3018-888", ar(j, 1)) Then c00 = c00 & ar(j, 1) & " "
      Next j
    .AutoFilter 1, Split(c00), xlFilterValues
    .Offset(1).EntireRow.Delete
    .AutoFilter
    .AutoFilter 4, "="
    .Offset(1).EntireRow.Delete
    .AutoFilter
  End With
End Sub
 
Dat kan eenvoudiger.
Code:
Sub hsv()
Dim sv, i As Long
With Sheets("15 25").CurrentRegion
sv = Array(Array("7-201", "7-301", "8-888"), "3-*")
   For i = 0 To 1
      .AutoFilter 1, sv(i), 7
      .Offset(1).EntireRow.Delete
    Next
     .AutoFilter
     .AutoFilter 4, "="
     .Offset(1).EntireRow.Delete
     .AutoFilter
  End With
End Sub
 
Laatst bewerkt:
Harry,

na een kleine aanpassing werkt jouw code.
Code:
Sub hsv()
Dim sv, i As Long
With Sheets("15 25").Cells(1).CurrentRegion
sv = Array(Array("7-201", "7-301", "8-888"), "3-*")
   For i = 0 To 1
      .AutoFilter 1, sv(i), 7
      .Offset(1).EntireRow.Delete
      .AutoFilter
    Next
      .AutoFilter 4, "="
     .Offset(1).EntireRow.Delete
     .AutoFilter
  End With
End Sub
Maar waarom die dubbele array, is daar een specifieke reden voor.?


Kan het ook op deze manier, of zie ik iets over het hoofd?
Code:
sv = Array("7-201", "7-301", "8-888", "3-*")
   For i = 0 To 3
 
Zonder je aanpassing ook Albert.

Je blijft namelijk in dezelfde kolom filteren.

De xlfiltervalue (7) doe ik in een keer met de eerste array.
De tweede doordat je met wildcards maar twee variabelen kwijt kan in de array.

Dus bv: array("3-*",4-*") of array("3-*","7-201") en niet array("3-*",4-*","5-*")


Ook niet: array("3-*","7-201","7-301","8-888")

de sv(0) is dus: array("7-201", "7-301", "8-888")
sv(1) = "3-*"

Met jouw methode ga je 4 keer filteren en kan je de xlfiltervalue of de ",7" weglaten.
 
Laatst bewerkt:
Harry,

Bedankt voor de duidelijke uitleg, weer iets geleerd.:thumb:
 
Andere methode.

Code:
Sub hsv_2()
 Range("p2") = "=sum(countif(A2,{""3-*"",""7-201"",""7-301"",""8-888""}))"
  With Cells(1).CurrentRegion
      .AdvancedFilter 1, Range("P1:P2")
      .Offset(1).EntireRow.Delete
      .AutoFilter
      .AutoFilter 4, "="
      .Offset(1).EntireRow.Delete
      .AutoFilter
  End With
 Range("p2").ClearContents
End Sub
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan