Avatar billede kim1a Ekspert
03. juli 2012 - 13:04 Der er 8 kommentarer og
1 løsning

Filter på mere end 2 kriterier (VBA)

Jeg trækker en liste, i denne liste indgår et antal kundenavne. Hvis jeg forsøger at optage en makro hvor jeg sorterer bestemte navne (datterselskaber) fra melder Excel fejl.

Det bunder i at jeg har 4 eller 5 navne som skal sorteres fra, men Excel forsøger i stedet at optage tilvalgsnavnene, og idet listen er lang går det hurtigt out of range. Den kan klare de første to:

Selection.AutoFilter Field:=Kundeudvælgelse, Criteria1:="<>datterselskab1*" Operator:=xlAnd, Criteria2:="<>datterselskab2*"

Men ikke en 3.

Som sagt er der fire eller fem datterselskaber som jeg skal sortere ud. Så vidt jeg kan google og læse mig frem til skal der skabes en støttetabel (måske array) som laver testen, idet man ikke kan filtrere på tre eller flere kriterier.
Er der ikke en anden måde at slippe udenom dette på?
Avatar billede store-morten Ekspert
03. juli 2012 - 15:30 #1
Selection.AutoFilter Field:=1, Criteria1:=Array( _
        "datterselskab1", "datterselskab2", "datterselskab3", "datterselskab4"), Operator _
        :=xlFilterValues
Avatar billede kim1a Ekspert
04. juli 2012 - 16:23 #2
Ja, det hjalp et stykke. Desværre med modsat fortegn :-) Altså nu tager den kun datterselskaber med - den skulle jo fjerne dem :-)

Måske det blot er xlFilterValues som skal hedde det "modsatte"?
Avatar billede store-morten Ekspert
04. juli 2012 - 22:02 #3
Kun 2 kriterier (med VBA) ;-)

Måske med listen i kolonne A og makroen laver en hjælpe kolonne ved siden af:
Sub Makro1()
With ActiveSheet
    .AutoFilterMode = False
    .Columns(2).Insert
    .Cells(1, 2) = "Vis"
    .Cells(2, 2).FormulaR1C1 = "=IF(OR(RC[-1]=""datterselskab1"",RC[-1]=""datterselskab2"",RC[-1]=""datterselskab3""),""Skjul"",""Vis"")"
    .Cells(2, 2).Select
End With
    Dim ref As String, kb As String, rk As Long
    kb = Mid(ActiveCell.Address, 2, InStr(2, ActiveCell.Address, "$") - 2)
    rk = ActiveSheet.Range("A65536").End(xlUp).Row
    Selection.AutoFill Destination:=Range(ActiveCell.Address & ":" & "$" & kb & "$" & rk)
    Selection.AutoFilter Field:=2, Criteria1:="Vis"
End Sub
Avatar billede kim1a Ekspert
05. juli 2012 - 14:43 #4
Din løsning fungerer sådan set udemærket - det var blot noget jeg havde håbet at kunne undgå.
Overraskende at der ikke er en nemmere måde?

I min proces kopieres listen (efter fra-filtrering af datterselskaber) over i et andet ark - måske det var nemmere at jeg simpelthen i dette ark slettede de linjer hvor datterselskaberne fremgår.

Nu skal naturligvis have point for dit forslag (jeg lader dog lige stå til i et par dage for at se om det virkelig ikke kan omgåes på andre måder).
Avatar billede kim1a Ekspert
12. juli 2012 - 12:58 #5
Jeg må nok erkende der ikke er en nem løsning :-(

Som sagt forestiller jeg mig at jeg i stedet kan slette når jeg har kopieret dataen over i nyt ark. Kan du som afsked give et forslag til VBAen der sletter en hel række som følge af en bestemt ordlyd i en given kolonne?
Avatar billede store-morten Ekspert
12. juli 2012 - 14:19 #6
Prøv at teste denne makro, lavet i anden forbindelse, i en kopi.

Sub Slet_Rækker_Med_Indtast()

On Error GoTo Slut
home = ActiveCell.Address
homeArk = ActiveSheet.Name

Application.ScreenUpdating = False

        Dim svar1 As String
        Dim svar2 As String
        svar1 = InputBox("Indtast kolonne bogstav", "Slet rækker, der indeholder ord?")
        If svar1 = vbchancel Then GoTo Slut
        svar2 = InputBox("Indtast søge ord?", "Slet rækker, der indeholder ord?")
        If svar2 = vbchancel Then GoTo Slut

Columns(svar1 & ":" & svar1).Select
    Selection.AutoFilter
    ActiveSheet.Range(svar1 & ":" & svar1).AutoFilter Field:=1, Criteria1:="=" & svar2 & "" _
        , Operator:=xlAnd
    Sidste = Cells(Rows.Count, svar1).End(xlUp).Row
If Sidste = 1 Then GoTo Ingen
    Rows("2:" & Sidste).Delete Shift:=xlUp
Ingen:
    ActiveSheet.Range(svar1 & ":" & svar1).AutoFilter Field:=1
    Selection.AutoFilter
    Range("A1").Select
   
Sheets(homeArk).Select
Range(home).Select

GoTo Slut
Slut:
Application.ScreenUpdating = True

End Sub
Avatar billede Slettet bruger
11. december 2014 - 13:25 #7
Hej.

Jeg mangler en makro, som kan filtrere en liste lokalt på dato_tidspunkt.
Den éne kolonne i listen hedder således dato_tidspunkt, og indeholder tidspunkter i dette format: 09-12-14 15:15.

Et andet sted i regnearket har jeg så indtastet kriterierne som følgende:

dato_tidspunkt      dato_tidspunkt       
>09-12-14 15:15    <09-12-14 16:15

Nå jeg laver filtreringen manuelt vi avanceret filtrering, fungere det fint, og jeg får alle poster der ligger inden for ovenstående kriterier.

Jeg har optaget en makro der skulle kunne gøre det, men når jeg bruger den , kommer der 0 poster i filtreringen.

det ville være super, hvis nogen har en løsning til hvad der skal stå i en makro der kan udføre opgaven.

På forhånd tak
Avatar billede kim1a Ekspert
11. december 2014 - 23:27 #8
Du bør oprette en ny tråd - denne tråd er lukket og det er langt fra sikkert folk ser dit spm.
Avatar billede Slettet bruger
12. december 2014 - 10:47 #9
Tak for info, det har jeg gjort nu.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Excel kurser for alle niveauer og behov – find det kursus, der passer til dig

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester

IT-JOB