Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1220to1224
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Mit gefiltertem Wert im Makro arbeiten

Mit gefiltertem Wert im Makro arbeiten
Michael
Hallo zusammen,
folgende Situation:
Der Autofilter ist aktiv und es wurde bereits über den "benutzerdefinierten Autofilter" ein bestimmter Wert herausgefiltert.
Ich möchte nun mit diesem Wert arbeiten, jedoch nicht über die angezeigten Zellen, sondern über den "benutzterdefinierten Autofilter". Ich kenne den Makrobefehl leider nicht, um mit dem benutzerdefinierten Wert zu arbeiten.
Ich hoffe, dass ich mich verständlich ausgedrückt habe. Es ist immer ein wenig schwierig das Problem darzustellen :)
Vielen Dank!

17
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Benutzer
Anzeige
AW: Mit gefiltertem Wert im Makro arbeiten
02.07.2011 13:28:20
Michael
Hallo,
vielen Dank, aber ? ;-)
Gruß Michael Braun
ein Ansatz
02.07.2011 13:46:40
Tino
Hallo,
hier mal ein Ansatz der ausbaufähig ist.
Sub Makro1()
Dim i As Integer, ii As Integer, ArrValue
With Sheets("Tabelle1")
    If .FilterMode Then
        With .AutoFilter
            For i = 1 To .Filters.Count 'Anzahl Felder 
                If .Filters(i).On Then 'Feld gefiltert? 
                    With .Filters(i)
                        Select Case .Operator
                            Case xlFilterValues 'Einzelwerte 
                                ArrValue = .Criteria1 'Rückgabe Array 
                                For ii = Lbound(ArrValue) To Ubound(ArrValue)
                                    Debug.Print ArrValue(ii)
                                Next ii
                            
                            Case xlAnd, xlOr 'Und, Oder 
                                Debug.Print .Operator
                                Debug.Print .Criteria1
                                Debug.Print .Criteria2
                        End Select
                    End With
                End If
            Next i
        End With
    End If
End With
End Sub
Gruß Tino
Anzeige
AW: ein Ansatz
02.07.2011 15:01:42
Michael
Hallo,
danke erst einmal.
Das sieht jetzt recht kompliziert aus. Ich hatte eher mit etwas Kürzerem gerechnet :)
Z.B. wenn ich in Excel etwas mit dem benutzerdefinierten Autofilter suche (hier der Name "Meier") und das per Makrorekorder aufnehme, dann bekomme ich ja auch nur eine Zeile:
Selection.AutoFilter Field:=1, Criteria1:="=Meier", Operator:= _
xlAnd
Wie kann ich jetzt in einem weiteren Makro mit dem Criteria1:="=Meier" weiterarbeiten, wenn der Autofilter noch mit dem Namen "Meier" gefiltert ist?
AW: ein Ansatz
02.07.2011 15:28:53
hary
Hallo
Tino wird bestimmt schoener loesen, aber teste mal so.

Dim Kriterium As String 'diese zeile ganz ober ausserhalb der Subs
Selection.AutoFilter Field:=1, Criteria1:="Meier", Operator:= xlAnd
Kriterium = ActiveSheet.AutoFilter.Filters(1).Criteria1 ' liest das Criteria1 aus
MsgBox Right(Kriterium, Len(Kriterium) - 1) ' MsgBox gibt Meier wieder

vlt. hilft's weiter.
gruss hary
Anzeige
AW: ein Ansatz
02.07.2011 16:11:01
Michael
Hallo Harry,
genau das suche ich.
Probleme gibts hierbei noch mit einem Laufzeitfehler '1004'. Er markiert mir folgende Zeile:
Kriterium = ActiveSheet.AutoFilter.Filters(1).Criteria1
Habe diese Zeile aber außerhalb der Subs gesetzt.
Liegt es vielleicht daran, dass es sich hierbei nicht um ein Modul handelt?
Wenn ich mein Makro jetzt erweitern will, sprich ich möchte den Criteria1 wert in Tabellenblatt2 suchen, kann ich dann so fortfahren oder muss nach What:= etwas anderes stehen als Kriterium?
Sheets("Tabelle2").Activate
Cells.Find(What:=Kriterium, After:=ActiveCell, LookIn:=xlFormulas _
, LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, _
MatchCase:=False).Activate
Anzeige
AW: ein Ansatz
02.07.2011 16:19:08
hary
hallo
Nee, sollte so aussehen.

Option Explicit
Dim Kriterium As String 'das ausserhalb damit fuers 2. Makro verfuegbar
Sub Filtersetzen()
Range("A1:B5").AutoFilter Field:=1, Criteria1:="Meier", Operator:=xlAnd
Kriterium = ActiveSheet.AutoFilter.Filters(1).Criteria1 ' liest das Kriterium aus
End Sub
Sub KriteriumZeigen()
MsgBox Right(Kriterium, Len(Kriterium) - 1) ' MsgBox gibt Meier wieder
End Sub

gruss hary
AW: ein Ansatz
02.07.2011 16:06:19
Tino
Hallo,
das ist ja meiner Meinung nach das Problem.
Wenn nur gefiltert wird wie Du beschreibst ist es kein Hexenwerk.
With Sheets("Tabelle1")
    If .FilterMode Then
       If .AutoFilter.Filters(1).On Then
            MsgBox .AutoFilter.Filters(1).Criteria1
       End If
    End If
End With

Aber was ist wenn eine der anderen Möglichkeiten zum Filtern verwendet wird?
Gruß Tino
Anzeige
AW: ein Ansatz
02.07.2011 16:45:24
Michael
Hi Tino,
jetzt kommen wir der Sache schon näher.
Also mein Makro sieht momentan wie folgt aus:
Sub Wert_suchen()
With Sheets("Tabelle1")
If .FilterMode Then
If .AutoFilter.Filters(1).On Then
MsgBox .AutoFilter.Filters(1).Criteria1
End If
End If
End With
Sheets("Tabelle2").Activate
Cells.Find(What:=?, After:=ActiveCell, LookIn:=xlFormulas _
, LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, _
MatchCase:=False).Activate
End Sub
Was muss ich hier bei What:= eintragen, damit er mir den aktuellen Wert im Autofilter wiedergibt bzw. findet?
Anzeige
vielleicht so...
02.07.2011 16:55:31
Tino
Hallo,
versuche es mal so.
Sub Wert_suchen()
Dim sFilterValue As String, rngFind As Range
With Sheets("Tabelle1")
    If .FilterMode Then
       If .AutoFilter.Filters(1).On Then
            sFilterValue = .AutoFilter.Filters(1).Criteria1
            sFilterValue = Mid$(sFilterValue, 2, Len(sFilterValue))
            
            Set rngFind = Sheets("Tabelle2").Cells.Find( _
                    What:=sFilterValue, LookIn:=xlValues _
                    , LookAt:=xlPart, SearchOrder:=xlByRows, _
                    SearchDirection:=xlNext, MatchCase:=False)
       End If
    End If
End With

If Not rngFind Is Nothing Then
    Application.Goto rngFind
Else
    MsgBox "'" & sFilterValue & "' wurde nicht gefunden!"
End If
End Sub
Gruß Tino
Anzeige
AW: vielleicht so...
02.07.2011 22:29:40
Michael
Hallo Tino,
leider klappt es noch nicht so ganz.
Jetzt kommt immer nur die Meldung " wurde nicht gefunden! obwohl die Werte in der zweiten Tabelle vorhanden sind und auch über die normale Suchfunktion (STRG F) gefunden werden können.
Hast du noch eine Idee?
AW: vielleicht so...
03.07.2011 08:58:30
Tino
Hallo,
lade mal ein Beispiel hoch.
Gruß Tino
AW: vielleicht so...
03.07.2011 12:47:48
Michael
Hallo Tino,
anbei das gewünschte Beispiel. Es bezieht sich nun in etwa auf mein Arbeitsbereich. In Wirklichkeit ist die Tabelle jedoch viel länger und enthält noch mehr Suchbegriffe.
Es wurde nach Spalte C gefiltert. Der gefilterte Wert soll nun anhand eines Makros in Tabelle2 gefunden werden.
https://www.herber.de/bbs/user/75568.xls
Ich hoffe, das hilft erst einmal weiter.
Anzeige
AW: vielleicht so...
03.07.2011 14:41:59
Michael
Ehh ja, sollte man zumindest meinen :)
Vielen Dank! Damit hast du mir sehr geholfen.
Und natürlich Dank an alle anderen!
AW: vielleicht so...
03.07.2011 14:53:42
Michael
Achso,
eine kleine Frage noch:
Wofür steht die 2 in der Spalte:
sFilterValue = Mid$(sFilterValue, 2, Len(sFilterValue))
AW: vielleicht so...
03.07.2011 15:02:43
Tino
Hallo,
aus der Hilfe zu Mid
"Position in string, an der die zurückzugebende Zeichenfolge beginnt"
Wir beginnen erst ab dem 2. Zeichen weil wir das = Zeichen am Anfang nicht brauchen,
also aus "=Achse" wird einfach "Achse"
Gruß Tino
Anzeige
AW: oder so
02.07.2011 17:54:09
fcs
Hallo Michael,
meine Version deckt auch die Filterauswahlmöglichhkeiten "enthält", "beginnt mit", "endet mit" ab.
Gruß
Franz
Sub Wert_suchen()
Dim Kriterium As String, Fundstelle As Range
With Sheets("Tabelle1")
If .FilterMode Then
If .AutoFilter.Filters(1).On Then
Kriterium = .AutoFilter.Filters(1).Criteria1
End If
End If
End With
If Left(Kriterium, 2) = "" Then
MsgBox "Kriterium """ & Kriterium & """ kann nicht gesucht werden!"
Else
If Left(Kriterium, 1) = "=" Then
Kriterium = Mid(Kriterium, 2)
End If
With Sheets("Tabelle2")
Set Fundstelle = .Cells.Find(What:=Kriterium, _
LookIn:=xlValues, _
LookAt:=xlWhole, SearchOrder:=xlByRows, SearchDirection:=xlNext, _
MatchCase:=False)
If Fundstelle Is Nothing Then
MsgBox "Kriterium """ & Kriterium & """ nicht gefunden"
Else
.Activate
Fundstelle.Activate
End If
End With
End If
End Sub

Anzeige

299 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige