Live-Forum - Die aktuellen Beiträge
Datum
Titel
16.10.2025 17:40:39
16.10.2025 17:25:38
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: Code löscht alles, wenn nur noch weniger als 180

Code löscht alles, wenn nur noch weniger als 180
07.12.2008 12:42:00
Wolfgang
Hallo,
beim Testen stolpere ich darüber, dass der untenstehende Code, wenn sich in Spalte Q keine Zahlen höher als 180 mehr befinden, alles umkopiert bzw. löscht. Wie lässt sich das evtl. abfangen, damit die Zeilen mit 180 und darunter auch stehen bleiben? - Danke schon jetzt für die Rückmeldungen.
Gruß - Wolfgang
Option Explicit

Sub FilternUndKopieren()
Application.ScreenUpdating = False
Sheets("Grunddaten").CheckBox1 = 0
With Sheets("Grunddaten")
.Unprotect
.Range("A1").Autofilter Field:=17, Criteria1:=">180"
Intersect(.Columns("A:R"), .Range(.Rows(2), .Rows(.Range("a1").CurrentRegion.Rows.Count))).  _
_
Copy
Sheets("Altdaten").Cells(Rows.Count, 1).End(xlUp).Offset(1, 0).PasteSpecial xlPasteFormats
Sheets("Altdaten").Cells(Rows.Count, 1).End(xlUp).Offset(1, 0).PasteSpecial xlPasteValues
.Range(.Rows(2), .Rows(.Range("a1").CurrentRegion.Rows.Count)).EntireRow.Delete shift:=xlUp
.Range("A1").Autofilter
.AutoFilterMode = False
.Application.CutCopyMode = False
End With
'löscht in Grunddaten und Altdaten die Leerzeilen
On Error Resume Next
Sheets("Grunddaten").UsedRange.Columns(1).SpecialCells(xlCellTypeBlanks).EntireRow.Delete
Sheets("Altdaten").UsedRange.Columns(1).SpecialCells(xlCellTypeBlanks).EntireRow.Delete
On Error GoTo 0
Sheets("Grunddaten").CheckBox1 = 1
Application.ScreenUpdating = True
End Sub


Anzeige

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

Betreff
Datum
Anwender
Anzeige
AW: Code löscht alles, wenn nur noch weniger als 180
07.12.2008 14:31:34
ChrisL
hallo Wolfgang

Sub beispiel()
If WorksheetFunction.Max(Columns(17)) > 180 Then
' Dein Makro
End If
End Sub


Gruss
Chris

AW: Code löscht alles, wenn nur noch weniger als 180
07.12.2008 15:01:00
Wolfgang
Hallo Chris,
irgendwie funktioniert das nicht; Wenn ich das im beigefügtem Code entsprechend anpasse, löscht der Code auch Zeilen mit 180 und mehr ebenfalls nicht mehr. Hättest Du evtl. noch eine Idee? - Danke schon jetzt wieder für die Rückmeldung.
Gruß - Wolfgang
Anzeige
AW: Code löscht alles, wenn nur noch weniger als 180
07.12.2008 15:10:00
Gerd
Hallo Wolfgang,
in welchem Blatt u. mit welcher Codezeile wird zuviel gelöscht?
Lasse mal ScreenUpdating weg u. teste mit der F8-Taste im Einzelschrittmodus um dies festzustellen.
Gruß Gerd
AW: Code löscht alles, wenn nur noch weniger als 180
07.12.2008 15:22:00
Wolfgang
Hallo Gerd,
Danke zunächst für die Rückmeldung; habe es so vorgenommen, wie Du beschrieben hast. Die Zeilen verschwinden ab Intersect Columns.....(läßt sich hier auszugsweise wohl leider nicht hineinkopieren - da meckert die Seite wegen HTML-Format) dann vollständig im Blatt "Grunddaten".
Solange also noch in Spalte Q eine Zahl mit höher 180 steht, läuft das alles prima. Nur bewegen sich die Zahlen auf 180 und weniger, ist alles weg. Danke schon jetzt wieder für Deine Rückmeldung.
Gruß - Wolfgang
Anzeige
AW: Code löscht alles, wenn nur noch weniger als 180
07.12.2008 15:11:39
Luschi
Hallo Wolgang,
mit der folgenden Funktion kann man feststellen, wieviele Zeilen durch den Autofilter sichtbar
sind:

Function anzahlFilterZeilen() As Long
Dim myFilterRows() As String, n1 As Long, n2 As Long
If ActiveSheet.FilterMode Then
myFilterRows = Split(ActiveSheet.AutoFilter.Range.SpecialCells(xlCellTypeVisible). _
Address, ",", -1, vbTextCompare)
n2 = -1
For n1 = LBound(myFilterRows) To UBound(myFilterRows)
n2 = n2 + Range(myFilterRows(n1)).Rows.Count
Next n1
anzahlFilterZeilen = n2
Else
'kein Filter gesetzt bzw. keine Werte gefiltert
anzahlFilterZeilen = -1
End If
End Function

und so kannst Du sie verwenden:
.Range("A1").Autofilter Field:=17, Criteria1:=">180"
If anzahlFilterZeilen > 0 Then
   'jetzt der Kopierbefehl
Else
   Msgbox "Keine Daten gefunden mit der Filterbedingung ..."
End If
Gruß von Luschi
aus klein-Paris
PS: Die von Chris aufgezeigte Lösung geht ins Leere, wenn in der Spalte 'Q' außerhalb des Filterbereiches
    Werte >180 stehen.

Anzeige
AW: Code löscht alles, wenn nur noch weniger als 180
07.12.2008 15:59:43
Wolfgang
Hallo Luschi,
auch Dir herzlichen Dank für die Rückmeldung; Ich habe Deinen Code eingebaut. Komisch ist, dass das über Schaltfläche nicht funktioniert, so dass der Code dann auch die Datensätze mit mehr als Zahl 180 ignoriert und nicht kopiert bzw. löscht; Nehme ich das ganz mit F8 schrittweise vor, funktioniert das sinnigerweise, mehr als 180 wird gelöscht, darunter bleibt stehen. Ich kann aber dabei noch nicht sagen, an welcher Stelle das nun weiter scheitert. Werde noch weiter testen und mich dann wieder melden.
Danke und Gruß
Wolfgang
Anzeige
Danke Luschi !
07.12.2008 16:14:00
Wolfgang
Hallo Luschi,
ich habe soeben vom Gerd einen Code erhalten, der einwandfrei läuft. Danken möchte ich Dir aber an dieser Stelle für Deine schnelle Rückmeldung und Deine Ausarbeitungen. Worin bei mir auch immer der Fehler noch liegt, warum der Code nicht so ganz rund läuft (?). Ich hoffe, Du bist mir nicht böse, dass ich den Code von Gerd verwende.
Herzliche Grüße
Wolfgang
Anzeige
AW: Code löscht alles, wenn nur noch weniger als 180
07.12.2008 15:58:00
Gerd
Hallo Wolfgang,
-wenn deine Analyse stimmt
-in Grunddaten,Spalte A des sichtbaren Filterbereichs (bei Zeilen mit >=180) Werte stehen
-unter dem gesamten Filterbereich in in Grunddaten Spalte A keine Werte/Formeln stehen
dann vielleicht so:

Sub FilternUndKopieren2()
Application.ScreenUpdating = False
With Sheets("Grunddaten")
.CheckBox1 = 0
.Unprotect
.Range("A1").AutoFilter Field:=17, Criteria1:=">180"
End With
With Sheets("Grunddaten")
If .Cells(.Rows.Count, 1).End(xlUp).Row > 1 Then 'xxxxxxx
Intersect(.Columns("A:R"), .Range(.Rows(2), .Rows(.Range("a1").CurrentRegion.Rows.Count))). _
Copy
Sheets("Altdaten").Cells(Rows.Count, 1).End(xlUp).Offset(1, 0).PasteSpecial xlPasteFormats
Sheets("Altdaten").Cells(Rows.Count, 1).End(xlUp).Offset(1, 0).PasteSpecial xlPasteValues
.Range(.Rows(2), .Rows(.Range("a1").CurrentRegion.Rows.Count)).EntireRow.Delete shift:=xlUp
End If 'xxxxxxx
.Range("A1").AutoFilter
.AutoFilterMode = False
End With
Application.CutCopyMode = False
'löscht in Grunddaten und Altdaten die Leerzeilen
On Error Resume Next
Sheets("Grunddaten").UsedRange.Columns(1).SpecialCells(xlCellTypeBlanks).EntireRow.Delete
Sheets("Altdaten").UsedRange.Columns(1).SpecialCells(xlCellTypeBlanks).EntireRow.Delete
On Error GoTo 0
Sheets("Grunddaten").CheckBox1 = 1
Application.ScreenUpdating = True
End Sub


Gruß Gerd

Anzeige
Danke Gerd, das ist es !
07.12.2008 16:10:08
Wolfgang
Hallo Gerd,
habe sofort Deinen Code eingebaut; er läuft wunderbar. Mehr als 180 wird umkopiert und gelöscht, darunter bleibt stehen. Super ! - Danke Dir recht herzlich dafür. Einen schönen Sonntag noch und nochmals allerherzlichen Dank.
Gruß - Wolfgang
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige
Anzeige
Entdecke relevante Threads

Schau dir verwandte Threads basierend auf dem aktuellen Thema an

Alle relevanten Threads mit Inhaltsvorschau entdecken
Anzeige

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