Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1788to1792
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
Inhaltsverzeichnis

Markierte Datensätze kopieren

Markierte Datensätze kopieren
22.10.2020 17:56:05
Sven
Hallöchen,
ich habe eine Tabelle, die durch eine Abfrage erstellt wird. In der ersten Spalte möchte ich Datensätze mit einem x markieren und dann via Makro die so markierten Datensätze (etwa 5%) auf ein anderes Datenblatt kopieren.
Ich könnte jetzt jede Zeile durchlaufen, auf den Zelleninhalt auswerten und kopieren, stelle mir aber vor, dass Filtern hier trotz screenupdating = false schneller ist, oder? Wie mache ich das am besten?
Und: Gibt es den "nicht leer" Filter nicht (mehr)? Ich würde nämlich nicht explizit auf das "x", sondern einfach auf jeden Eintrag filtern, falls Kollegen auch mal ein "X" oder "S" eingeben.
Grüße
Sven

9
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Markierte Datensätze kopieren
22.10.2020 20:31:41
Werner
Hallo,
da du weder verraten hast wie dein Datenbereich auf dem Blatt, von dem kopiert werden soll aussieht, noch, wohin auf dem zweiten Blatt kopiert werden soll, mußt du dir das halt selbst anpassen.
Option Explicit
Sub Makro1()
Dim loLetzte As Long
Application.ScreenUpdating = False
With Worksheets("Tabelle1")
.Range("$A$1:$C$" & .Cells(.Rows.Count, "A").End(xlUp).Row).AutoFilter Field:=1, Criteria1:= _
""
With .AutoFilter.Range
.Offset(1).Resize(.Rows.Count - 1).Copy
End With
With Worksheets("Tabelle2")
loLetzte = .Cells(.Rows.Count, "A").End(xlUp).Offset(1).Row
If .Cells(1, "A") = "" Then loLetzte = 1
.Cells(loLetzte, "A").PasteSpecial Paste:=xlPasteValues
End With
.Range("A1").AutoFilter
End With
Application.CutCopyMode = False
End Sub
Gruß Werner
Anzeige
AW: Markierte Datensätze kopieren
23.10.2020 10:34:03
Sven
Hallo Werner,
vielen Dank für das Code-Beispiel.
Der Datenbereich der Quelle ist nicht so ganz eindeutig. Die Anzahl der Spalten wird sich noch ändern. Gefilter und kopiert soll aber immer die ganze Zeile werden und die Auswahl erfolgt immer durch Spalte A.
Wenn ich den Code teste bekomme ich gleich zu Anfang die Meldung, dass "die Autofilter-Methode des Range-Objektes" nicht ausgeführt werden konnte. :(
Hast Du eine Idee?
Danke und Grüße
Sven
AW: Markierte Datensätze kopieren
23.10.2020 10:55:48
Sven
Ah, okay: Fehler gefunden. Die Spalte A wurde später hinzugefügt und gehörte "offiziell" nicht zur Tabelle, die ab B begann. Nun klappt es.
Drei Kleinigkeiten fehlen noch:
- Auch die Überschriftzeile a müsste mitkopiert werden
- Die Spalte A muss nicht mit kopiert werden (war ja nur für die Auswahl relevant
- In einer Msgbox möchte ich ausgeben, wie viele Datensätze ausgewählt/kopiert wurden. Haben wir den Wert zu diesem Zeitpunkt irgendwo oder muss mann mit einer Schelife zählen?
Lieben Dank!
Sven
Anzeige
AW: Markierte Datensätze kopieren
23.10.2020 11:31:22
Werner
Hallo,
so:
Option Explicit
Sub Makro1()
Dim loLetzte As Long, loZeilen As Long, boTreffer As Boolean
Application.ScreenUpdating = False
With Worksheets("Tabelle1")
If WorksheetFunction.CountA(.Columns("A")) - 1 > 0 Then
boTreffer = True
.Range("$A$1:$C$" & .Cells(.Rows.Count, "A").End(xlUp).Row).AutoFilter Field:=1, _
Criteria1:=""
.AutoFilter.Range.Offset(, 1).Copy
With Worksheets("Tabelle2")
loLetzte = .Cells(.Rows.Count, "A").End(xlUp).Offset(1).Row
If .Cells(1, "A") = "" Then loLetzte = 1
.Cells(loLetzte, "A").PasteSpecial Paste:=xlPasteValues
End With
loZeilen = .Range("$A$1:$A$" & .Cells(.Rows.Count, "A").End(xlUp).Row) _
.SpecialCells(xlCellTypeVisible).Count - 1
.Range("A1").AutoFilter
End If
End With
Application.CutCopyMode = False
If boTreffer Then
MsgBox "Es wurden " & loZeilen & " Zeilen kopiert."
Else
MsgBox "Es sind keine Zellen in Spalte A markiert." & vbLf & "Es wurde nichts kopiert."
End If
End Sub
Gruß Werner
Anzeige
AW: Markierte Datensätze kopieren
23.10.2020 11:52:26
Sven
Super, vielen vielen Dank!
Gerne u. Danke für die Rückmeldung. o.w.T.
23.10.2020 23:18:19
Werner
AW: Markierte Datensätze kopieren
22.10.2020 20:53:19
Daniel
Hi
wenn die nicht markierten Zellen wirklich leer sind, brauchst du keinen Filter.
dann kannst du die Zellen in Spalte A mit einem "x" oder auch "s" über Start - Bearbeiten - Suchen und Auswählen - Inhalte - Constanten - Texte gezielt markieren und kopieren
geht in VBA so (vollständiger Code incl Auswählen, kopieren und einfügen):
Columns(1).SpecialCells(xlcelltypeconstants).EntireRow.Copy Destination:=Sheets("anderesBlatt").Cells(1, 1)

fertig!
wenn das bei sehr großen Datenmengen noch nicht schnell genug ist, könnte man vorab sortieren, so dass alle zu kopierenden Zellen einen Lückenlosen block bilden.
ActiveSheet.UsedRange.Sort Key1:=Cells(1, 1), order1:=xlascending, header:=xlguess
Columns(1).SpecialCells(xlcelltypeconstants).EntireRow.Copy Destination:=Sheets("anderesBlatt").Cells(1, 1)
Gruß Daniel
Anzeige
AW: Markierte Datensätze kopieren
23.10.2020 10:48:15
Sven
Hallo Daniel,
die Funktion kannte ich gar nicht, danke! Aber ich verstehe sie auch nicht so ganz. ;)
Markiert wird ja die komplette Zelle, abgesehen von den Zellen, die leer sind. Mein Ziel wäre aber ja, nur die Zeilen (!) zu markieren, bei denen in Spalte A ein Wert steht. Oder mache ich was falsch?
Grüße
Sven
AW: Markierte Datensätze kopieren
23.10.2020 12:34:41
Daniel
ja, aber das macht doch das SpecialCells(xlcelltypeconstants)
es schränkt den vorangestellten Zellbereich (Spalte A = erste Spalte) ein auf die Zellen, die einen Wert enthalten, also nicht leer sind.
Gruß Daniel

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige