Anzeige
Archiv - Navigation
1652to1656
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

Zeilen mit Bedingung löschen

Zeilen mit Bedingung löschen
19.10.2018 19:42:18
hewi
Liebe Experten,
ich habe diesem Forum schon viele gute Tipps entnommen, aber jetzt komme ich nicht weiter.
Unsere Telefonanlage erzeugt einen täglichen Report als CSV-Datei, die ich per Makro in Excel einlese (alle Felder als Text). Ich möchte nun alle Datensätze mit ungültigen (virtuellen) Rufnummern in Spalte D löschen. Das versuche ich mit:
Sub ungültige_DN_löschen()
Dim lastrow As Long, i As Long, DN As String
Sheets("Daten").Select
lastrow = Cells(Rows.Count, 4).End(xlUp).Row     'ermittelt die letzte Datenzeile in Spalte D
For i = lastrow To 2 Step -1
DN = Cells(i, 4).Value
Select Case DN
Case Left(DN, 2) = "99"
Rows(i).Delete Shift:=xlUp          'löscht DN, die mit 99 beginnen
Case DN >= "a"
Rows(i).Delete Shift:=xlUp          'löscht DN, die mit Buchstaben beginnen
Case DN = "*#*"
Rows(i).Delete Shift:=xlUp          'löscht DN, die # enthalten
Case DN = "*[*"
Rows(i).Delete Shift:=xlUp          'löscht DN, die [ enthalten
Case DN = "*x*"
Rows(i).Delete Shift:=xlUp          'löscht DN, die x enthalten
End Select
Next i
End Sub

Dieses Makro läuft ohne Fehler durch, allerdings scheint keine der Bedingungen zu greifen - es werden keine Datensätze gelöscht.
Was mache ich falsch?
Viele Grüße
Helmut

6
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Zeilen mit Bedingung löschen
19.10.2018 20:01:06
Daniel
Hi
Du setzt das Select Case falsch ein.
Probiers mal mit "If Then - ElseIf Then - ... Ende if"
Oder mit "Select Case True" und dann deine Bedigungen.
Des weiteren kann der Vergleich mit "=" keine Jokerzeichen verarbeiten.
Schau dir mal den Like-Operator in der Hilfe an, der wäre dann für dich das Richtige.
Oder prüfe mit Instr ob ein bestimmtes Zeichen im Text vorhanden ist.
Gruß Daniel
AW: Zeilen mit Bedingung löschen
19.10.2018 20:03:51
Uduuh
Hallo,
Select Case True
statt
Select Case DN
und sonst noch
Sub ungültige_DN_löschen()
Dim lastrow As Long, i As Long, DN As String
Sheets("Daten").Select
lastrow = Cells(Rows.Count, 4).End(xlUp).Row     'ermittelt die letzte Datenzeile in Spalte D
For i = lastrow To 2 Step -1
DN = Cells(i, 4).Value
Select Case True
Case Left(DN, 2) = "99"
Rows(i).Delete Shift:=xlUp          'löscht DN, die mit 99 beginnen
Case Not (IsNumeric(Left(DN, 1)))
Rows(i).Delete Shift:=xlUp          'löscht DN, die mit Buchstaben beginnen
Case DN Like "*#*"
Rows(i).Delete Shift:=xlUp          'löscht DN, die # enthalten
Case DN Like "*[*"
Rows(i).Delete Shift:=xlUp          'löscht DN, die [ enthalten
Case DN Like "*x*"
Rows(i).Delete Shift:=xlUp          'löscht DN, die x enthalten
End Select
Next i
End Sub

Gruß aus’m Pott
Udo

Anzeige
AW: Zeilen mit Bedingung löschen
19.10.2018 20:33:46
Daniel
Hi Udo
hast du das getestet?
Den Like-Operator solltest du dir nochmal anschauen.
Meines Wissens nach müsste dein Code alles Löschen, weil im Like das "#" der Joker für eine Ziffer ist und eckige Klammern dafür verwendet werden, um anzuzeigen, dass an der entsprechenden Stelle alle Zeichen erlaubt sind, die zwischen den Klammern stehen.
Gruß Daniel
AW: Zeilen mit Bedingung löschen
21.10.2018 19:49:30
Uduuh
Hallo Daniel,
hab ich vernachlässigt.
Dann doch besser mit InStr testen
Gruß aus’m Pott
Udo

AW: Zeilen mit Bedingung löschen
19.10.2018 20:33:47
Daniel
Hi Udo
hast du das getestet?
Den Like-Operator solltest du dir nochmal anschauen.
Meines Wissens nach müsste dein Code alles Löschen, weil im Like das "#" der Joker für eine Ziffer ist und eckige Klammern dafür verwendet werden, um anzuzeigen, dass an der entsprechenden Stelle alle Zeichen erlaubt sind, die zwischen den Klammern stehen.
Gruß Daniel
Anzeige
AW: Zeilen mit Bedingung löschen
22.10.2018 17:08:22
hewi
Hi Daniel und Udo,
herzlichen Dank für eure Hilfe - et het jefluppt! :-)
(Ich bin leider erst heute zum Testen gekommen)
Der Tipp mit INSTR funktioniert, LIKE "*#*" hat tatsächlich alle Datensätze gelöscht.
Bei 35.000 Datensätzen, von denen ca. 8.000 gelöscht werden, dauert das ganze relativ lange (ca. 15 min). ScreenUpdating habe ich bereits ausgeschaltet. Gibt es vielleicht noch einen Trick um das Ganze zu beschleunigen?
Viele Grüße aus Aachen
Helmut

306 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige