Anzeige
Archiv - Navigation
1400to1404
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

"Irgendwo" in Zeile Text, dann Zeile löschen

"Irgendwo" in Zeile Text, dann Zeile löschen
09.01.2015 11:35:26
Christoph
Moin Moin,
ich habe es ggw. mit einer ziemlich großen Tabelle zu tun und möchte diese für die weitere Bearbeitung bereinigen.
Gibt es einen VBA-Code bzw. in welche Richtung müsste ich denken, mit dem ich eine ganze Zeile löschen kann, wenn sich in irgendeiner der Zellen dieser Zeile eine Textfolge befindet bzw. wenn die Zeile nicht nur aus Zahlen besteht?
Was ich bisher gefunden habe ist:
Sub nvloeschen()
Dim i As Long
Application.ScreenUpdating = False
For i = Cells(Rows.Count, 5).End(xlUp).Row To 1 Step -1
If Cells(i, 5) = "x" Then Rows(i).Delete
Next i
Application.ScreenUpdating = True
End Sub
Leider lösche ich hiermit eine Zeile nur dann, wenn in Spalte E ein x steht. Daher ergeben sich für mich zwei fragen:
- Wie kann ich diesen Code zu abändern, dass nicht nur Spalte E, sondern die bspw. die Spalten A - X durchsucht werden?
- Was muss ich machen, damit eine Zeile nicht nur gelöscht wird, wenn in einer Zelle ein x steht, sondern dass die Zeile immer dann gelöscht wird, wenn in einer Zeile in den Spalten A - X irgendwo eine Textfolge zu finden ist?
Für einen kleinen Gedankenanstoß wäre ich sehr dankbar.
Ich wünsche einen schönen und erfolgreichen Tag.
Vielen Dank.
VG, Christoph

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

Betreff
Datum
Anwender
Anzeige
AW: "Irgendwo" in Zeile Text, dann Zeile löschen
09.01.2015 11:40:53
Klaus
Hi,
zum Beispiel so für Spalte A, B und C. Die Spalte kannst du im "Call" ändern oder auch per Schleife hochzählen, den Suchtext frei eingeben.
Sub Aufruf()
Call nvloeschen(1, "HierDenSuchText")
Call nvloeschen(2, "HierDenSuchText")
Call nvloeschen(3, "HierDenSuchText")
End Sub
Sub nvloeschen(spalte As Long, suchtext As String)
Dim i As Long
Application.ScreenUpdating = False
For i = Cells(Rows.Count, spalte).End(xlUp).Row To 1 Step -1
If Cells(i, spalte).Value Like "*" & suchtext & "*" Then Rows(i).Delete
Next i
Application.ScreenUpdating = True
End Sub
Neugierde: Du sagst du suchst Textfolgen - aber dein SUB heisst "nvloeschen". Wenn du echte #NV Werte hast, die lassen sich auch viel schneller löschen als Textfolgen ... dann melde dich bitte nochmal.
Grüße,
Klaus M.vdT.

Anzeige
Schneller:
09.01.2015 11:48:10
Klaus
Bei großen Datenmengen viel Schneller als die erste Version ist es, die Zellen erst zu sammeln und dann auf einmal zu löschen statt jedes mal einzeln:
Sub Aufruf()
Application.ScreenUpdating = False
Call nvloeschen(1, "HierDenSuchText")
Call nvloeschen(2, "HierDenSuchText")
Call nvloeschen(3, "HierDenSuchText")
Application.ScreenUpdating = True
End Sub
Sub nvloeschen(inSpalte As Long, SuchText As String)
Dim i As Long
Dim r As Range
For i = 1 To Cells(Rows.Count, inSpalte).End(xlUp).Row
If Cells(i, inSpalte).Value Like "*" & SuchText & "*" Then
If r Is Nothing Then
Set r = Cells(i, inSpalte)
Else
Set r = Union(r, Cells(i, inSpalte))
End If
End If
Next i
If Not r Is Nothing Then r.EntireRow.Delete shift:=xlUp
End Sub
Grüße,
Klaus M.vdT.

Anzeige
AW: "Irgendwo" in Zeile Text, dann Zeile löschen
09.01.2015 12:17:58
Christoph
Hallo,
sry, habe das

Sub nun geändert.
@arthur: danke, das mit der schleife funktioniert perfekt. nun stellen sich mir nur noch zwei  _
fragen.
1.) wenn ich wie unten in meinem code als suchkriterium TEXT verwende, löscht mir das makro  _
alle zeilen, auch die, in denen nur zahlen stehen. ich möchte aber eine zeile nur lediglich dann löschen, wenn sich in selbiger an irgendeiner stelle ein buchstabe befindet. wie lässt sich dies realisieren

Sub loeschen_wenn_text()
Dim i As Long
Application.ScreenUpdating = False
For j = 1 To 24
For i = Cells(Rows.Count, j).End(xlUp).Row To 1 Step -1
If Cells(i, j) = Text Then Rows(i).Delete
Exit For
Next i
Next j
Application.ScreenUpdating = True
End Sub
Wie stelle ich sicher, dass die 1. Zeile fixiert bleibt und mir bei ausführen des makros nicht die kopfzeilen mit den überschriften gelöscht werden?
Ich bleibe selber auch am ball, würde mich aber über hilfe freuen.
tausend dank.
Christoph

Anzeige
Kannst du das ....
09.01.2015 12:21:49
Klaus
... bitte nochmal fragen, so dass es lesbar und verständlich wird?
Grüße,
Klaus M.vdT.

AW: "Irgendwo" in Zeile Text, dann Zeile löschen
09.01.2015 11:43:35
Arthur
Hallo Christoph.
Um mehrere Spalten zu durchsuchen muss lediglich eine zweite Schleife um die bestehende gebaut werden. Bspw.
For j = 1 to 24 'A..X
For i = Cells(Rows.Count, j).End(xlUp).Row To 1 Step -1
If Cells(i, 5) = "x" Then Rows(i).Delete
exit for 'durchsuchen der Spalten abbrechen, weil ja schon gelöscht
Next i
Next j
Gruß, Arthur.

Zeilen löschen mit RemoveDuplicates
09.01.2015 12:16:41
Daniel
Hi
geht am einfachsten und sehr schnell so:
1. Schreibe in eine Hilfsspalte am Tabellenende eine Formel, welche alle Zeilen die gelöscht werden sollen mit 0 und die anderen mit der aktuellen Zeilennummer kennzeichnet
das wäre in deinem Fall:

=Wenn(ZählenWenn(A2:X2;"Zeichenfolge")>0;0;Zeile())
2. Schreibe in die erste Zeile dieser Hilfsspalte ebenfalls die 0 (Überschrift)
3. Wende auf die ganze Tabelle die Funktion DATEN - DATENTOOLS - DUPLIKATE ENTFERNEN an mit der Hilfsspalte als Kriterium und der Option "keine Überschrift".
alle Zeilen mit 0 sind dann ja Duplikate und werden gelöscht, ausser der ersten.
das geht von Hand einfach und schnell auch bei grössten Datenmengen und als Code ebenso:
With ActiveSheet.UsedRange
With .Columns(.Columns.Count + 1)
.FormulaR1C1 = "=IF(CountIf(RC1:RC24,""Zeichenfolge"")>0,0,Row())"
.cells(1, 1).Value = 0
.EntireRow.Removeduplicates .Column, xlno
.ClearContents
End With
End With
das hat beim Testen des Codes zusätzlich den Vorteil, dass alle Zeilen zuerst markiert werden bevor du sie löscht. Damit kannt du überprüfen, ob deine Markierungsformel richtig ist und ggf abändern, bevor du deine Daten final löschst.
Gruß Daniel
Anzeige

310 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige