Filtern über VBA
#1
Hallo,

Ich suche eine Möglichkeit eine bestimmte Spalte im 2. Tabellenblatt zu filtern.
Welche Spalte gefiltert werden soll, wird im 1. Tabellenblatt in einer Zelle bestimmt (z.B. D4) 
D4 ist im Inhalt von einer Tabelle abhängig, die auch im 1. Tabellenblatt ist.
Wenn D4 im 1. Tabellenblatt den Inhalt "Projekt A" hat dann soll im 2. Tabellenblatt die 1. Spalte nach der Zelle durchsucht werden die auch den Inhalt "Projekt A" hat.
Wenn diese Zeile gefunden ist, dann soll sie nach "x" gefiltert werden. Inhalt aller Zeilen ist entweder "x" oder "" (leer).
Das Filtern soll über einen Button ausgeführt werden.

Hat jemand eine Idee? Beispieldatei ist angehängt.
Ich kenne mich mit VBA nahezu gar nicht aus und benötige es wenn max. 1 mal im Jahr ^^.
Danke im voraus für gute Ideen.

Gruß
Florian


Angehängte Dateien
.xlsx   VBA Filtern.xlsx (Größe: 14,28 KB / Downloads: 2)
Antworten Top
#2
...Du kannst Dir aber auch gern das mal anschauen. Zum besseren Verständnis den ganzen Thread durchlesen... Ist nicht das Gleiche, aber das Prinzip passt ganz gut... :)
Der sicherste Ansatz für einen Irrtum ist der Glaube, alles im Griff zu haben.
Nur, weil ich den Recorder bedienen kann, macht mich das noch lange nicht zum Musiker.

Ciao, Ralf

Antworten Top
#3
Das Prinzip in dem Beitrag entspricht dem was ich suche.
Nur bei mir kommt noch hinzu, dass die "Projekte" in Tabelle1 in Zeilen und in Tabelle 2 in Spalten stehen.
Zusätzlich filtere ich nicht nach der Nummer sondern nur Zeilen die "x" enthalten.

Ich habe mich grade etwas dran versucht, bekomme es aber alleine nicht hin :(
Antworten Top
#4
(31.10.2022, 10:33)schokokekseis schrieb: Das Prinzip in dem Beitrag entspricht dem was ich suche.
Nur bei mir kommt noch hinzu, dass die "Projekte" in Tabelle1 in Zeilen und in Tabelle 2 in Spalten stehen.
Zusätzlich filtere ich nicht nach der Nummer sondern nur Zeilen die "x" enthalten.

Ich habe mich grade etwas dran versucht, bekomme es aber alleine nicht hin :(

Ob Du nach Nummern oder x'sen filterst, spielt doch keine Rolle. In der Filteranweisung legst Du fest, in welchem Bereich, in welcher Spalte wonach auch immer gefiltert werden soll. Und für die Herkunft des zu filternden Wertes ist es egal, ob der aus Zelle(2,1) oder (1,2) kommt. Das legst Du doch fest.

Und... "ich bekomme es nicht hin" ist eine Info ohne Wert. Woran hapert es konkret? 
Zeig was Du hast, sag wo es klemmt... aber spekuliere nicht darauf, dass es Dir irgendwer lösen wird, nur weil Du ein paar Verständnisprobleme hast. Die Hilfe hier ist darauf angelegt, die Art des Problems zu lösen, nicht das primäre Problem selbst. Denn geholfen ist Dir nur dann, wenn Du das in Zukunft selbst lösen kannst...
Der sicherste Ansatz für einen Irrtum ist der Glaube, alles im Griff zu haben.
Nur, weil ich den Recorder bedienen kann, macht mich das noch lange nicht zum Musiker.

Ciao, Ralf

Antworten Top
#5
Ich habe jetzt nochmal etwas rumprobiert und bin auf folgendes gekommen.
Für mein Verständnis sollte das funktionieren. Excel sagt mir aber, dass meine Variable "Projekt" 0 ist, obwohl in dieser Zeile erst der Inhalt der Zelle D4 zugewiesen wird? (rot markiert)
Kann mir hier jemand helfen?
Ganze Datei ist auch nochmal angehangen.

Danke!


Sub Filtern()


    ' Variable Projekt um Text zu speichern für die Überprüfung & Variable i für die Suche der entsprechenden Spalte
    Dim Projekt As Long
    Dim i As Integer
   
    'Variable Projekt wird als Inhalt von Zelle D4 aus "Tabelle1" festgesetzt
    Projekt = Worksheets("Tabelle1").Cells("D4")
   
    'Ab Spalte 14 beginnen die Projekte die zu vergleichen sind und werden anschließend nach dem Inhalt von Zelle D4 "Tabelle1" verglichen
    For i = 14 To 44
    If Worksheets("Tabelle2").Cells(1, i).Value = Filt Then
       
        'Tabellenblatt "Tabelle2" aktivieren und die übereinstimmende Spalte filtern
        ThisWorkbook.Worksheets("Tabelle2").Activate
        ActiveSheet.Range(1, i).AutoFilter i, "x"
       
    End If
   
    Next
   
End Sub


Angehängte Dateien
.xlsm   VBA Filtern.xlsm (Größe: 21,28 KB / Downloads: 2)
Antworten Top
#6
Hallo,

ändere die Anweisung mal so:  Projekt = Worksheets("Tabelle1").Range("D4") ab.

Alternativ geht es auch so:  Projekt = Worksheets("Tabelle1").Cells(4, 4)

Hallo,

da sind noch mehr Klinken drin: Die Variable muss als String deklariert sein, nicht als Long, das wäre ein numerischer Inhalt, deshalb die Null.

Ansonsten solltest du mal etwas ausführlicher beschreiben, was du vorhast. Das bekomme ich nicht nachvollzogen.
Viele Grüße
Klaus-Dieter
Der Erfolg hat viele Väter, 
der Misserfolg ist ein Waisenkind
Richard Cobden
Antworten Top
#7
Hallo Klaus-Dieter,

In meinem Kopf hört es sich eigentlich recht simpel an.

Ich habe in Tabelle1 eine Liste mit Projekten die jährlich überprüft werden, ab B7 abwärts. (erweiterbar)
In Tabelle2 habe ich einen Generator für Standard Produktionslenkungspläne unserer Projekte. 
Aus diesem Grund sind rechts daneben ab N1 die Projekte in Zeile 1 aufgelistet. (auch das ist erweiterbar)

Wenn ich in Tabelle1 Zelle D4 Projekt A eintrage und den Button Filtern betätige, dann soll in Tabelle2 Zeile 1 nach dem Projekt A durchsucht werden und nach Zellen mit dem Inhalt "x" gefiltert werden.
Wenn Projekt D eingetragen wird soll Projekt D gefiltert werden und so weiter...

PS: die beiden Fehler habe ich korrigiert, leider kommt nun der Fehler in dieser Zeile: (rot)


Sub Filtern()


    ' Variable Filt um Text zu speichern für die Überprüfung & Variable i für die Suche der entsprechenden Spalte
    Dim Projekt As String
    Dim i As Integer
   
    'Variable Filt wird als Inhalt von Zelle D4 aus "Tabelle1" festgesetzt
    Projekt = Worksheets("Tabelle1").Range("D4")
   
    'Ab Spalte 14 beginnen die Projekte die zu vergleichen sind und werden anschließend nach dem Inhalt von Zelle D4 "Tabelle1" verglichen
    For i = 14 To 44
    If Worksheets("Tabelle2").Cells(1, i).Value = Projekt Then
       
        'Tabellenblatt "Tabelle2" aktivieren und die übereinstimmende Spalte filtern
        ThisWorkbook.Worksheets("Tabelle2").Activate
        ActiveSheet.Range(1, i).AutoFilter i, "x"
       
    End If
   
    Next
   
End Sub


Angehängte Dateien
.xlsm   VBA Filtern.xlsm (Größe: 21,77 KB / Downloads: 2)
Antworten Top
#8
Hallo 

probiers mal damit funktioniert bei mir einwandfrei

Code:
ThisWorkbook.Worksheets("Fehlteile").Activate
    ActiveSheet.Range("B12:K300").AutoFilter
    ActiveSheet.Range("B12:K300").AutoFilter 3, Range("F6").Value
    ActiveSheet.Range("B13:K300").Copy Destination:=ThisWorkbook.Worksheets("Suche").Range("B13")
    ActiveSheet.Range("B12:K300").AutoFilter
    ThisWorkbook.Worksheets("Suche").Activate

musste halt bissl anpassen an deine Bedürfnisse.
Antworten Top
#9
...mal abgesehen davon, dass die Struktur stark verbesserungswürdig ist und auch davon, dass man zum Filtern keine Schleifen oder Buttons braucht (einfach auf das zu filternde Projekt in Tab1 klicken), anbei mal ein Beispiel...
.xlsm   VBA Filtern.xlsm (Größe: 21,29 KB / Downloads: 2)
Der sicherste Ansatz für einen Irrtum ist der Glaube, alles im Griff zu haben.
Nur, weil ich den Recorder bedienen kann, macht mich das noch lange nicht zum Musiker.

Ciao, Ralf

Antworten Top
#10
@Ralf: 
Danke erstmal, aber ich hab ja auch geschrieben, dass ich damit nahezu keine Erfahrungen habe.
Eine Frage noch funktioniert das Filtern auch anstatt auf die jeweilige Zeile zu klicken über die Zelle z.B. A1 in Tabelle1?
Weil diese habe ich schon für eine andere Funktion und würde gerne über D4 beides steuern, das wäre bedienerfreundlicher.

Danke und Gruß
Florian
Antworten Top


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 2 Gast/Gäste