Makro: filtern + Schleifen programmieren

Hallo,
ich habe eine große Tabelle in Excel bei der in Spalte A 30 verschiedene Kategorien stehen.
Ich möchte nun auf Knopfdruck die große Tabelle in einzelne Tabellenblätter teilen, also Tabellenblatt1=Kategorie1, Tabellenblatt2=Kategorie2, etc.
Mein Ansatz wäre nun, dass ich die Tabelle nacheinander nach den gewünschten Kategorien filtern und dann die Werte rüberkopieren lassen würde.
Weiß jemand, wie ich das schaffe?

Mein zweiter Wunsch wäre, dass nicht immer alle Kategorien kopiert werden, sondern nur vereinzelte. Also z. B. Kategorie 5+7 wurden verändert und ich kann in vorgegebene Zellen 5 und 7 eintragen und das Makro filtert mir nur diese beiden Kategorien und kopiert sie in die Tabellenblätter.

Vielen Dank schon mal im Voraus für Eure Hilfe/Anregungen!
Viele Grüße
Andrea

Hallo Andrea,

in Excel gibt es bei der A1-Schreibweise
Zellen wie A30
Zellbereiche wie A30:X200
Zeilennummern wie 8
Spaltennamen wie F

In deiner Anfrage ist unklar was du meinst.

Gruß
Reinhard

Hallo Reinhard,
mir ist leider nicht ganz klar, wo Dir die A1-Schreibweise fehlt?
Vielleicht habe ich mich mit Kategorie nicht ganz klar ausgedrückt.
Kategorie wäre z. B. Obst, Gemüse, Milchprodukte, etc.
Diese „Kategorien“ stehen alle in Spalte A.
Also z. B. in A1 steht Obst in B1 steht Apfel, in A2 steht Gemüse in B2 Gurke, usw (nur ebenviel größer und mit mehreren Spalten).
Ich will nun, dass er mir alle Zeilen in denen in Spalte A Obst steht in ein extra Tabellenblatt kopiert, alle Zeilen mit Gemüse in ein extra Tabellenblatt, usw.
Da es ja 30 Kategorien sind, und sich nicht in allen Kategorien Änderungen ergeben, wäre es praktisch, wenn ich einen Zellenbereich festlengen könnte, in den ich z. B. Obst schreibe und das Makro kopiert mir nur die Obst-Zeilen in ein extra Tabellenblatt und nicht alle Kategorien.
Ich hoffe, das ist nun ein bisschen verständlicher und trägt nicht weiter zur Verwirrung bei :wink:
Vielen Dank aber schon mal im Voraus!
Viele Grüße
Andrea

Hallo Andrea,

mir ist leider nicht ganz klar, wo Dir die A1-Schreibweise
fehlt?

okay, okay, mein Fehler, ich hatte oben Spalte A30 gelesen, was mich irritierte.

Und, ich habe mir angwöhnt, leider angewöhnen müssen :frowning:, gar nicht lang rumzurätseln sondern sofort nachzufragen.

Zum einen, wie bei dir jetzt, kommen mit anderen Worten von dir gesagt weitere Hinweise was da genau vorliegt, was dann in Kombination mit deinem Anfangsbeitrag alles für Fremde verständlicher macht.
Zum anderen, deshlab eben das Wort „leider“, trennt eine Nachfrage Spreu und Weizen. Sogenannte Eintagsfliegen die mal eben so in Foren eine Frage stellen und dann warum auch immer sich nie mehr darum kümmern fliegen dadurch raus und man „arbeitet“ nicht gleich für die Tonne :smile:

Vielleicht habe ich mich mit Kategorie nicht ganz klar
ausgedrückt.

Ist auch schwierig sich in Fremde hereinzuversetzen wenn man da nur sein Excelproblem im Kopf hat.
Ich kann das auch nicht, aber ich habe mich stark verbessert, indem ich Excelfragen „beantworte“, dadurch stößt du sehr oft auf ähnliche Rückfragen die man hat.
Im Umkehrschluß bedeutet das, stelle ich selbst mal eine Anfrage, habe ich das im Hinterkopf und versuche diese Informationen gleich miteinzubauen.

Okay, genug geplaudert *gg*

Alt+F11, Doppelklick auf den Blattnamen, Code einfügen, Editor schließen.

Die Codezeile
.Range(.Cells(ZeiQ, 2), .Cells(ZeiQ, 12)).Copy Destination:=wksZ.Cells(ZeiZ, 1)
gibt an daß die Zellen der jeiligen Zeilen von 2te bis 12te Spalte kopiert werden, ggfs. anpassen.

Nachstehend der Code, hier eine Beispielmappe wo es demonstriert wird, ändere was in „Tabelle1“ und schau dir dann die beiden anderen Blätter an.

http://www.hostarea.de/server-09/September-75ab08d7b…

Gruß
Reinhard

Private Sub Worksheet\_Change(ByVal Target As Range)
Dim colC As New Collection, C As Long, Zelle As Range
Dim wksQ As Worksheet, wksZ As Worksheet, ZeiZ As Long, ZeiQ As Long
Set wksQ = Worksheets("Tabelle1")
On Error Resume Next 'wegen colc.add
For Each Zelle In Target
 colC.Add Item:=Cells(Zelle.Row, 1).Value, key:=Cells(Zelle.Row, 1).Value
Next Zelle
On Error GoTo 0
With wksQ
 For C = 1 To colC.Count
 On Error GoTo BlattNichtDa
 Set wksZ = Worksheets(colC(C))
 On Error GoTo 0
 wksZ.UsedRange.ClearContents
 ZeiZ = 2
 For ZeiQ = 1 To .Cells(Rows.Count, 1).End(xlUp).Row
 If .Cells(ZeiQ, 1) = colC(C) Then
 .Range(.Cells(ZeiQ, 2), .Cells(ZeiQ, 12)).Copy Destination:=wksZ.Cells(ZeiZ, 1)
 ZeiZ = ZeiZ + 1
 End If
 Next ZeiQ
 Next C
End With
Exit Sub
BlattNichtDa:
MsgBox "Blatt " & colC(C) & " gibt es nicht!"
End Sub