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

gefiltertes kopieren verbessern

Forumthread: gefiltertes kopieren verbessern

gefiltertes kopieren verbessern
25.01.2022 13:51:08
Abdullah
Guten Tag liebe Leute,
ich habe da einen kleinen Codeabschnitt und bitte um Ratschläge, damit er schneller und besser funktioniert.
dieser Abschnitt hat die Aufgabe: Daten nach Criterial D(String) zu filtern. nachher selektiert er die sichtbare Rows und fügt sie woanders ein.
Ein Problem taucht auf : wenn nach einem Keriterium gefiltert wird, wofür keine Daten im Sheet gibt. An diesem Punkt werden alle leeren Zeilen selektiert und kopiert.
dieses Selektieren und kopieren dauert ewig lang und ich kann nicht solange warten, weil dieser Fall viel oft vorkommt. Im beispiel dauert es nicht lang, weil die Datensätze nicht so groß sind. Beispiel dient nur zur Verdeutlichung.
Hat jemand einen Rat?
https://www.herber.de/bbs/user/150651.xlsx

Sub Beispiel()
Dim i As Double
Dim D As String
Dim S As String
Dim ws As Worksheet
Sheets("Criterial").Select
For i = 2 To 8 '
D = Worksheets("Criterial").Cells(i, 1).Value
Workbooks.Add.SaveAs Filename:=Sheets("Criterial").Cells(1, 9).Value & D, FileFormat:=xlOpenXMLWorkbook
ThisWorkbook.Activate
For Each ws In Worksheets
If ws.Name  "Criterial" Then
ws.Select
S = ws.Name
ws.Range("A1").AutoFilter Field:=4, Criteria1:=D
Selection.CurrentRegion.SpecialCells(xlCellTypeVisible).Select
Selection.Copy
Workbooks(D).Activate
Sheets.Add(After:=Sheets(Sheets.Count)).Name = D & "-" & S
Workbooks(D).Activate
Sheets(D & "-" & S).Range("A1").PasteSpecial
Rows("1:1").Select
Selection.ClearContents
ThisWorkbook.Activate
ws.Range("A1").AutoFilter
End If
Next ws
Workbooks(D).Save
Workbooks(D).Close
Next i
ThisWorkbook.Activate
Sheets("Criterial").Select
End Sub
Anzeige

7
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: gefiltertes kopieren verbessern
25.01.2022 14:48:06
peterk
Hallo

Selection.SpecialCells(xlCellTypeVisible).Select
statt
Selection.CurrentRegion.SpecialCells(xlCellTypeVisible).Select
Peter
AW: gefiltertes kopieren verbessern
25.01.2022 15:27:02
Abdullah
Hallo Peter,
vielen Dank für deine Antwort.
Leider ohne CurrentRegion geht es noch langsamer irgendwie(Datensätze sind zu viel). wobei Excel für einige Minuten ca (7 min) nicht ansprechbar bleibt.
mir lang eine If-Funktion, wo ich auf die nächste sichtbare Zelle sprenge und prüfe ob diese leer oder beschrieben ist. leider komme ich irgendwie nicht drauf.
in Bilder ist es zu sehen wie Excel einfriert . die nächste aktive Zeile wäre dabei 375598 wenn nach einem Kriterium gefiltert wird, wofür keine Daten im Sheet gibt. .
Userbild
Userbild
BG
Abdullah
Anzeige
AW: gefiltertes kopieren verbessern
25.01.2022 16:02:42
peterk
Hallo
Probier mal:

ws.AutoFilter.Range.SpecialCells(xlCellTypeVisible).Select
statt
Selection.SpecialCells(xlCellTypeVisible).Select
statt
Peter
AW: gefiltertes kopieren verbessern
25.01.2022 16:11:33
GerdL
Moin Abdullah,
ungetestet.

Sub Beispiel()
Dim i As Integer
Dim D As String
Dim S As String
Dim ws As Worksheet
'Sheets("Criterial").Select
For i = 2 To 8 '
D = ThisWorkbook.Worksheets("Criterial").Cells(i, 1).Value
Workbooks.Add.SaveAs Filename:=ThisWorkbook.Sheets("Criterial").Cells(1, 9).Value & D, FileFormat:=xlOpenXMLWorkbook
'ThisWorkbook.Activate
For Each ws In ThisWorkbook.Worksheets
If ws.Name  "Criterial" Then
S = ws.Name
ws.Range("A1").AutoFilter Field:=4, Criteria1:=D
ws.Range("A1").AutoFilter.Range.Offset(1).Copy
Workbooks(D).Sheets.Add(After:=Workbooks(D).Sheets(Workbooks(D).Sheets.Count)).Name = D & "-" & S
ws.Range("A1").AutoFilter.Range.Offset(1).Copy Workbooks(D).Sheets(D & "-" & S).Range("A2")
Application.CutCopyMode = False
'Rows("1:1").Select
'Selection.ClearContents
'ThisWorkbook.Activate
ws.Range("A1").AutoFilter
End If
Next ws
Workbooks(D).Close (True)
Next i
ThisWorkbook.Activate
Sheets("Criterial").Select
End Sub
Gruß Gerd
Anzeige
AW: gefiltertes kopieren verbessern
25.01.2022 17:49:13
Abdullah
Hallo Gerd,
vielen Dank für deine Antwort
leider der code funktioniert nicht wie es funktionieren soll.
die Anweisung:
ws.Range("A1").AutoFilter.Range.Offset(1).Copy
blindet die gefilterten Zeilen wieder ein und kopiert die erste Zeile nur.
Beste Grüße
Abdullah
Anzeige
AW: gefiltertes kopieren verbessern
25.01.2022 19:02:23
GerdL
Ja, tausche bitte mal diese Codzeile aus durch

Intersect(ws.Cells.SpecialCells(xlCellTypeVisible).EntireRow, ws.AutoFilter.Range.Offset(1)).Copy _
Workbooks(D).Sheets(D & "-" & S).Range("A2")
Gruß Gerd
AW: gefiltertes kopieren verbessern
26.01.2022 11:34:35
Abdullah
Hallo Gerd,
vielen Dank für deine Antwort.
leider bei diesem Code friert der Rechner Komplet ein und ich musste Excel neustarten .
ich glaube es liegt einfach an einem der folgenden Gründen oder an denen alle zusammen:
1- Excel 2007 mit 32 kann einfach die Anzahl an Datensätzen in so einer Form nicht handeln
2- SpecialCells-Limit erreicht.
3- Zwischenspeicher von Excel ist zu wenig
ich werden dann in den sauern Apfel beißen und das Programm mit dem alten Code ca. 5 stunden am Abend laufen lassen. wobei ich wünschte mir, dass ich eine Lösung dafür finde.
vielen Dank Gerd, vielen Dank Peter
BG
Abdullah
Anzeige
;

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige