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

Forumthread: Ganze Zeile in andere Tabelle kopieren

Ganze Zeile in andere Tabelle kopieren
09.07.2020 13:48:55
Nadja
Hallo ihr Lieben!
Meine VBA Kenntnisse sind aktuell sehr bescheiden, daher bräuchte ich eure Hilfe. Und ja, ich hab online schon viel rumgesucht, auf englischen und deutschen Seiten. Aber genau das was ich suche habe ich nicht gefunden.
Ich möchte für meine Arbeit eine Tabelle erstellen, die automatisch nach bestimmten Kriterien von der Haupttabelle in die spezifischen Tabellen kopiert:
In der Haupttabelle (Blatt 1) werden Patienten inklusive der Station aufgeführt. Das Makro soll in einer bestimmten Spalte (6) nach den Stationen suchen und dann die komplette Zeile in das jeweile Tabellenblatt in eine identische Tabelle einfügen. Das habe ich bis hierhin auch hingekriegt. Leider kopiert es die Zeilen nicht von oben nach unten (also in die jeweils erste leere Zeile), sondern orientiert sich danach, in welcher Zeile es in der Haupttabelle steht. Wenn die erste Zeile mit der Station B 2 in der Haupttabelle also in Zeile 15 vorkommt, wird sie auch im Tabellenblatt der B 2 in Zeile 15 kopiert und vorher habe ich 14 leere Zeilen. Das ist halt sehr unübersichtlich.
Filterfunktion würde ich lieber nicht nehmen. Es werden viele Leute damit arbeiten und ich möchte die Möglichkeiten, aus Versehen etwas zu verstellen soweit es geht minimieren. In der Haupttabelle ist ein Button für das Makro zum Aktualisieren.
Mein Code (einer davon) sieht aktuell so aus:

Sub KopieZeilen()
Dim Zeile As Long
Dim ZeileMax As Long
Dim n As Long
With Tabelle1
ZeileMax = .UsedRange.Rows.Count
n = .Cells(.Rows.Count, 1).End(xlUp).Row
For Zeile = 2 To ZeileMax
If .Cells(Zeile, 6).Value = "A 1" Or .Cells(Zeile, 6).Value = "A1" Then
.Rows(Zeile).Copy Destination:=Tabelle2.Rows(n)
n = n + 1
ElseIf .Cells(Zeile, 6).Value = "B 2" Or .Cells(Zeile, 6).Value = "B2" Then
.Rows(Zeile).Copy Destination:=Tabelle3.Rows(n)
n = n + 1
Else
.Rows(Zeile).Copy Destination:=Tabelle4.Rows(n)
n = n + 1
End If
Next Zeile
End With
End Sub

Hier die Testdatei:
https://www.herber.de/bbs/user/138903.xlsm
Anzeige

2
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Teste mal
09.07.2020 14:19:36
Fennek
Hallo,

Sub Main
with sheets("Haupttabelle")
for i = 2 to cells(rows.count, 1).end(xlup).row
if not isempty(cells(i,1)) and SheetExist(cells(i, "F")) then
range(cells(i,1), cells(i, "F")).copy sheets(cells(i,"F")).cells(rows.count,1).end(xlup). _
offset(1)
else
range(cells(i,1), cells(i, "F")).copy sheets("Rest").cells(rows.count,1).end(xlup).offset(1)
endif
next i
end with
End Sub
Function SheetExists(shName As String) As Boolean
Dim sh As Worksheet
On Error Resume Next
Set sh = Sheets(shName)
On Error GoTo 0
SheetExists = Not sh Is Nothing
End Function
mfg
Anzeige
AW: Teste mal
09.07.2020 15:02:57
Nadja
Hallo Fennek,
danke für die schnelle Antwort. Ich hab´s mal getestet und irgendwie klappt das bei mir nicht.
Es kopiert immer nur in die "Rest" Tabelle. Zwar schön von oben nach unten, aber jedesmal wenn ich auf den Button klicke werden die Zeilen zudem nochmal kopiert.
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige
Entdecke relevante Threads

Schau dir verwandte Threads basierend auf dem aktuellen Thema an

Alle relevanten Threads mit Inhaltsvorschau entdecken
Anzeige
Anzeige

Infobox / Tutorial

Ganze Zeile in andere Tabelle kopieren


Schritt-für-Schritt-Anleitung

Um eine komplette Zeile in ein anderes Tabellenblatt zu kopieren, kannst Du ein VBA-Makro verwenden. Hier ist eine Schritt-für-Schritt-Anleitung, wie Du dies umsetzen kannst.

  1. Öffne die Excel-Datei und drücke ALT + F11, um den VBA-Editor zu öffnen.
  2. Füge ein neues Modul ein: Klicke im Menü auf Einfügen und dann auf Modul.
  3. Kopiere den folgenden Code in das Modul:
Sub KopieZeilen()
    Dim Zeile As Long
    Dim ZeileMax As Long
    Dim n As Long
    With Tabellenblatt1
        ZeileMax = .UsedRange.Rows.Count
        n = .Cells(.Rows.Count, 1).End(xlUp).Row + 1
        For Zeile = 2 To ZeileMax
            If .Cells(Zeile, 6).Value = "A 1" Or .Cells(Zeile, 6).Value = "A1" Then
                .Rows(Zeile).Copy Destination:=Tabellenblatt2.Rows(n)
                n = n + 1
            ElseIf .Cells(Zeile, 6).Value = "B 2" Or .Cells(Zeile, 6).Value = "B2" Then
                .Rows(Zeile).Copy Destination:=Tabellenblatt3.Rows(n)
                n = n + 1
            Else
                .Rows(Zeile).Copy Destination:=Tabellenblatt4.Rows(n)
                n = n + 1
            End If
        Next Zeile
    End With
End Sub
  1. Passe den Code an: Stelle sicher, dass der Name der Tabellenblätter (Tabellenblatt1, Tabellenblatt2, etc.) mit Deinen tatsächlichen Blattnamen übereinstimmt.
  2. Speichere die Datei als Makro-fähige Arbeitsmappe (*.xlsm).
  3. Führe das Makro aus: Kehre zurück zu Excel und drücke ALT + F8, wähle KopieZeilen und klicke auf Ausführen.

Häufige Fehler und Lösungen

  • Fehler: Das Makro kopiert nur in die "Rest"-Tabelle.

    • Lösung: Überprüfe die Bedingungen im If-Block. Stelle sicher, dass die Werte in der Spalte 6 korrekt sind und den Bedingungen entsprechen.
  • Fehler: Die Zeilen werden nicht von oben nach unten kopiert.

    • Lösung: Stelle sicher, dass Du die Variable n korrekt aktualisierst. Erhöhe n nur, wenn eine Zeile erfolgreich kopiert wurde.

Alternative Methoden

Eine alternative Methode ist die Verwendung der Excel-Funktion SVERWEIS, um Daten aus einer Tabelle zu übernehmen. Wenn Du nur bestimmte Informationen benötigst, kann dies eine einfachere Lösung sein.

=SVERWEIS(A2;Tabelle!A:B;2;FALSCH)

Diese Formel sucht den Wert in A2 und gibt den entsprechenden Wert aus der zweiten Spalte der Tabelle zurück.


Praktische Beispiele

Angenommen, Du hast eine Haupttabelle mit Patientendaten. Du möchtest alle Patienten von "Station A1" in ein separates Blatt namens "A1" kopieren. Dein Makro könnte wie folgt aussehen:

If .Cells(Zeile, 6).Value = "A 1" Then
    .Rows(Zeile).Copy Destination:=TabellenblattA1.Rows(n)

Hierbei wird jede Zeile, die "A 1" enthält, in das Blatt "A1" eingefügt.


Tipps für Profis

  • Nutze WorksheetFunction für effizientere Berechnungen innerhalb von VBA.
  • Verwende Application.ScreenUpdating = False am Anfang Deines Makros, um die Bildschirmaktualisierung während der Ausführung zu deaktivieren und die Leistung zu verbessern.
  • Fehlerbehandlung einbauen: Verwende On Error Resume Next, um sicherzustellen, dass Dein Makro auch bei unerwarteten Fehlern fortgesetzt wird.

FAQ: Häufige Fragen

1. Wie kann ich eine gesamte Excel-Tabelle kopieren?
Du kannst eine komplette Excel-Tabelle kopieren, indem Du den gesamten Bereich auswählst und die Copy-Methode verwendest, gefolgt von Paste.

2. Ist es möglich, Daten aus einer anderen Tabelle zu übernehmen?
Ja, Du kannst mit VBA die Methode Copy verwenden, um Daten aus einer anderen Tabelle zu kopieren und sie in die aktuelle Tabelle einzufügen.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige