Abfrage mit 2 Codes gleichzeitig

Yaslaw

n/a
Moderator
Makro aufnehmen und schauen was geschrieben wird.
Visual Basic:
Sub Macro2()
    Rows("1:1").Select
    Selection.AutoFilter
    ActiveSheet.Range("$A$1:$H$6").AutoFilter Field:=6, Criteria1:=">A" , _
        Operator:=xlAnd
    ActiveSheet.Range("$A$1:$H$6").AutoFilter Field:=8, Criteria1:="<50", _
        Operator:=xlAnd
End Sub
Anschliessend unnötiges Entfernen und das ganze testen
Visual Basic:
Sub Macro2()
    Rows("1:1").Select
    Selection.AutoFilter
    ActiveSheet.Range("$A$1:$H$6").AutoFilter Field:=6, Criteria1:=">A"
    ActiveSheet.Range("$A$1:$H$6").AutoFilter Field:=8, Criteria1:="<50"
End Sub
 

josef24

Erfahrenes Mitglied
Hallo und Danke. Der Filter entspricht natürlich den Vorgaben aus meiner letzten Anfrage, dafür ein Dankeschön. Wahrscheinlich ist es meine Unterlassung, nochmal extra zu erwähnen, das mein Filter die sowohl als auch Funktion haben sollte. Es wäre jede Spalte (6 + 8) zu berücksichtigen die einen Eintrag aufweist. Vielleicht kann der Anhang das verdeutlichen. Es soll ja gleichzeitig der gefilterte Datenumfang in eine neue Tabelle geschrieben werden. (geschieht hiermit auch)
Danke nochmal bis dahin. Gruß Josef
Code:
Sub Wolli()
  
    Dim wsZ As Worksheet

    Set wsZ = Tabelle2
    With Tabelle1.Range("A1:z300")
    Rows("1:1").Select
        Selection.AutoFilter
        ActiveSheet.Range("$A$1:$H$16").AutoFilter Field:=6, Criteria1:=">=a", Operator:=xlOr
        ActiveSheet.Range("$A$1:$H$16").AutoFilter Field:=8, Criteria1:="<=110", Operator:=xlOr
    
            wsZ.Range("A1:Z300").ClearContents
                 With .Parent.AutoFilter.Range
                  .Columns(1).Copy Destination:=wsZ.Range("a1")
                  .Columns(2).Copy Destination:=wsZ.Range("b1")
                  .Columns(3).Copy Destination:=wsZ.Range("c1")
                    .Columns(4).Copy Destination:=wsZ.Range("d1")
                   .Columns(5).Copy Destination:=wsZ.Range("e1")
                   .Columns(6).Copy Destination:=wsZ.Range("f1")
                   .Columns(7).Copy Destination:=wsZ.Range("g1")
                   .Columns(8).Copy
                    wsZ.Range("h1").PasteSpecial Paste:=xlValues
                End With
            .AutoFilter
        End With
    Application.CutCopyMode = False

End Sub
 

Yaslaw

n/a
Moderator
Hab mal schnell Google angeworfen und etwas gefunden.
AdvencedFilter: http://www.contextures.com/xladvfilter01.html
Damit kann man auch gleich kopieren!

Angewendet auf dein Problem
Visual Basic:
Sub Macro1()
    Dim wsFilter As Worksheet
    Dim wsSource As Worksheet
    Dim wsTarget As Worksheet
    
    'Worksheets definieren
    Set wsSource = ActiveWorkbook.Worksheets("Tabelle1")
    Set wsTarget = ActiveWorkbook.Worksheets("Tabelle2")
    wsTarget.UsedRange.ClearContents

    'Filtersheet erstellen
    Set wsFilter = ActiveWorkbook.Worksheets.add()
    wsFilter.name = "FILTER"
    
    'Filter erstellen
    'http://www.contextures.com/xladvfilter01.html -> AND vs OR
    
    '  | A         | B           |
    '-----------------------------
    '1 | Bemerkung | Tage gültig |
    '2 | >A        |             |
    '3 |           | <50         |
    
    'Spaltennamen übernehmen
    wsFilter.Range("A1").value = wsSource.Range("F1").value
    wsFilter.Range("B1").value = wsSource.Range("H1").value
    'Bedinungen einfügen. Für OR auf verscheidenen Zeilen
    wsFilter.Range("A2").value = ">A"
    wsFilter.Range("B3").value = "<50"
    
    'Daten filtern und kopieren
    wsSource.UsedRange.AdvancedFilter xlFilterCopy, wsFilter.UsedRange, wsTarget.Range("A1"), False
    
    'Filtersheet wieder löschen
    Application.DisplayAlerts = False
    wsFilter.Delete
    Application.DisplayAlerts = True
End Sub
 

josef24

Erfahrenes Mitglied
Ja, genau so etwas hatte ich gesucht. Hast wohl mit einem speziellen Suchnamen viel bessere Möglichkeiten auswählen können, als es mir möglich war. Dafür vielen vielen Dank. Eine Frage noch: Darf ich jemand anderes auf diese Seite verweisen, der mit ähnlichem Problem beschäftigt war? Nochmals vielen Dank und noch eine schöne Zeit. Herzliche Grüße Josef
 

Yaslaw

n/a
Moderator
Das ist ein offenes Forum. Du darfst jeden hierher verweisen. Das ist sogar erwünscht!
Rechts unter jedem Beitrag hat es eine Nummer mit einem Link. In diesem Beispiel #13 . Am besten diesen Link posten, dann führt er direkt zur Lösung.

Googlesuchbegriff: excel autofilter or multiple columns
 

josef24

Erfahrenes Mitglied
Hallo und einen schönen Tag wünsche ich. Wie schon erwähnt, das Programm läuft super. Möchte noch das sich die Tabelle1 zum Abschluss direkt öffnet. Dazu habe ich folgende Ergänzung eingebracht. Damit komme ich aber nicht weiter, weil er mir irgendeine Tabelle1 zeigt, aber nicht die von mir gewollte. Hänge mal den entsprechenden Code- abschnitt an. Danke bis dahin. Gruß Josef
Code:
    'Filtersheet wieder löschen
   Application.DisplayAlerts = False
    wsFilter.Delete
    Application.DisplayAlerts = True
  
       Application.Dialogs(xlDialogOpen).Show "Tabelle1"
            
End Sub
 

Yaslaw

n/a
Moderator
Wozu über einen Dialog? Das ist etwa der komplizierteste unbrauchbarste Weg den es gibt.
Tabelle1 ist doch die Variable wsSource.
Dann ists ganz einfach
Code:
wsSource.Select
 

josef24

Erfahrenes Mitglied
Guten Tag und einen schönen Sonntag. Habe mit dem "direkt öffnen" = wsSource.Select dennoch ein Problem. Wenn ich die Tabelle1 ausgeblendet habe, aber dennoch mit der Auswahl die Tabelle1 direkt öffnen will, bringt er den Hinweis: "Laufzeitfehler 1004". Die Methode select für das Objekt "_Worksheet" ist fehlgeschlagen.
Fehler bei "wsTarget.Select". Kann mich jemand hierfür mit einer ggf. Ergänzung unterstützen? Der VBACode ist wie unter #13 geschrieben, lediglich der Satz wsSource.Select ist ergänzt.
Danke und Gruß Josef
 

Zvoni

Erfahrenes Mitglied
Das Worksheet-Objekt hat eine Visible-Eigenschaft-

Visual Basic:
If Not wsSource.Visible Then wsSource.Visible=True
wsSource.Select
 

Neue Beiträge