Live-Forum - Die aktuellen Beiträge
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender Navigationstipps
Anzeige
Inhaltsverzeichnis

Zeilen löschen die >=0 und <=9

Zeilen löschen die >=0 und <=9
20.11.2008 15:05:00
Walter
Hallo,
habe eine Tabelle Spalte a - n.
Es sollten alle Zeilen gelöscht werden, die
in der Spalte "K" >=0 und Ab Zeile 6, vielleicht kann mir jemand einen Tip geben.
mfg walter aus D MB

14
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Zeilen löschen die >=0 und <=9
20.11.2008 15:16:00
JogyB
Hi.

Sub loeSchen()
Dim i As Long
With ActiveSheet
For i = .Cells(Rows.Count, 11).End(xlUp).Row To 6 Step -1
If IsNumeric(.Cells(i, 11)) And Not IsEmpty(.Cells(i, 11)) Then
If .Cells(i, 11).Value = 0 Then
.Rows(i).Delete
End If
End If
Next
End With
End Sub

Gruss, Jogy

Das geht, kann man noch
20.11.2008 15:35:00
Walter
Hallo Jogy,
es läuft gut !
Kann man auch noch Namen aus der Spalte 4"D" NICHT berücksichtigen ?
Allerdings habe ich mehrer Namen, zb. LKK.. oder Müll.. oder Terstulte
etc. ich könnte ja auch die Namen in der Tabelle in Spalte 15 hinterlegen ?
mfg Walter aus D MB
Anzeige
AW: Das geht, kann man noch
20.11.2008 16:11:24
JogyB
Hi Walter,
kann man sicher, nur verstehe ich nicht so ganz wie Du das meinst... sollen die Zeilen nicht gelöscht werden, wenn bestimmte Bezeichnungen in Spalte D stehen?
Gruss, Jogy
Hallo Jogy, ganau
20.11.2008 17:42:13
Walter
Hallo Jogy,
ja genau, wenn z.b. Müller oder Schmitz oder ...
steht. Diese Zeile soll nicht gelöscht werden auch wenn in der Spalte K
eine 3 oder etc. steht.
mfg Walter aus D MB
AW: Hallo Jogy, ganau
20.11.2008 21:31:00
JogyB
Hallo.
Müßte so gehen. Die Ausnahmeliste muss in Spalte 15 (O) und dort in Zeile 1 beginnen.

Sub loeSchen()
Dim i As Long
Dim k As Long
Dim exClude() As String
Dim deLete As Boolean
Dim checkValue As String
ReDim exClude(0 To 0)
Application.ScreenUpdating = False
With ActiveSheet
' Ausnahmen aus Spalte 15 einlesen.
' Zeile 1 von Spalte 15 darf nicht leer sein!
If .Cells(1, 15)  "" Then
ReDim exClude(1 To .Cells(Rows.Count, 15).End(xlUp).Row)
For i = 1 To .Cells(Rows.Count, 15).End(xlUp).Row
exClude(i) = .Cells(i, 15).Value
Next
End If
For i = .Cells(Rows.Count, 11).End(xlUp).Row To 6 Step -1
' Wenn Zelle in Spalte
If IsNumeric(.Cells(i, 11)) And Not IsEmpty(.Cells(i, 11)) Then
If .Cells(i, 11).Value = 0 Then
' Geht zunächst mal davon aus, dass gelöscht werden soll
deLete = True
' Wenn Werte in Ausnahmeliste, dann ist die obere Grenze
' des Datenfeldes exClude > 0 --> Prüfung auf Ausnahmen
If UBound(exClude) > 0 Then
' Zu testenden Wert in Spalte D zwischenspeichern (schneller)
checkValue = .Cells(i, 4).Value
' Wert mit Ausnahmeliste vergleichen
For k = 1 To UBound(exClude)
' Bei Übereinstimmung nicht löschen und Überprüfung abbrechen
If checkValue = exClude(k) Then
deLete = False
Exit For
End If
Next
End If
' Wenn Löschmarker noch gesetzt, dann löschen
If deLete Then .Rows(i).deLete
End If
End If
Next
' Schreibt Ausnahmeliste zur Sicherheit nochmal in Spalte 15
' Ein Teil könnte gelöscht worden sein
For i = 1 To UBound(exClude)
.Cells(i, 15).Value = exClude(i)
Next
End With
Application.ScreenUpdating = True
End Sub

Gruss, Jogy

Anzeige
Verbesserung
21.11.2008 10:13:03
JogyB
Hallo.
Nochmal ein wenig verbessert, jetzt können die Suchbegriffe an beliebiger Stelle in Spalte 15 _ stehen

