Microsoft Excel

Herbers Excel/VBA-Archiv

Informationen und Beispiele zum Thema InputBox
BildScreenshot zu InputBox InputBox-Seite mit Beispielarbeitsmappe aufrufen
Informationen und Beispiele zum Thema MsgBox
BildScreenshot zu MsgBox MsgBox-Seite mit Beispielarbeitsmappe aufrufen

Filter mit Makro setzen

Betrifft: Filter mit Makro setzen von: Jochen Bode
Geschrieben am: 23.10.2014 14:21:46

Hallo Excel-Freunde, ich habe mir folgendes Makro aufgezeichnet:

Sub Filter_setzen()
    Sheets("Kriterien").Select
    ActiveSheet.Range("$A$2:$I$1002").AutoFilter Field:=1, Criteria1:=Array("3" _
        , "5", "8"), Operator:=xlFilterValues
    Sheets("Daten").Select
End Sub
Ich möchte dieses Makro allerdings dynamisch haben, das heißt dass ich in einem Auswahlfenster die Kriterien von 1 – 11 in verschiedenen Konstellationen zusammenstelle. Hat irgendjemand eine Lösung für mich parat?

Danke im Voraus
Gruß
Jochen

  

Betrifft: AW: Filter mit Makro setzen von: Rolf.dW
Geschrieben am: 23.10.2014 14:29:15

Hallo Jochen,
hier ein kl. Beispiel:

Option Explicit

Sub FLTR_Titel()

    Dim inpB As String, name As String
    Dim fz As Long
    Dim Bereich As Range
    
    BlattschutzNein   'Sub-Routine
    Range("HOME").Offset(1, 1).Select
   '(Kurz-) Bezeichnung erfassen
    inpB = InputBox _
    ("Bitte den Titel eingeben.", _
    "Filterkriterium")
    If inpB = "" Then
        frmMasterFILTERN.Hide
        Exit Sub
    Else
        With Range("HOME").Offset(-2, 1)
            .Offset(-1, 0).Value = "gefiltert nach:"
            .Value = "TITEL"
            .Font.name = "Miriam"
            .Font.ColorIndex = 6
            .Font.Shadow = True
        End With
    End If
   'Komplette Bezeichnung suchen
    Set Bereich = Range("Titel").Find(inpB, LookIn:=xlValues, _
        LookAt:=xlPart, SearchOrder:=xlByColumns)
    If Bereich Is Nothing Then
        MsgBox "Der Titel konnte nicht gefunden werden."
        frmMasterFILTERN.Hide
        Range("HOME").Offset(1, 1).Select
    Else
        name = Bereich.Value
    End If
   'Filtern
    frmMasterFILTERN.Hide
    Range("Titel").AutoFilter
    ActiveSheet.Range("Titel").AutoFilter Field:=1, Criteria1:=name
    For fz = Range("HOME").Offset(1, 0).Row To ActiveSheet.UsedRange.Rows.Count
        If ActiveSheet.Rows(fz).Hidden <> True Then
            Range("B" & fz).Select
            Exit For
        End If
    Next fz
    BlattschutzJa   'Sub-Routine
    
End Sub



  

Betrifft: AW: Filter mit Makro setzen von: Jochen Bode
Geschrieben am: 23.10.2014 14:53:08

Hallo Rolf,
erst einmal danke für die schnelle Antwort.
Da ich nur mit dem Rekorder arbeite fehlt mir leider das Verständnis. Würdest Du mir das eventuell so zusammen schreiben das es für meine Bedürfnisse passt.
Zu meinem Makro:
Ich starte auf der “Daten“ Tabelle. Hier möchte ich die Kriterien aussuchen die dann auf der “Daten“ Tabelle gefiltert werden. Die Daten die dort dann sichtbar bleiben kopiere ich mir in ein zweites Tabellenblatt.
Danke für Deine Arbeit.
Gruß
Jochen


  

Betrifft: AW: Filter mit Makro setzen von: Rolf.dW
Geschrieben am: 23.10.2014 18:19:04

Hallo Jochen,

um das Makro an zu passen benötige ich eine Beispieldatei. Die Daten interessieren mich nicht; wichtig ist die Struktur deiner Tabelle.

Gruß, Rolf


  

Betrifft: AW: Filter mit Makro setzen von: Jochen Bode
Geschrieben am: 24.10.2014 08:12:49

Hallo Rolf, die Datei ist leider zu groß zu hochladen.
Ich habe aber mein Makro, das ich schon einmal eingefügt habe, soweit das ich die Variablen ausgelesen bekomme. Nun ist noch das Problem dieser Wert in den Filter zugeben.
Hast Du da eventuell eine Lösung parat.

Sub Filter_setzen()
    Sheets("Baustellendaten").Select
    test = ""
    For i = 1 To 11
        If Cells(i + 26, 3) = "x" Then
            test = test & Chr(34) & Cells(i + 26, 2) & Chr(34) & ", "
        End If
    Next
    test = Left(test, Len(test) - 2)
    MsgBox test
    
    Sheets("Kriterien für Checklisten").Select
    ActiveSheet.Range("$A$2:$I$1102").AutoFilter Field:=1, Criteria1:=Array(test), Operator:= _
xlFilterValues
    Sheets("Baustellendaten").Select
    End Sub


Im Moment wird auss dem Filter alles entfernt.

Gruß
Jochen


  

Betrifft: AW: Filter mit Makro setzen von: Rolf.dW
Geschrieben am: 24.10.2014 08:27:19

Hallo Jochen,

eine abgespeckte Version deiner Datei reicht doch. Ich möchte nur wissen, wie du deine Tabelle strukturiert hast; ggf. mit Angabe, ob die Anzahl verwendeter Zeilen limitiert oder nach oben hin offen ist.
Dein beigefügtes Makro hilft mir leider nicht weiter.

Gruß, Rolf


  

Betrifft: AW: Filter mit Makro setzen von: Daniel
Geschrieben am: 24.10.2014 08:37:05

Hi

das Problem ist, dass

test = test & Chr(34) & Cells(i + 26, 2) & Chr(34) & ", "
kein Array erstellt, sondern nur einen Textstring.

um das Array für deinen Filter zu erstellen musst du so vorgehen:

1. Den String test ohne Anführungszeichen erstellen, dabei das Trennzeichen voranstellen:
test = test & ", " & Cells(i + 26, 2) 
2. das erste Trennzeichen entfernen, damit nur zwischen den Werten Trennzeichen stehen (der Zahlenwert ist "länge des Trennzeichen + 1"):
test = Mid$(test, 3)
3. den Text in ein Array wandeln, dazu kannst du die Funktion SPLIT verwenden:
test = Split(test, ", ")
jetzt ist test kein Textstring mehr sondern ein Array, welches du im Filter als Mehrfachkriterium verwenden kannst.
Bei dieser Vorgehensweise wandelt sich der Variablentyp von test, dh du musst wenn du mit Option Explicit arbeitest, diese als Variant deklarieren.


Gruß Daniel


  

Betrifft: AW: Filter mit Makro setzen von: Rolf.dW
Geschrieben am: 24.10.2014 10:02:34

Hallo Jochen,

warum machst du es so kompliziert? Dass in deinem Makro die Variablen nicht definiert waren, hat mich schon etwas verwundert, war mir aber zunächst einmal egal. Ohne Bspl-Datei bin ich raus aus diesem Thread.

Gruß, Rolf


  

Betrifft: AW: Filter mit Makro setzen von: Jochen Bode
Geschrieben am: 24.10.2014 12:50:13

Hallo Daniel,
das war eine SUPER Hilfe, danke.
Rolf Dir auch noch einmal ein Dankeschön.

Gruß
Jochen


 

Beiträge aus den Excel-Beispielen zum Thema "Filter mit Makro setzen"