Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1184to1188
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

Tino oder andere: Dein Code zur FilterungAdvanced

Tino oder andere: Dein Code zur FilterungAdvanced
Holger
Hallo Tino und alle anderen Wissenden,
du hast mir vor geraumer Zeit diesen Code gegeben zur AdvancedFilterung.
Ich habe das ganze reduziert auf den eigentlichen Code und versucht ihn
zu verstehen. Nachdem ich ihn jetzt so anpassen möchte, funktioniert er nicht mehr,
wahrscheinlich weil ich Spalten falsch angegeben oder ihn nicht genau verstehe.
Wozu z.B das Resize, warum werden zwei Zellen als Kriterium angegeben et cetera.
Kannst du mir hier nochmal weiterhelfen?
Sheet "4 Schritt" mit Modul mdl_4, hier klappt es nicht mehr.
https://www.herber.de/bbs/user/72227.xlsm
Im Detail muesste ich wissen, wie ich das immer anpassen muss, also
Spalten, Zeilen und Kriterien.
Sub test4()
Dim strTest As String
strTest = "DE"
Range("A4").Value = strTest
With Application
.ScreenUpdating = False
.EnableEvents = False
If Worksheets("3 Schritt").FilterMode Then Worksheets("3 Schritt").ShowAllData
With Range("B10", Cells(Rows.Count, 2).End(xlUp)).Resize(, 10)
Range("K11").FormulaR1C1 = "=COUNTIF(R4C1,""*""&RC1&""*"")>0"
.AdvancedFilter xlFilterInPlace, Range("K10:K11")
'Range("K12").Clear
End With
.EnableEvents = True
End With
End Sub

8
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Benutzer
Anzeige
so müsste es gehen
10.11.2010 10:04:36
Tino
Hallo,
Resize ändert die Größe des Bereichs um die angegebenen Zeilen oder in diesem Fall Spalten.
Bei Dir ist der Fehler in der Formel
"=COUNTIF(R4C1,""*""&RC1&""*"")>0"
die bezieht sich auf die falschen Zellen und sind auch falsche eine referenziert.
Bei Dir wird diese Formel in die Zelle K11 geschrieben.
=ZÄHLENWENN($A$4;"*"&$A11&"*")>0
Wir brauchen aber diese
=ZÄHLENWENN($B11;"*"&$A$4&"*")>0
Also müsste der Code so funktionieren.
Sub test4()
Dim strTest As String
    
    strTest = "DE"

    Range("A4").Value = strTest

    With Application
        .ScreenUpdating = False
        .EnableEvents = False
            If Worksheets("4 Schritt").FilterMode Then Worksheets("4 Schritt").ShowAllData
            With Range("B10", Cells(Rows.Count, 2).End(xlUp)).Resize(, 10)
                Range("K11").FormulaR1C1 = "=COUNTIF(RC2,""*""&R4C1&""*"")>0"
                .AdvancedFilter xlFilterInPlace, Range("K10:K11")
                Range("K12").Clear
            End With
        .EnableEvents = True
        .ScreenUpdating = True
    End With

End Sub
Die zwei Zellen als Kriterium müssen sein, weil dieser Filter immer mit einer Überschrift arbeitet.
Bei dieser Art der Verwendung des Filters, kann diese aber leer bleiben.
Gruß Tino
Anzeige
Code für Formel einfacher
10.11.2010 10:15:57
Tino
Hallo,
Du kannst die Formel Zeile auch einfacher schreiben bzw. verständlicher.
Range("K11").FormulaLocal = "=ZÄHLENWENN($B11;""*""&$A$4&""*"")>0"
Wichtig ist nur die Anführungszeichen müssen bei Text verdoppelt werden.
Gruß Tino
Jetzt wieder nicht ...
10.11.2010 10:37:49
Holger
Hi Tino,
Klasse, mit der neuen Codezeile filter er wieder, aber leider nicht, wenn nach mehreren gefiltert werden soll. Also DE klappt, DE AT klappt nicht.
Kannst du das noch beheben?
Hier der Code und die Datei:
https://www.herber.de/bbs/user/72231.xlsm
Sub test4()
Dim strTest As String
strTest = "DE AT"
Range("A4").Value = strTest
With Application
.ScreenUpdating = False
.EnableEvents = False
If Worksheets("4 Schritt").FilterMode Then Worksheets("4 Schritt").ShowAllData
With Range("B10", Cells(Rows.Count, 2).End(xlUp)).Resize(, 10)
Range("K11").FormulaLocal = "=ZÄHLENWENN($B11;""*""&$A$4&""*"")>0"
.AdvancedFilter xlFilterInPlace, Range("K10:K11")
'Range("K12").Clear
End With
.EnableEvents = True
End With
End Sub

Anzeige
eine Möglichkeit ist
10.11.2010 11:09:15
Tino
Hallo,
dazu fällt mir spontan ein, dass wir uns eine Oder Formel daraus zusammenbauen können.
Option Explicit

Sub test4()
Dim strTest As String, tmpArray, A&
    
    strTest = "DE AT"
    Range("A4").Value = strTest
    
    tmpArray = Split(strTest, " ")
    
    'hier wird eine Oder Formel zusammengebaut 
    For A = Lbound(tmpArray) To Ubound(tmpArray)
        tmpArray(A) = "ZÄHLENWENN($B11;""*" & tmpArray(A) & "*"")"
    Next A
    strTest = "=ODER(" & Join(tmpArray, ";") & ")"
    '____
     
    With Application
        .ScreenUpdating = False
        .EnableEvents = False
            If Worksheets("4 Schritt").FilterMode Then Worksheets("4 Schritt").ShowAllData
            With Range("B10", Cells(Rows.Count, 2).End(xlUp)).Resize(, 10)
                Range("K11").FormulaLocal = strTest
                .AdvancedFilter xlFilterInPlace, Range("K10:K11")
                'Range("K12").Clear 
            End With
        .EnableEvents = True
    End With
End Sub
Oder wir können es so aufbauen wie hier beschrieben.
http://www.online-excel.de/excel/singsel.php?f=6
Gruß Tino
Anzeige
Unglaublich
10.11.2010 11:15:16
Holger
Hi Tino,
Es funktioniert. Jetzt verstehe ich es zwar noch weniger als vorher, aber das werde
ich nachholen durch stundelandes Auseinanderfieseln ;).
Was ist jetzt also wichtig, weil ich werde den Code in verschiedenen Sheets einsetzen mit immer unterschiedlichen Spaltenaufbau.
Was macht die neue Formel eigentlich?
Hm, kann gut sein, dass ich Dich später einmal dazu nochmal belästigen werde.
HERZLICHEN DANK FÜR DEINE MÜHE!!!
Gruß
Holger
hier eine zweite Variante, vielleicht ...
10.11.2010 11:43:04
Tino
Hallo,
ist diese besser nachzuvollziehen.
Diese läuft ohne Formel, dafür benötigt diese wieder die Überschrift von Spalte B.
Die Oder Argumente werden einfach untereinander geschrieben,
dafür kannst Du diese an einer beliebigen Stelle platzzieren (auch auf einer anderen Tabelle),
wichtig ist eben die Überschrift.
Sub test4()
Dim strTest As String
Dim rngKrit As Range, ArrayArg
    
strTest = "DE AT"

Range("A4").Value = strTest
ArrayArg = Split(strTest, " ") 'Argumente in ein Array 
Set rngKrit = Range("K10").Resize(Ubound(ArrayArg) + 2) 'Überschrift + Argumente 

With Application
    .ScreenUpdating = False
    .EnableEvents = False
        
        If Worksheets("4 Schritt").FilterMode Then Worksheets("4 Schritt").ShowAllData
        
        With rngKrit
            .Cells(1, 1).Value = Cells(10, 2).Value 'Überschrift 
            .Cells(2, 1).Resize(Ubound(ArrayArg) + 1) = Application.Transpose(ArrayArg) 'Argumente 
            With Range("B10", Cells(Rows.Count, 2).End(xlUp)) 'Filterbereich Spalte B 
                .AdvancedFilter xlFilterInPlace, rngKrit
            End With
            .Clear 'Hilfszellen löschen 
        End With
    
    .EnableEvents = True
    .ScreenUpdating = True
End With

End Sub
Wenn später noch Fragen sind kann ich heute nicht mehr Antworten, bin dann auf der Arbeit,
kann dann erst morgen wieder wenn nichts anderes anliegt.
Gruß Tino
Anzeige
AW: hier eine zweite Variante, vielleicht ...
10.11.2010 13:43:17
Holger
Hi Tino,
wow, oder Oje. Arrays habe ich sozusagen noch kaum erkundet, daher ist diese
Lösung noch komplizierter und ich verstehe nicht, wo ich hier was anpassen muss.
Also wo müssen die Daten stehen, wo die Überschrift, wo das Kriterium?
Hm, vielleicht wird es klarer, wenn ic etwas damit teste!
Nochmal Herzlichen Dank, das ist wirklich super!!!!
Meine Idee nun:
In einer elle stehen ein oder mehrere Werte.
Der User macht einen Doppelklick auf diese Zelle und es wird automatisch
auf die Werte der Zelle gefiltert. In den Tabellen, die ich habe, sehr praktisch.
Anzeige
hab Dir mal was zusammengebaut...
11.11.2010 11:21:38
Tino
Hallo,
so wie ich Dich verstanden habe.
Doppelklick auf Tabelle 'Alle' in Spalte B setzt den Filter auf alle Tabelle
mit dem Namen Tab...
Die Spalte C dient als Hilfsspalte,
die kann auch wo anders liegen, muss eben im Code wieder angepasst werden.
https://www.herber.de/bbs/user/72253.xlsm
Gruß Tino

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige