Multiple Filter

Status
Niet open voor verdere reacties.

1965Peter

Gebruiker
Lid geworden
20 jun 2016
Berichten
197
Hallo,

Ik wil graag dmv vba een filter aanzetten op kolom 21 met filter op 00005 &
op kolom 22 met filter op alles behalve 13 & 20.

Op kolom 21 doet ie het goed, maar op kolom 22 filters ie niets, wat mis ik?

Code:
Sub Multiple_Filter()

    With Cells(1).CurrentRegion
    
    .AutoFilter Field:=21, Criteria1:="00005"
    .AutoFilter Field:=22, Criteria1:="<>13", Operator:=xlAnd, Criteria2:="<>20"
    
    End With
  
End Sub
 

Bijlagen

Het komt omdat je kolom eerst op cel-eigenschap tekst heeft gestaan.
Je kan er alles van maken, maar je krijgt het niet weer op getal of standaard, al lijkt dat wel zo.

Enige remedie: plaats een 1 in een cel → kopieer die 1 en selecteer kolom 22 → plakken speciaal → waarden en vermenigvuldigen aanvinken en klik op OK.

Succes.
 
Of je zet een regel extra in je code

Code:
Sub Multiple_Filter()
 With Cells(1).CurrentRegion
    .Columns(22).Value = .Columns(22).Value
    .AutoFilter 21, "00005"
    .AutoFilter 22, "<>13", 1, "<>20"
 End With
End Sub
 
Als je niet weet wat je mist kun je het ook niet programmeren.
 
@Jec, Bij die van jou heb ik hetzelfde probleem, als beide filters aanstaan, doet ie niet wat ie moet doen, schakel je 1 filter uit, dan doet ie het wel op de andere filter.
Ik heb 'm als macro bestand toegevoegd, waarbij 1 filter uitstaat.
@HSV, getallen kolom 22 heb ik omgezet, maar mocht niet baten.
 

Bijlagen

Probeer de gewenste filters maar eens met de hand te zetten, ook dan lukt het niet, de OK knop wordt uitgegrijsd als er geen rijen dreigen over te blijven.
Kennelijk kun je de filters niet zodanig instellen dat er geen rijen meer zichtbaar zijn.
Zelfs met slechts één gevulde kolom lukt dat niet.
 
De uiteindelijke bedoeling was om alle regels te deleten met 00005 en geen 13 0f 20 hebben.
Ik zal dus moeten zoeken naar een andere oplossing begrijp ik.
 
Toch even verder gekeken dan mijn neus lang is, macro opgenomen met "getalfilters", "aangepast filter" et voilà, het werkt!

Code:
Sub Macro1()
    ActiveSheet.Range("$A$1:$V$17").AutoFilter Field:=21, Criteria1:="00005"
    ActiveSheet.Range("$A$1:$V$17").AutoFilter Field:=22, Criteria1:="<>13", _
        Operator:=xlAnd, Criteria2:="<>20"
End Sub
 
Ja, en wat is het verschil @AHulpje?

De code doet gewoon wat het moet doen.
Er is namelijk in het voorbeeldbestand geen 00005 met in kolom 22 een ander getal dan 13 en 20.
Maak maar eens op een willekeurig rij 00005 en 11 van.
 
@HSV
Ik zou zweren dat het bij mij niet werkte in het bestand uit #6, maar daar moet ik nu op terugkomen. Vlaag van verstandsverbijstering denk ik. De macro doet het prima.
Maar als ik met de hand de filters aanzet, eerst kolom 21 = 00005, werkt het filter op kolom 22 niet als ik simpelweg 13 en 20 uitvink, maar wel als ik ze uitvink via "getalfilters"; "aangepast filter" etc.
Wat is het verschil?
 
Ik vermoed dat het aangepaste getalfilter nog niet weet welke keuze je hebt gemaakt voordat je op OK drukt.
 
Variant met advanced filter:

Code:
Sub jec()
 Dim r
 With Cells(1).CurrentRegion
   Set r = .Offset(, .Columns.Count + 1).Range("a1:a2")
   r(2).Formula = "=(u2=""00005"")*(and(v2<>{13,20}))"
   .AdvancedFilter 1, r
   .Offset(1).EntireRow.Delete
   r.ClearContents
   .Parent.ShowAllData
 End With
End Sub
 
Laatst bewerkt:
Code:
Sub jecc()
 With Cells(1).CurrentRegion.Columns(22)
  .Offset(, 1).Value = Evaluate("if((" & .Offset(, -1).Address & "=""00005"")*(" & .Address & "<>13)*( " & .Address & "<>20),""#N/A"","""")")
   On Error Resume Next
  .Offset(, 1).SpecialCells(2, 16).EntireRow.Delete
 End With
End Sub
 
Code:
Sub hsv()
 Cells(1).CurrentRegion.Columns(22).Name = "b"
   [b] = [if((offset(b,,-1)="00005")*(b<>13)*(b<>20),"",b)]
   On Error Resume Next
  [b].SpecialCells(4).EntireRow.Delete
End Sub
 
Jec & Harry, beide macro's doen wat ik wilde bereiken.
Mag ik jullie weer hartelijk danken hiervoor.
Ik kan weer verder;)
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan