Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
716to720
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
716to720
716to720
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

Daten sortieren und eintragen

Daten sortieren und eintragen
11.01.2006 13:59:47
Dominik
Mahlzeit zusammen!
Ich habe letztens schonmal einen Thread eröffnet, in dem es darum ging, Tabellenblätter zu erstellen (Spalte B nach Zahlen auslesen und für jede Zahl ein Blatt erstellen und sortieren). Habe diesen Code hier:
Nun hänge ich aber daran, einen Schritt weiter zu gehen, Nachdem die Blätter erstellt und sortiert wurden und ein Autofilter in Zeile1 aufgesetzt wurde, welcher die Spalte C nach "E" filtert.
Folgendes sollte in den Code ergänzt werden:
Nach dem unten stehenden Code soll der Autofilter Spalte B (in der die Zahlen stehen) jede einzelne Zahl durchgehen und alle Zellen, die dann nicht vom Filter gefiltert wurden, in das jeweilige, zur Zahl gehörende Blatt kopieren.
Nur wie gesagt, ich komme leider nicht voran...
Hier der Code:

Sub TabErzeugen()
Dim lngI As Long, lngN As Long
Dim bolSchonDa As Boolean
Dim iMax, Ibl, Ibl2 As Integer
On Error Resume Next
Application.DisplayAlerts = False
Sheets(2).Delete
Sheets(2).Delete
Application.DisplayAlerts = True
On Error GoTo 0
For lngI = 1 To Sheets(1).Cells(Rows.Count, 2).End(xlUp).Row
bolSchonDa = False
For lngN = 1 To Sheets.Count
If Sheets(lngN).Name = "WS_" & Sheets(1).Cells(lngI, 2).Value Then bolSchonDa = True
Next lngN
If bolSchonDa = False Then
Sheets.Add after:=Sheets(Sheets.Count)
ActiveSheet.Name = "WS_" & Sheets(1).Cells(lngI, 2).Value
End If
Next lngI
Application.ScreenUpdating = False
iMax = ActiveWorkbook.Worksheets.Count
For Ibl = 1 To iMax
For Ibl2 = Ibl To iMax
If UCase(Worksheets(Ibl2).Name) _
< UCase(Worksheets(Ibl).Name) Then
Worksheets(Ibl2).Move before:=Worksheets(Ibl)
End If
Next Ibl2
Next Ibl
Application.ScreenUpdating = True
Worksheets("Tabelle1").Select
Rows("1:1").Select
Selection.AutoFilter
Selection.AutoFilter Field:=3, Criteria1:="E"
End Sub

Vielen Dank im Voraus!
Gruß, Dominik

4
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Daten sortieren und eintragen
11.01.2006 14:54:07
Heiko
Hallo Dominik,
habe ich mir doch gedacht das da noch was nachkommt, nur Blätter erzeugen bringt nichts ;-)
Also hier mein Vorschlag zum rüberkopieren in die einzelnen Blätter, aber ohne Autofilter.
Die Geschwindigkeit ist nicht gerade berauschend, aber wenn es nicht mehrere 1000 Zeilen sind sollte es wohl schnell genug gehen.

Sub TabErzeugen()
Dim lngI As Long, lngN As Long, lngLastRow As Long
Dim bolSchonDa As Boolean
Dim iMax As Integer, Ibl As Integer, Ibl2 As Integer
Dim strHelp As String
Dim wks1 As Worksheet, wks2 As Worksheet
Application.ScreenUpdating = False
Application.DisplayAlerts = False
Set wks1 = Worksheets("Tabelle1")
For Each wks2 In ActiveWorkbook.Worksheets
If wks2.Name <> wks1.Name Then wks2.Delete
Next wks2
Application.DisplayAlerts = True
For lngI = 1 To wks1.Cells(Rows.Count, 2).End(xlUp).Row
bolSchonDa = False
For lngN = 1 To Sheets.Count
If Sheets(lngN).Name = "WS_" & Sheets(1).Cells(lngI, 2).Value Then bolSchonDa = True
Next lngN
If bolSchonDa = False Then
Sheets.Add after:=Sheets(Sheets.Count)
ActiveSheet.Name = "WS_" & Sheets(1).Cells(lngI, 2).Value
End If
Next lngI
iMax = ActiveWorkbook.Worksheets.Count
For Ibl = 1 To iMax
For Ibl2 = Ibl To iMax
If UCase(Worksheets(Ibl2).Name) < UCase(Worksheets(Ibl).Name) Then
Worksheets(Ibl2).Move before:=Worksheets(Ibl)
End If
Next Ibl2
Next Ibl
For lngI = 1 To wks1.Cells(Rows.Count, 2).End(xlUp).Row
wks1.Cells(lngI, 1).EntireRow.Copy
strHelp = "WS_" & Sheets("Tabelle1").Cells(lngI, 2).Value
' Warum der das hier nicht ohne Activate macht, KEINE AHNUNG !!!
Worksheets(strHelp).Activate
lngLastRow = Worksheets(strHelp).Cells(Rows.Count, 2).End(xlUp).Row + 1
Worksheets(strHelp).Cells(lngLastRow, 1).Select
ActiveSheet.Paste
Next lngI
For Each wks2 In ActiveWorkbook.Worksheets
If wks2.Name <> wks1.Name Then wks2.Rows(1).Delete
Next wks2
Application.CutCopyMode = False
Application.ScreenUpdating = True
End Sub

Gruß Heiko
PS: Rückmeldung wäre nett !
Anzeige
AW: Daten sortieren und eintragen
11.01.2006 15:13:47
Dominik
^Hallo Heiko!
Danke schonmal für die Programmzeilen, funktionieren wunderbar!
Jetzt habe ich das ganze schonmal nach WS aufgeteilt. Es gäbe ja jetzt die Möglichkeit, ALLE Tabellenblätter mit einem Autofilter zu versehen, um nur die Fehler ("E" in Spalte C) anzeigen zu lassen.
Im Endeffekt sollen alle Fehler aller WS in ein letztes Tabellenblatt kopiert werden, damit man Sie auf einen Blick hat. Deshalb wollte ich den Autofilter einsetzen...
Wäre es dann nicht doch sinnvoller, den Autofilter einzusetzen, bevor die Einträge in die WS-Tabellenblätter gemacht werden?
Gruß, Dominik
Anzeige
AW: Daten sortieren und eintragen
11.01.2006 15:53:31
Heiko
Hallo Dominik,
hier nun nochmal mit den Blatt für Fehler. Wenn es das nicht ist, dann mache mal eine vernünftige Beispielmappe mit Ausgangsblatt und Ergebinissblättern wie es am Ende aussehen soll.
Übrigens denn ganzen Sortiercode für die Blätter kannst du dir ersparen, wenn du Spalte B des Ausgangsblattes vor dem erstellen der neuen Blätter sortierst. Dann werden die neuen Blätter schon in der richtigen Reihenfolge erstellt.

Sub TabErzeugen()
Dim lngI As Long, lngN As Long, lngLastRow As Long
Dim bolSchonDa As Boolean
Dim iMax As Integer, Ibl As Integer, Ibl2 As Integer
Dim strHelp As String
Dim wks1 As Worksheet, wks2 As Worksheet
Application.ScreenUpdating = False
Application.DisplayAlerts = False
Set wks1 = Worksheets("Tabelle1")
For Each wks2 In ActiveWorkbook.Worksheets
If wks2.Name <> wks1.Name Then wks2.Delete
Next wks2
Application.DisplayAlerts = True
For lngI = 1 To wks1.Cells(Rows.Count, 2).End(xlUp).Row
bolSchonDa = False
For lngN = 1 To Sheets.Count
If Sheets(lngN).Name = "WS_" & Sheets(1).Cells(lngI, 2).Value Then bolSchonDa = True
Next lngN
If bolSchonDa = False Then
Sheets.Add after:=Sheets(Sheets.Count)
ActiveSheet.Name = "WS_" & Sheets(1).Cells(lngI, 2).Value
End If
Next lngI
iMax = ActiveWorkbook.Worksheets.Count
For Ibl = 1 To iMax
For Ibl2 = Ibl To iMax
If UCase(Worksheets(Ibl2).Name) < UCase(Worksheets(Ibl).Name) Then
Worksheets(Ibl2).Move before:=Worksheets(Ibl)
End If
Next Ibl2
Next Ibl
For lngI = 1 To wks1.Cells(Rows.Count, 2).End(xlUp).Row
wks1.Cells(lngI, 1).EntireRow.Copy
strHelp = "WS_" & Sheets("Tabelle1").Cells(lngI, 2).Value
' Warum der das hier nicht ohne Activate macht, KEINE AHNUNG !!!
Worksheets(strHelp).Activate
lngLastRow = Worksheets(strHelp).Cells(Rows.Count, 2).End(xlUp).Row + 1
Worksheets(strHelp).Cells(lngLastRow, 1).Select
ActiveSheet.Paste
Next lngI
For Each wks2 In ActiveWorkbook.Worksheets
If wks2.Name <> wks1.Name Then wks2.Rows(1).Delete
Next wks2
' Hier der Teil für die Fehler "E"
wks1.Activate
wks1.Range("C1").Select
Selection.AutoFilter Field:=3, Criteria1:="E"
Selection.SpecialCells(xlCellTypeVisible).Select
Selection.Copy
wks1.Range("A1").Select
wks1.AutoFilterMode = False
Worksheets.Add after:=Sheets(Worksheets.Count)
ActiveSheet.Name = "Fehler"
ActiveSheet.Paste
ActiveSheet.Cells(1, 1).Select
Application.CutCopyMode = False
Application.ScreenUpdating = True
End Sub

Gruß Heiko
PS: Rückmeldung wäre nett !
Anzeige
AW: Daten sortieren und eintragen
11.01.2006 16:32:35
Dominik
Hallo Heiko, und vielen Dank für deine Antworten!
Hast mir sehr geholfen, hat alles wunderbar funktioniert. Habe auch den Code umgeschrieben dass zuerst die Zahlen sortiert werden und dann die Blätter erzeugt werden. Danke fürden Tipp ;)
Vielen Dank nochmal und schönen (Feier)Abend noch :)
Gruß, Dominik (der erst um 19.00 heim kommt :( )

226 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige