Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: Zeilen in neues Tabellenblatt kopieren & sortieren

Zeilen in neues Tabellenblatt kopieren & sortieren
04.01.2013 08:32:00
Julia
Hallo,
ich habe vor aus einem Gesamttabellenblatt Daten automatisch in verschieden neue Tabellenblätter kopieren zu lassen und diese dann dort zu sortieren. Am Beispiel:
https://www.herber.de/bbs/user/83243.xlsx
Ich habe meine Liste Einkauf
1. je nachdem in welchen Spalten ein "x" eingetragen wird, soll der Bereich z.B. B-F der Zeile in das entsprechende neue Tabellenblatt eingetragen werden.
2. z.B. im Tabellenblatt "aktuell" sollen die Daten aus Tabellenblatt "Einkauf" mit "x" unter "aktuell" nach Standort sortiert werden.
Da ich dieses kopieren und sortieren an die jeweiligen Tabellenblätter unterschiedlich anpassen muss, brauche ich halt eine Lösung die ich einfach verändern kann.
Hoffe mir kann jemand einen Tipp geben, wie ich dass verwirklichen kann. Die Grundtabelle wird immer erweitert. Danke schonmal.
Grüße Julia

Anzeige

1
Beitrag zum Forumthread
Beitrag zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Zeilen in neues Tabellenblatt kopieren & sortieren
04.01.2013 15:05:53
fcs
Hallo Julia,
hier mal 2 Makros, die die Daten aus "Einkauf" nach "aktuell" bzw. "GWG" übertragen.
Gruß
Franz
Sub kopieren_aktuell()
Dim wksEK As Worksheet, ZeileEK As Long, SpalteEK As Long
Dim wksZiel As Worksheet, Zeile_Z As Long, Spalte_Z As Long
Dim SpaltePruef As Long
Set wksEK = ActiveWorkbook.Worksheets("Einkauf")
SpaltePruef = wksEK.Range("K1").Column 'Spalte, die auf "x" geprüft werden soll
Set wksZiel = ActiveWorkbook.Worksheets("aktuell")
Application.ScreenUpdating = False
'Alte Daten im Zielblatt löschen
With wksZiel
Zeile_Z = .Cells(.Rows.Count, 1).End(xlUp).Row
If Zeile_Z > 1 Then
.Range(.Rows(2), .Rows(Zeile_Z)).Delete
End If
End With
Zeile_Z = 1
With wksEK
For ZeileEK = 2 To .Cells(.Rows.Count, 1).End(xlUp).Row
If LCase(.Cells(ZeileEK, SpaltePruef).Value) = "x" Then
Zeile_Z = Zeile_Z + 1
For SpalteEK = 1 To 7
'Spalte in Zieltabelle setzen für Werte in Tabelle Einkauf
'Spalte_Z = 0 setzen für Spalten, die nicht übertragen werden sollen
Select Case SpalteEK
Case 1: Spalte_Z = 0 'Bestelldatum
Case 2: Spalte_Z = 2 'Unternehmen
Case 3: Spalte_Z = 3 'Artikel
Case 4: Spalte_Z = 4 'Preis
Case 5: Spalte_Z = 5 'Nr
Case 6: Spalte_Z = 6 'Konto
Case 7: Spalte_Z = 1 'Standort
End Select
If Spalte_Z > 0 Then
wksZiel.Cells(Zeile_Z, Spalte_Z).Value = .Cells(ZeileEK, SpalteEK).Value
End If
Next
End If
Next
End With
If Zeile_Z > 1 Then
With wksZiel
If Zeile_Z > 2 Then
'Daten sortieren
With .Range(.Cells(1, 1), .Cells(Zeile_Z, 6))
.Sort key1:=.Range("A1"), order1:=xlAscending, _
Key2:=.Range("B1"), order2:=xlAscending, _
Key3:=.Range("C1"), order3:=xlAscending, Header:=xlYes
End With
End If
'Leerzeilen und Spaltentitel einfügen für Werte in Spalte A
For Zeile_Z = Zeile_Z To 2 Step -1
If .Cells(Zeile_Z - 1, 1).Value  .Cells(Zeile_Z, 1).Value Then
.Rows(Zeile_Z).Insert
.Cells(Zeile_Z, 1) = .Cells(Zeile_Z + 1, 1)
With .Range(.Cells(Zeile_Z, 1), .Cells(Zeile_Z, 6))
.HorizontalAlignment = xlCenterAcrossSelection
.Interior.Color = 10092543 'hellgelb
End With
If Zeile_Z > 2 Then
.Rows(Zeile_Z).Insert
End If
End If
Next
End With
End If
Application.ScreenUpdating = True
End Sub
Sub kopieren_GWG()
Dim wksEK As Worksheet, ZeileEK As Long, SpalteEK As Long
Dim wksZiel As Worksheet, Zeile_Z As Long, Spalte_Z As Long
Dim SpaltePruef As Long
Set wksEK = ActiveWorkbook.Worksheets("Einkauf")
SpaltePruef = wksEK.Range("N1").Column 'Spalte, die auf "x" geprüft werden soll
Set wksZiel = ActiveWorkbook.Worksheets("GWG")
Application.ScreenUpdating = False
'Alte Daten im Zielblatt löschen
With wksZiel
Zeile_Z = .Cells(.Rows.Count, 1).End(xlUp).Row
If Zeile_Z > 1 Then
.Range(.Rows(2), .Rows(Zeile_Z)).Delete
End If
End With
Zeile_Z = 1
With wksEK
For ZeileEK = 2 To .Cells(.Rows.Count, 1).End(xlUp).Row
If LCase(.Cells(ZeileEK, SpaltePruef).Value) = "x" Then
Zeile_Z = Zeile_Z + 1
For SpalteEK = 1 To 7
'Spalte in Zieltabelle setzen für Werte in Tabelle Einkauf
'Spalte_Z = 0 setzen für Spalten, die nicht übertragen werden sollen
Select Case SpalteEK
Case 1: Spalte_Z = 0 'Bestelldatum
Case 2: Spalte_Z = 1 'Unternehmen
Case 3: Spalte_Z = 2 'Artikel
Case 4: Spalte_Z = 3 'Preis
Case 5: Spalte_Z = 4 'Nr
Case 6: Spalte_Z = 5 'Konto
Case 7: Spalte_Z = 0 'Standort
End Select
If Spalte_Z > 0 Then
wksZiel.Cells(Zeile_Z, Spalte_Z).Value = .Cells(ZeileEK, SpalteEK).Value
End If
Next
End If
Next
End With
If Zeile_Z > 1 Then
With wksZiel
If Zeile_Z > 2 Then
'Daten sortieren
With .Range(.Cells(1, 1), .Cells(Zeile_Z, 6))
.Sort key1:=.Range("A1"), order1:=xlAscending, _
Key2:=.Range("B1"), order2:=xlAscending, Header:=xlYes
End With
End If
'Leerzeilen und Spaltentitel einfügen für Werte in Spalte A
For Zeile_Z = Zeile_Z To 2 Step -1
If .Cells(Zeile_Z - 1, 1).Value  .Cells(Zeile_Z, 1).Value Then
.Rows(Zeile_Z).Insert
.Cells(Zeile_Z, 1) = .Cells(Zeile_Z + 1, 1)
With .Range(.Cells(Zeile_Z, 1), .Cells(Zeile_Z, 6))
.HorizontalAlignment = xlCenterAcrossSelection
.Interior.Color = 10092543 'hellgelb
End With
If Zeile_Z > 2 Then
.Rows(Zeile_Z).Insert
End If
End If
Next
End With
End If
Application.ScreenUpdating = True
End Sub

Anzeige

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige
Anzeige
Anzeige

Infobox / Tutorial

Zeilen in neues Tabellenblatt kopieren und sortieren


Schritt-für-Schritt-Anleitung

Um Zeilen aus einem bestehenden Tabellenblatt in ein neues Tabellenblatt zu kopieren und dort zu sortieren, kannst du ein VBA-Makro verwenden. Hier sind die Schritte, die du befolgen solltest:

  1. Öffne deine Excel-Datei und drücke ALT + F11, um den VBA-Editor zu öffnen.
  2. Klicke auf Einfügen und wähle Modul, um ein neues Modul zu erstellen.
  3. Kopiere den folgenden VBA-Code in das Modul:
Sub kopieren_aktuell()
    Dim wksEK As Worksheet, ZeileEK As Long, SpalteEK As Long
    Dim wksZiel As Worksheet, Zeile_Z As Long, Spalte_Z As Long
    Dim SpaltePruef As Long
    Set wksEK = ActiveWorkbook.Worksheets("Einkauf")
    SpaltePruef = wksEK.Range("K1").Column 'Spalte, die auf "x" geprüft werden soll
    Set wksZiel = ActiveWorkbook.Worksheets("aktuell")

    Application.ScreenUpdating = False
    'Alte Daten im Zielblatt löschen
    With wksZiel
        Zeile_Z = .Cells(.Rows.Count, 1).End(xlUp).Row
        If Zeile_Z > 1 Then
            .Range(.Rows(2), .Rows(Zeile_Z)).Delete
        End If
    End With

    Zeile_Z = 1
    With wksEK
        For ZeileEK = 2 To .Cells(.Rows.Count, 1).End(xlUp).Row
            If LCase(.Cells(ZeileEK, SpaltePruef).Value) = "x" Then
                Zeile_Z = Zeile_Z + 1
                For SpalteEK = 1 To 7
                    'Spalte in Zieltabelle setzen für Werte in Tabelle Einkauf
                    Select Case SpalteEK
                        Case 1: Spalte_Z = 0 'Bestelldatum
                        Case 2: Spalte_Z = 2 'Unternehmen
                        Case 3: Spalte_Z = 3 'Artikel
                        Case 4: Spalte_Z = 4 'Preis
                        Case 5: Spalte_Z = 5 'Nr
                        Case 6: Spalte_Z = 6 'Konto
                        Case 7: Spalte_Z = 1 'Standort
                    End Select
                    If Spalte_Z > 0 Then
                        wksZiel.Cells(Zeile_Z, Spalte_Z).Value = .Cells(ZeileEK, SpalteEK).Value
                    End If
                Next
            End If
        Next
    End With

    'Daten sortieren
    If Zeile_Z > 1 Then
        With wksZiel
            If Zeile_Z > 2 Then
                .Range(.Cells(1, 1), .Cells(Zeile_Z, 6)).Sort key1:=.Range("A1"), order1:=xlAscending, Header:=xlYes
            End If
        End With
    End If

    Application.ScreenUpdating = True
End Sub
  1. Schließe den VBA-Editor und führe das Makro aus, um die Daten automatisch in das neue Tabellenblatt zu kopieren und dort zu sortieren.

Häufige Fehler und Lösungen

Fehler: Das Zielblatt bleibt leer, nachdem das Makro ausgeführt wurde.
Lösung: Stelle sicher, dass in der Spalte, die auf "x" geprüft wird, tatsächlich "x" steht. Überprüfe auch, ob die Namen der Tabellenblätter korrekt sind.

Fehler: Das Makro sortiert die Daten nicht.
Lösung: Achte darauf, dass die Zeilen, die sortiert werden sollen, wirklich mehr als zwei sind. Ansonsten gibt es nichts zu sortieren.


Alternative Methoden

Anstatt ein Makro zu verwenden, kannst du auch die Funktion "Filter" in Excel nutzen:

  1. Markiere deine Daten in der Tabelle "Einkauf".
  2. Gehe zu Daten > Filter und aktiviere den AutoFilter.
  3. Filtere die Zeilen, die ein "x" enthalten.
  4. Kopiere die gefilterten Daten und füge sie in das neue Tabellenblatt ein.

Praktische Beispiele

Angenommen, du hast in der Liste "Einkauf" folgende Daten:

Bestelldatum Unternehmen Artikel Preis Nr Konto Standort
01.01.2023 Firma A Produkt 1 10€ 1 12345 Berlin
02.01.2023 Firma B Produkt 2 20€ 2 12346 München
03.01.2023 Firma C Produkt 3 30€ 3 12347 Köln

Wenn du in der Spalte "K" "x" eingibst, wird die Zeile mit den entsprechenden Daten in das Blatt "aktuell" übertragen und danach nach "Standort" sortiert.


Tipps für Profis

  • Nutze die Möglichkeit, das Makro anzupassen, um verschiedene Kriterien für das Kopieren und Sortieren zu verwenden.
  • Speichere deine Excel-Datei im .xlsm-Format, um das Makro zu behalten.
  • Experimentiere mit der VBA-Programmierung, um komplexere Automatisierungen in Excel zu erstellen.

FAQ: Häufige Fragen

1. Kann ich mehrere Zeilen gleichzeitig übertragen?
Ja, du kannst das Makro so anpassen, dass es mehrere Bedingungen prüft und alle entsprechenden Zeilen überträgt.

2. Wie kann ich die Sortierreihenfolge ändern?
Ändere die Parameter im .Sort-Befehl im VBA-Code, um die Sortierung nach anderen Spalten oder in absteigender Reihenfolge vorzunehmen.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige