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

Forumthread: Schleife um Zeilen zu kopieren, bei der 2 Bedingun

Schleife um Zeilen zu kopieren, bei der 2 Bedingun
29.09.2016 14:44:05
Fabian
Hallo zusammen,
ich habe folgendes Problem:
Wir haben ein Tabellenblatt A mit Daten. Jeder Zeile ist eine bestimmte Sequenz zugeteilt. Bspw. 7 sowie 740-1110. Nun möchte ich, dass mir VBA das gesamte Tabellenblatt Zeile für Zeile durchgeht und mir jedes Mal, wenn in Spalte "Z" 7 steht und in Spalte AA ein Wert zwischen 740 und 1110 steht, die Zeile kopiert und in Tabellenblatt B ab Spalte 10 einfügt.
Ist das ohne große Umstände möglich?
Vielen Dank für eure Hilfe!
Grüße,
Fabian
Anzeige

8
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Schleife um Zeilen zu kopieren, bei der 2 Bedingun
29.09.2016 15:00:33
ChrisL
Hi Fabian
Willst du nicht einfach den Autofilter setzen, Kopieren, Einfügen, Autofilter wieder aufheben.
Bei vielen Daten ist dies sicherlich schneller als Zeile für Zeile. Zudem müsste sich der Vorgang mit dem Makrorekorder aufzeichnen lassen.
cu
Chris
AW: Schleife um Zeilen zu kopieren, bei der 2 Bedingun
29.09.2016 15:12:15
Daniel
es wird noch schneller, wenn man vor dem Filtern nach Spalte A und Spalte Z sortiert, so dass die zu zu kopierenden Zeilen möglichst lückenlos zusammenstehen.
Gruß Daniel
Anzeige
Spalte 10 oder Zeile 10?
29.09.2016 15:04:26
KlausF
Moin Fabian,
meinst Du wirklich: in Tabellenblatt B ab Spalte 10 einfügen (= Spalte "J")?
Das würde bedeuten, dass die Zeile nur von Spalte J bis Spaltenende kopiert wird.
Oder meinst Du: die gesamte Zeile in Tabellenblatt B ab Zeile 10 einfügen?
Gruß
Klaus
AW: Spalte 10 oder Zeile 10?
29.09.2016 15:36:54
KlausF
Hallo Fabian,
https://www.herber.de/bbs/user/108504.xls
Gruß
Klaus
Upps. Ich sehe gerade, es gibt schon eine Lösung.
Naja, dann sind es jetzt zwei ...
Anzeige
AW: Schleife um Zeilen zu kopieren, bei der 2 Bedingun
29.09.2016 15:06:29
Werner
Hallo Fabian,
das würde ich persönlich mit dem Autofilter realisieren. Zunächst Spalte A nach 7 filtern, dann Spalte Z nach >=740 und Je nach Zeilenanzahl kann das mit einer Schleife, die sämtliche Zeilen abklappert, ganz schön zäh werden. Da ist der Filter wesentlich schneller.
Zudem noch eine Frage: Sicher, dass die Daten dann nach Blatt B Spalte 10 kopiert werden sollen, oder meinst du ab Zeile 10?
Wenn möglich lade doch mal eine Beispieldatei mit ein paar Spieldaten und ein paar händisch eingetragenen Daten auf Blatt B, die dein Wunschergebnis zeigen, hier hoch.
Gruß Werner
Anzeige
AW: Schleife um Zeilen zu kopieren, bei der 2 Bedingun
29.09.2016 15:14:32
UweD
HAllo
ich denke du meinst ab Spalte 10 Zeile 10 (sonst macht das kopieren einer ganzen Zeile keinen Sinn)
Dann ginge das z.B. so..
Sub djsdsd()
Dim Tb1, Tb2, Zelle, LR2 As Long
Set Tb2 = Sheets("TabelleB")
With Sheets("TabelleA")
If WorksheetFunction.CountA(Columns("Z")) > 0 Then
For Each Zelle In Columns("Z").Cells.SpecialCells(xlCellTypeConstants, 3)
If Zelle = 7 And Zelle.Offset(0, 1) >= 740 And Zelle.Offset(0, 1) 
LG UweD
Anzeige
AW: Schleife um Zeilen zu kopieren, bei der 2 Bedingun
29.09.2016 15:19:40
UweD
Hab noch .Punkte vergessen
Sub djsdsd()
    Dim Tb1, Tb2, Zelle, LR2 As Long
    Set Tb2 = Sheets("TabelleB")
    
    With Sheets("TabelleA")
        If WorksheetFunction.CountA(.Columns("Z")) = 0 Then Exit Sub
        For Each Zelle In .Columns("Z").Cells.SpecialCells(xlCellTypeConstants, 3)
            If Zelle = 7 And Zelle.Offset(0, 1) >= 740 And Zelle.Offset(0, 1) <= 1110 Then
                LR2 = Tb2.Cells(Tb2.Rows.Count, "Z").End(xlUp).Row + 1
                LR2 = WorksheetFunction.Max(LR2, 10) 'Erst ab Zeile 10 
                .Rows(Zelle.Row).Copy Tb2.Rows(LR2)
            End If
        Next
    End With
End Sub
LG UweD
Anzeige
AW: Schleife um Zeilen zu kopieren, bei der 2 Bedingun
29.09.2016 15:47:03
Daniel
Hi
ja schon, aber beim arbeiten mit Excel sollte man Schleifen vermeiden.
Entweder, wie schon beschrieben mit Autofilter filtern und dann kopieren, in gefilterten Zellen werden nur die sichtbaren Zeilen kopiert.
Ich bevorzuge per Makro die Methode, per Formel die zu kopierenden Zeilen zu markieren und dann über die .SpecialCells-Funktion zu selektieren und zu kopieren.
Das hat den Vorteil, dass man besser kontrollieren kann, ob auch die richtigen Zeilen kopiert werden, wenn man das Programm nach einfügen der Formel mal anhält.
Sub KopierenMitBedingung()
With Sheets("A").UsedRange
With .Columns(.Columns.Count + 1)
.FormulaR1C1 = "=IF(AND(RC26=7,RC27>=740,RC27 0 Then
Intersect(.SpecialCells(xlCellTypeConstants, 1).EntireRow, _
Range(.Worksheet.Columns(1), .Offset(0, -1))).Copy
Sheets("B").Cells(10, 1).PasteSpecial xlPasteAll
End If
.ClearContents
End With
End With
End Sub
Auch hier gilt, bei grössern Datenmengen empfielt es sich, die Liste vor dem Kopieren zu sortieren (hier am einfachsten nach der Hilfsspalte), so dass alle zu kopierenden Zeilen direkt untereinander stehen.
Dann geht das Kopieren schneller und auch bei größten Datenmengen problemlos.
Gruß Daniel
Anzeige
;

Forumthreads zu verwandten Themen

Anzeige
Entdecke relevante Threads

Schau dir verwandte Threads basierend auf dem aktuellen Thema an

Alle relevanten Threads mit Inhaltsvorschau entdecken
Anzeige
Anzeige

Infobox / Tutorial

Schleife zum Kopieren von Zeilen in Excel


Schritt-für-Schritt-Anleitung

Um eine Schleife zu erstellen, die bestimmte Zeilen in Excel kopiert, kannst du das folgende VBA-Makro verwenden. Dieses Makro sucht nach Zeilen, in denen in Spalte "Z" der Wert 7 steht und in Spalte "AA" ein Wert zwischen 740 und 1110 liegt. Die gefundenen Zeilen werden dann in ein anderes Tabellenblatt (Tabellenblatt B) ab Zeile 10 eingefügt.

Sub djsdsd()
    Dim Tb2 As Worksheet
    Dim Zelle As Range
    Dim LR2 As Long
    Set Tb2 = Sheets("TabelleB")

    With Sheets("TabelleA")
        If WorksheetFunction.CountA(.Columns("Z")) = 0 Then Exit Sub
        For Each Zelle In .Columns("Z").Cells.SpecialCells(xlCellTypeConstants, 3)
            If Zelle = 7 And Zelle.Offset(0, 1) >= 740 And Zelle.Offset(0, 1) <= 1110 Then
                LR2 = Tb2.Cells(Tb2.Rows.Count, "Z").End(xlUp).Row + 1
                LR2 = WorksheetFunction.Max(LR2, 10) ' Erst ab Zeile 10
                .Rows(Zelle.Row).Copy Tb2.Rows(LR2)
            End If
        Next Zelle
    End With
End Sub

Häufige Fehler und Lösungen

  1. Fehler: Das Makro kopiert keine Zeilen. Lösung: Überprüfe, ob in Spalte "Z" tatsächlich der Wert 7 und in Spalte "AA" Werte im gewünschten Bereich vorhanden sind.

  2. Fehler: Die Zeilen werden nicht korrekt in Tabellenblatt B eingefügt. Lösung: Stelle sicher, dass das Zielblatt (Tabellenblatt B) existiert und dass der richtige Bereich für das Einfügen ausgewählt wurde (beginnend bei Zeile 10).


Alternative Methoden

Eine effektive Alternative zur Verwendung von Schleifen ist der Autofilter. Du kannst den Autofilter aktivieren, um die gewünschten Zeilen zu filtern und dann alle sichtbaren Zeilen zu kopieren. Hier ist ein Beispiel, wie du dies tun kannst:

Sub AutofilterKopieren()
    With Sheets("TabelleA")
        .AutoFilterMode = False
        .Range("A1:AA" & .Cells(.Rows.Count, 1).End(xlUp).Row).AutoFilter Field:=26, Criteria1:=7
        .Range("A1:AA" & .Cells(.Rows.Count, 1).End(xlUp).Row).AutoFilter Field:=27, Criteria1:=">=740", Operator:=xlAnd, Criteria2:="<=1110"
        .Range("A1:AA" & .Cells(.Rows.Count, 1).End(xlUp).Row).SpecialCells(xlCellTypeVisible).Copy Destination:=Sheets("TabelleB").Range("A10")
        .AutoFilterMode = False
    End With
End Sub

Praktische Beispiele

Ein praktisches Beispiel könnte sein, dass du eine große Datenbank hast, die Verkaufsdaten enthält. Du möchtest nur die Verkaufsdaten für einen bestimmten Artikel (z.B. Artikelnummer 7) und einen Umsatz zwischen 740 und 1110 kopieren. Mit der oben beschriebenen Methode kannst du dies schnell und effizient erledigen.


Tipps für Profis

  • Vermeide Schleifen: Wenn du mit großen Datenmengen arbeitest, sind Schleifen oft langsam. Verwende stattdessen den Autofilter, um die Effizienz zu steigern.
  • Sortiere vorher: Sortiere deine Daten vor dem Kopieren, damit die relevanten Zeilen zusammenstehen. Dies beschleunigt den Kopiervorgang erheblich.
  • Hilfsspalten nutzen: Markiere die Zeilen, die du kopieren möchtest, indem du eine Hilfsspalte verwendest, um die Auswahl zu erleichtern.

FAQ: Häufige Fragen

1. Wie kann ich sicherstellen, dass nur die richtigen Zeilen kopiert werden?
Du kannst die Bedingungen im VBA-Code anpassen und testen, indem du die Filterkriterien änderst.

2. Funktioniert das Makro in allen Excel-Versionen?
Ja, das VBA-Makro sollte in den meisten modernen Excel-Versionen (Excel 2010 und höher) problemlos funktionieren.

3. Was ist der Unterschied zwischen Kopieren in eine Spalte und in eine Zeile?
Wenn du in eine Spalte kopierst, fügst du die Daten vertikal ein. Beim Einfügen in eine Zeile werden die Daten horizontal angeordnet. Achte darauf, dass du das gewünschte Ziel korrekt angibst.

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