Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1764to1768
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

herausgefilterte Daten noch da

herausgefilterte Daten noch da
09.06.2020 13:24:11
Günter
Hallo zusammen,
ich habe ein kleines Makro, in dem ich aus einer Ursprungsdatei, die ich mit dem Makro auswähle, in ein Tabellenblatt kopiere. Die Ursprungsdatei schlie0e ich danach, weil ich die nicht mehr benötige und auch nicht ändern möchte. Anschließend filtere ich die Daten (Spalte A die Werte 3601, 3701, 3769).
Das funktioniert auch so weit so gut.
Wenn ich allerdings in meinem Tabellenblatt (Tabelle1) alles markiere und die Zellen lösche, erscheinen alle nicht gefilterten Sätze ab dem Feld A1.
Anbei den Code:
Code-Beginn:
Sub einlesen()
Worksheets("Tabelle1").Select
Range("a5:L" & Range("L" & Rows.Count).End(xlUp).Row).Select
Selection.ClearContents
Dim verz As String
Dim datei As String
verz = ActiveWorkbook.Path
'MsgBox verz
Dim strDateiname As String
With Application.FileDialog(msoFileDialogOpen)
.AllowMultiSelect = False
.InitialFileName = verz & "\*.xlsx"
If .Show = -1 Then
strDateiname = .SelectedItems(1)
End If
End With
Workbooks.Open filename:=strDateiname
datei = ActiveWorkbook.Name
'MsgBox datei
Worksheets("Übersicht").Select
Range("A14:L" & Range("L" & Rows.Count).End(xlUp).Row).Select
Selection.Copy
ThisWorkbook.Sheets(1).Range("A5").PasteSpecial Paste:=xlAll, Operation:=xlNone, SkipBlanks:= _
False, Transpose:=False
' Zwischenablage löschen, da sonst Abfrage beim Schliessen der Quell-Datei
Application.CutCopyMode = False
' Schliessen der Quell-Datei
Workbooks(datei).Activate
ActiveWorkbook.Close savechanges = False
' Spaltenbreite setzen
Columns("A:A").Select
Selection.ColumnWidth = 10
Columns("B:B").Select
Selection.ColumnWidth = 30
Columns("C:C").Select
Selection.ColumnWidth = 15
Columns("D:L").Select
Selection.ColumnWidth = 20
Columns("H:H").Select
Selection.ColumnWidth = 5
'Zeilenhöhe anpassen
Cells.Select
Selection.Rows.AutoFit
' Relevante AKZ selektieren (3601, 3701, 3769)
ActiveSheet.Range("$A$5:$L$999").AutoFilter Field:=1, Criteria1:=Array("3601", "3701", "3769"),  _
Operator:=xlFilterValues
End Sub

Code-Ende
Wahrscheinlich gibt es für den Code noch gewaltiges Verbesserungspotential, aber so verstehe ich ihn und auch Kolleginnen/Kollegen, die anschließend damit arbeiten.
Viele Grüße
Günter

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

Betreff
Datum
Anwender
Anzeige
AW: herausgefilterte Daten noch da
09.06.2020 13:46:07
fcs
Hallo Günther,
du musst vor dem Löschen alle Zeilen einblenden, sonst erwischt du ggf. die ausgeblendeten Zeilen beim Löschvorgang nicht.
Probiere mal folgende Anpassung.
LG
Franz
Sub einlesen()
Dim verz As String
Dim datei As String
Dim Zeile_L As Long
'altdaten löschen
With Worksheets("Tabelle1")
.Select
If .AutoFilterMode = True Then
If .FilterMode = True Then .ShowAllData
End If
Zeile_L = .UsedRange.Row + .UsedRange.Rows.Count - 1
If Zeile_L >= 5 Then
.Range("a5:L" & Zeile_L).ClearContents
End If
End With
verz = ActiveWorkbook.Path
'MsgBox verz
Dim strDateiname As String
With Application.FileDialog(msoFileDialogOpen)
.AllowMultiSelect = False
.InitialFileName = verz & "\*.xlsx"
If .Show = -1 Then
strDateiname = .SelectedItems(1)
End If
End With
Workbooks.Open Filename:=strDateiname
datei = ActiveWorkbook.Name
'MsgBox datei
Worksheets("Übersicht").Select
Range("A14:L" & Range("L" & Rows.Count).End(xlUp).Row).Copy
ThisWorkbook.Sheets(1).Range("A5").PasteSpecial Paste:=xlAll, Operation:=xlNone, _
SkipBlanks:=False, Transpose:=False
' Zwischenablage löschen, da sonst Abfrage beim Schliessen der Quell-Datei
Application.CutCopyMode = False
' Schliessen der Quell-Datei
Workbooks(datei).Activate
ActiveWorkbook.Close savechanges = False
' Spaltenbreite setzen
Columns("A:A").ColumnWidth = 10
Columns("B:B").ColumnWidth = 30
Columns("C:C").ColumnWidth = 15
Columns("D:L").ColumnWidth = 20
Columns("H:H").ColumnWidth = 5
'Zeilenhöhe anpassen
Cells.Rows.AutoFit
' Relevante AKZ selektieren (3601, 3701, 3769)
ActiveSheet.Range("$A$5:$L$999").AutoFilter Field:=1, _
Criteria1:=Array("3601", "3701", "3769"), _
Operator:=xlFilterValues
End Sub

Anzeige
AW: herausgefilterte Daten noch da
09.06.2020 14:33:02
Günter
Hallo Franz,
danke für die schnelle Antwort.
Das Löschen der Altdaten habe ich eingebaut, war schlampig von mir.
Leider trifft es aber nicht die Lösung für mein Problem.
Wahrscheinlich liegt es am "Autofilter", dass die restlichen Datensätze noch vorgehalten werden.
Ich brauche also im Prinzip kein "Autofilter", sondern eine Anzeige NUR der Datensätze, die "3601, 3701, 3769" entsprechen, die anderen können gelöscht werden. ...alles löschen außer "3601, 3701, 3769".
Viele Grüße
Günter
AW: herausgefilterte Daten noch da
09.06.2020 15:46:23
Herbert
Hallo Günter,
wenn ich dich richtig verstanden habe, dann mach doch einfach eine "For-Next"-Schleife über alle Zeilen und frage dabei ab, ob einer dieser 3 Werte dort vorkommt. Falls ja, löschen!
Servus
Anzeige
Daten löschen
09.06.2020 15:54:32
Rudi
Hallo,
  ....
Columns("H:H").Select
Selection.ColumnWidth = 5
'Zeilenhöhe anpassen
Cells.Select
Selection.Rows.AutoFit
' Relevante AKZ selektieren (3601, 3701, 3769)
Call DeleteRows(Range("A6:L999"), 1, Array(3601, 3701, 3769)) 'Bereich ohne Überschriften!!!
End Sub
Sub DeleteRows(rngData As Range, lngCriteriaColumn As Long, arrCriteria)
Dim rngC As Range, rngDel As Range
For Each rngC In rngData.Columns(lngCriteriaColumn)
If IsError(Application.Match(rngC, arrCriteria, 0)) Then
If rngDel Is Nothing Then
Set rngDel = rngC
Else
Set rngDel = Union(rngDel, rngC)
End If
End If
Next rngC
If Not rngDel Is Nothing Then
rngDel.EntireRow.Delete
End If
End Sub
Gruß
Rudi
Anzeige
AW: Daten löschen
09.06.2020 16:22:21
Herbert
Hallo Rudi,
ich habe mal in Spalte A eine Zahlenreihe erstellt. U. a. kommen darin die 3 gesuchten Zahlen vor. Doch wenn ich deinen Code laufen lasse, passiert nix! Er steigt bei dieser Zeile aus:
If IsError(Application.Match(rngC, arrCriteria, 0)) Then
Was mache ich da falsch?
Servus
AW: Daten löschen
10.06.2020 10:04:46
Rudi
Hallo,
ändere mal auf
    For Each rngC In rngData.Columns(lngCriteriaColumn).Cells

Gruß
Rudi
AW: Daten löschen
10.06.2020 10:38:29
Günter
Vielen Dank für Eure Hilfe.
Funktioniert wie ich mir das gewünscht habe.
Gruß
Günter
warum dann offen? o.w.T.
10.06.2020 10:45:38
Werner
AW: Daten löschen
10.06.2020 16:50:55
Herbert
Hallo Rudi!?!?
bingo, so funktioniert's! Mercie vielmals! Sorry, dass ich mich erst jetzt melde, doch heute war mal wieder viel los bei "Rentners"! ;o)=)
Servus
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige