Filterung Spalte Basierend auf VBA-Bereich
Arbeite ich jetzt mit Daten aus einem mainframecomputer nicht im Gegensatz zu den hier präsentierten Daten. In diesem Fall habe ich alle strings sind ähnlich 100-AAA für meine Kriterien und für mein Ziel-Datensatz. Ich habe gesucht, für eine ähnliche Lösung, aber ich habe nicht gefunden, einen direkten filter durch Auswahl Frage für VBA.
Ich bin versucht zu filtern, einen großen Datensatz auf der Grundlage einer Reihe von Kriterien. Ursprünglich habe ich angefangen zu spielen mit Sammlungen in separaten Klassen/Subroutinen, aber dann habe ich komprimiert, um die Nutzung von Bereichen innerhalb einer einzigen Unterprogramm, wie folgt:
Sub FilterTest1()
Dim RngOne As Range
Dim LastCell As Long
Sheets("Criteria").Activate
Sheets("Criteria").Select
Range("A1").Select
LastCell = Application.WorksheetFunction.CountA(ActiveSheet.Range("A:A"))
Set RngOne = ActiveSheet.Range("A2:A" & LastCell)
Sheets("Sheet 1").Activate
Sheets("Sheet 1").Select
With ActiveSheet
If .FilterMode Then
.ShowAllData
End If
End With
Columns("A:A").Select
Selection.AutoFilter
ActiveSheet.Range("A:A").AutoFilter Field:=1, Criteria1:=RngOne, Operator:=xlOr
End Sub
Leider meine Reihe von Zellen nicht, die Daten filtern, auch wenn Sie mit Kriterien wie Operator:=xlOr
- es zeigt nur die Letzte Zelle Wert für die Kriterien. Der VBA-code nicht scheitern - es ist nur nicht die filter entsprechend auf der Reihe.
Ich bin sicher, es gibt eine einfache Lösung, aber ich kann nicht ganz sehen.
Hat diese frühere Antwort zu einer ähnlichen Frage helfen - stackoverflow.com/a/7863452/53614 ? Ich benutze ADO auf Maschinen bei der Arbeit, wo ich keine admin-Rechte und es funktioniert OK. YMMV, aber es lohnt sich, es ein Schuss
Okay; ich gebe es einen Schuss über das Wochenende und sehen Sie, wie setzt es Anfang Nächster Woche. Es kann gut sein, lohnt es sich ADO verwenden, für einige meiner größeren datasets, wie alles, was sich auf SQL wird wahrscheinlich ausführen, dass sehr viel schneller auf die Dauer. Wenn es funktioniert, gut, dass heißt, ein weiteres +1 für deine Antwort =)
InformationsquelleAutor JackOrangeLantern | 2012-08-08
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ihre aktuelle Zeile:
versucht filtern Sie Ihre erste Feld durch einen
Range
Objekt, nicht durch jeden Wert in der Reihe.Habe ich eine Möglichkeit, dies zu tun unten, durch das laden Sie Ihre Werte in ein array und dann übergeben Sie das array zu den filter-Kriterien.
Einige Punkte, die erwähnenswert ist, Ihnen zu helfen (und jemand in der Zukunft):
Folgenden Code:
.Range("A:A").AutoFilter Field:=1, Criteria1:=Array(strList), Operator:=xlFilterValues
. Tun Sie, wissen Sie, warum dies Auftritt? Der rest des Codes scheint zu funktionieren korrekt.Hast du meine Antwort bearbeitet? Fixiert, dass ich problem in meinem original (aber gelöscht) post.
Ich werde jetzt testen - gerade zurück. =)
Getestet - eine genaue übereinstimmung mit den Kriterien. Es sieht aus wie ein array bekommt den job sehr gut gemacht. Ich hatte im großen und ganzen umgestellt, um die Rahmen von Sammlungen, Wörterbücher und hashsets so viel wie möglich in C# für die Sortierung Zwecke, aber die Operationen, die Sie tun können, mit arrays zu arbeiten scheinen besser für VBA. Tief unten, ich freue mich auf eine starke, Allgemeine OO-Lösung, und wird wahrscheinlich in der post ein Q in Richtung auf das Ende, vielleicht auf codereview.stackexchange. Das heißt, deine Antwort ist sehr gut, und es bekommt den job zu erledigen viel schneller als die rekursive Schleife, die ich verwendet, die stürzte mein excel-sheet 😉
Toll. Froh, dass es funktionierte. Ich hatte Spaß es herauszufinden, wie gut!
InformationsquelleAutor Scott Holtzman
Einer Sache zu beachten ist, dass die
Criteria1
erfordert string-Variablen als argument. Sie zuweisen können, einen Bereich in ein array übergeben dann diestring
array an die Kriterien. Ein weiterer Hinweis ist, dass ein array übergeben, um die Kriterien, nach meinem wissen, hat es in einer Zeile, nicht Spalte zB.StringArray(0,3)
stattStringArray(3,0)
. Also, warum warst du immer der Letzte Wert in Ihrem Sortiment. Verwenden Sie einfachApplication.Transpose(StringArray)
zu konvertieren, um eine Zeile.Dieses kleine Stückchen code funktioniert für mich, und ist leicht erweiterbar zu größeren arrays.
InformationsquelleAutor Rory