Sub loeSchen()
Dim i As Long
Dim k As Long
Dim exClude() As String
Dim deLete As Boolean
Dim checkValue As String
Dim leerZelle As Range
Dim exCludeRange As Range
Dim zeLLe As Range
ReDim exClude(-1 To -1)
Application.ScreenUpdating = False
With ActiveSheet
' Beliebige leere Zelle in Spalte 15 finden (wenn Sheet ganz voll, dann geht's nicht)
' Wird für ColumnDifferences gebraucht
Set leerZelle = Application.Columns(15).Find("")
' Ausnahmen aus Spalte 15 einlesen.
'On Error Resume Next
Set exCludeRange = .Columns(15).ColumnDifferences(leerZelle)
' Wenn kein Fehler, dann wurden Suchbegriffe gefunden
If Err.Number = 0 Then
' 2-dimensional wegen Zurückschreiben (s.u.)
ReDim exClude(1 To exCludeRange.Cells.Count, 1 To 1)
i = 0
For Each zeLLe In exCludeRange
i = i + 1
exClude(i, 1) = zeLLe.Value
Next
End If
For i = .Cells(Rows.Count, 11).End(xlUp).Row To 6 Step -1
' Wenn Zelle in Spalte
If IsNumeric(.Cells(i, 11)) And Not IsEmpty(.Cells(i, 11)) Then
If .Cells(i, 11).Value = 0 Then
' Geht zunächst mal davon aus, dass gelöscht werden soll
deLete = True
' Wenn Werte in Ausnahmeliste, dann ist die obere Grenze
' des Datenfeldes exClude > 0 --> Prüfung auf Ausnahmen
If UBound(exClude, 1) > -1 Then
' Zu testenden Wert in Spalte D zwischenspeichern (schneller)
checkValue = .Cells(i, 4).Value
' Wert mit Ausnahmeliste vergleichen
For k = 1 To UBound(exClude)
' Bei Übereinstimmung nicht löschen und Überprüfung abbrechen
If checkValue = exClude(k, 1) Then
deLete = False
Exit For
End If
Next
End If
' Wenn Löschmarker noch gesetzt, dann löschen
If deLete Then .Rows(i).deLete
End If
End If
Next
' Schreibt Ausnahmeliste zur Sicherheit nochmal in Spalte 15
' Ein Teil könnte gelöscht worden sein
If UBound(exClude, 1) > -1 Then
.Cells(1, 15).EntireColumn.ClearContents
.Range(.Cells(1, 15), .Cells(UBound(exClude, 1), 15)).Value = exClude()
End If
End With
Application.ScreenUpdating = True
End Sub

Gruss, Jogy

Anzeige
AW: Verbesserung Super aber
21.11.2008 20:15:00
walter
Guten Abend Jogy,
das klappt mit einer Einschränkung, der Name
z.b. Terst... da werden auch die Zeilen der Die anderen Namen konnte ich nicht überprüfen, da hier mehr als >10 Tage drin steht.
Ich habe meine Tabelle verändert, die 1. Spalte rausgenommen, der Name steht jetzt in der
Spalte 3 (C) und die Anzahl steht in der Spalte 10 (J). In der Spalte 15 habe ich die Namen,
die ich auch abgekürzt habe. z.b. Müller GmbH u. Co KG habe ich Müll .
Hier das geänderte Makro:
Dim i As Long
Dim J As Long
Dim exClude() As String
Dim deLete As Boolean
Dim checkValue As String
Dim leerZelle As Range
Dim exCludeRange As Range
Dim zeLLe As Range
ReDim exClude(-1 To -1)
Application.ScreenUpdating = False
Application.Calculation = xlCalculationManual
With ActiveSheet
' Beliebige leere Zelle in Spalte 15 finden (wenn Sheet ganz voll, dann geht's nicht)
' Wird für ColumnDifferences gebraucht
Set leerZelle = Application.Columns(15).Find("")
' Ausnahmen aus Spalte 15 einlesen.
'On Error Resume Next
Set exCludeRange = .Columns(15).ColumnDifferences(leerZelle)
' Wenn kein Fehler, dann wurden Suchbegriffe gefunden
If Err.Number = 0 Then
' 2-dimensional wegen Zurückschreiben (s.u.)
ReDim exClude(1 To exCludeRange.Cells.Count, 1 To 1)
i = 0
For Each zeLLe In exCludeRange
i = i + 1
exClude(i, 1) = zeLLe.Value
Next
End If
For i = .Cells(Rows.Count, 10).End(xlUp).Row To 6 Step -1
' Wenn Zelle in Spalte
If IsNumeric(.Cells(i, 10)) And Not IsEmpty(.Cells(i, 10)) Then
If .Cells(i, 10).Value <= 9 And .Cells(i, 10).Value >= 0 Then
' Geht zunächst mal davon aus, dass gelöscht werden soll
deLete = True
' Wenn Werte in Ausnahmeliste, dann ist die obere Grenze
' des Datenfeldes exClude > 0 --> Prüfung auf Ausnahmen
If UBound(exClude, 1) > -1 Then
' Zu testenden Wert in Spalte D zwischenspeichern (schneller)
checkValue = .Cells(i, 3).Value
' Wert mit Ausnahmeliste vergleichen
For J = 1 To UBound(exClude)
' Bei Übereinstimmung nicht löschen und Überprüfung abbrechen
If checkValue = exClude(J, 1) Then
deLete = False
Exit For
End If
Next
End If
' Wenn Löschmarker noch gesetzt, dann löschen
If deLete Then .Rows(i).deLete
End If
End If
Next
' Schreibt Ausnahmeliste zur Sicherheit nochmal in Spalte 15
' Ein Teil könnte gelöscht worden sein
If UBound(exClude, 1) > -1 Then
.Cells(1, 15).EntireColumn.ClearContents
.Range(.Cells(1, 15), .Cells(UBound(exClude, 1), 15)).Value = exClude()
End If
End With
Application.Calculation = xlCalculationAutomatic
Application.ScreenUpdating = True
End Sub
Anzeige
AW: Verbesserung Super aber
21.11.2008 20:38:00
JogyB
Hi Walter,
was genau ist jetzt Deine Frage? Willst Du dass es auch bei abgekürzten Namen fünktioniert? Wenn ja, wie soll/darf abgekürzt werden?
Nur als Bitte: Bitte formuliere Deine Frage etwas klarer, bei Dir muss ich immer raten, was Du eigentlich willst ;)
Gruss, Jogy
Danke für dein Verständnis
21.11.2008 21:26:48
walter
Hallo Jogy, entschuldige bitte für die schnellste Info !
Da die Namen manchmal eine andere Firmenendung haben, sollte die
Abfrage mit den ersten 3 Buchstaben genügen, z.b. Terstopelman Ter* oder ABT GmbH ABT*,
wenn das geht ?
mfg Walter MB
AW: Danke für dein Verständnis
22.11.2008 07:47:00
JogyB
Hi.
Ersetze das

If checkValue = exClude(J, 1) Then

durch


If checkValue Like exClude(J, 1) Then

Dann kannst Du bei den Namen mit Müller* etc. arbeiten.
Gruss, Jogy

Anzeige
Jogy DANKE auch für die Geduld ! -)
22.11.2008 10:04:00
walter
Guten Morgen Jogy,
danke für die Hilfe !!! und Geduld !!!
Schönes Wochenende,
mfg walter mb
AW: Zeilen löschen die >=0 und <=9
20.11.2008 15:21:00
TOM
Hallo Walter
So auf die Schnelle.....meinst Du so was:
Option Explicit

Sub Löschen()
Range("K7").Activate
Do Until ActiveCell = ""
If ActiveCell.Value >= 0 And ActiveCell.Value 


Gruss
TOM

AW: Zeilen löschen die >=0 und <=9
20.11.2008 16:13:00
Walter
Hallo Tom,
ja, werde dein Makro gleich testen muß noch 50 KM fahren.
Hatte aber noch eine Zusatzfrage:
Kann man auch noch Namen aus der Spalte 4"D" NICHT berücksichtigen ?
Allerdings habe ich mehrer Namen, zb. LKK.. oder Müll.. oder Terstulte
etc. ich könnte ja auch die Namen in der Tabelle in Spalte 15 hinterlegen ?
mfg Walter aus D MB
Anzeige
AW: Zeilen löschen die >=0 und <=9
21.11.2008 06:17:00
JogyB
Hallo Tom,
es ist ja nett dass Du helfen willst, aber bitte sammle erst noch ein wenig Programmiererfahrung.
Dein Code ist zum einen schlecht Stil (was soll das Activate?), zum anderen funktioniert er nicht richtig - und zwar nicht nur aufgrund eines kleinen Vertippers (darunter würde ich das Löschen der einzelnen Zelle statt der Zeile noch rechnen), sondern auch auf wegen eines grundsätzlichen Fehlers: Sobald eine Zelle leer ist, werden bricht der Code ab, auch wenn danach noch was kommt.
Gruss, Jogy

302 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige