Live-Forum - Die aktuellen Beiträge
Datum
Titel
28.03.2024 21:12:36
28.03.2024 18:31:49
Anzeige
Archiv - Navigation
1604to1608
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

Wenn A oder B dann Zeile Löschen

Wenn A oder B dann Zeile Löschen
05.02.2018 20:51:21
Malle
Guten Abend liebe Forengemeinde,
ich benötige wieder einmal eure Hilfe, da ich fast am Verzweifeln bin.
Ich habe eine Tabelle, in der in Spalte A verschiedene Buchstaben je Zeile enthalten sind. Ich habe versucht, ein Makro zu basteln, dass die Zeile löscht, wenn Spalte A nicht A oder B ist. Sobald A oder B darin vorkommen, soll die Zeile bestehen bleiben.
Hier mein Versuch, der aus einem anderen abgewandelten Makro besteht:
Sub Wertloeschen()
For j = 1 To 100000
tmp = False
While tmp = False
Content = Trim(Cells(j, 1).Value)
If Content  "A" Xor "B" Then
Rows(j).Select
Selection.Delete shift:=xlUp
Else
tmp = True
End If
Wend
Next j
MsgBox "Erfolgreich"
End Sub
Bei dieser Konstellation wird alle gelöscht und es kommt ein Laufzeitfehler.
Habt ihr eine Lösung?

1
Beitrag zum Forumthread
Beitrag zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Wenn A oder B dann Zeile Löschen
05.02.2018 22:22:41
Daniel
Hi
bei "Excel gut - VBA bescheiden" empfielt es sich, erstmal eine Methode zu entwickeln, mit der man das Problem auch in Excel direkt schnell und einfach ohne Makro lösen könnte. dh mit hilfe der Excelmenüfunktionen und Formeln
Wenn man diese gefunden hat, baut man einfach diesen Lösungsweg in VBA, hierbei kann man sich dann oft vom Makrorecorder unterstützen lassen (in Excel 2007 leider nur etwas eingeschränkt)
in deinem Fall mit dem Zeilen löschen wäre das folgender Weg:
1. Markiere in einer Hilfsspalte am Tabellenende alle Zeilen, die gelöscht werden müssen, mit der 0 und alle Zeilen die stehen bleiben sollen mit der aktuellen Zeilennummer.
in deinem Fall wäre das die Formel (für Zeile 1):
=Wenn(Oder(Glätten(A1)="A";Glätten(A1)="B";Zeile();0)
2. schreibe in die Überschriftenzeile der Hilfsspalte die 0
3. wende auf die ganze Tabelle die Funktion DATEN - DATENTOOLS - DUPLIKATE ENTFERNEN an, verwende hierbei die Hilfsspalte als Kriterium mit der Option "keine Überschrift"
4. lösche die Hilfsspalte wieder.
ich empfehle dir erstmal, dieses von Hand auszuprobieren damit du verstehst was du machst (sollte bei Excel-gut aber kein Problem sein), wenn du Probleme hast, das in Code zu wandeln, kannst du ja nochmal fragen.
bei der angegeben Datenmenge (100.000 Zeilen) ist diese Methode der Schleife um Welten überlegen.
aber grundsätzlich zu deinem Code, hier mal die wichtigsten Fehler
1. beim Löschen oder Einfügen von Zeilen per Schleife sollte man die Schleife immer rückwärts laufen lassen. Das erspart dir deine zusätzliche While-Wend-Schleife
2. Wenn du in VBA die Prüfung machene willst: Wenn x = "A" oder "B" dann musst du das so schrieben:
If X = "A" OR X = "B"
3. wenn du eine Prüfung mit "nicht" oder "ungleich" machen willst, dann überlege dir, ob die vorgesehenen Aktionen für den THEN-Teil und den ELSE-Teil nicht besser tauschst.
Dann wird die Prüfung einfacher (insbesondere, wenn noch ein ODER im Spiel ist).
so sollte dein Code funktioneren:
Sub Wertloeschen()
For j = 100000 To 1 Step - 1
Content = Trim(Cells(j, 1).Value)
If Content = "A" OR Content = "B" Then
'nix machen
Else
Rows(j)..Delete shift:=xlUp
End If
Next j
MsgBox "Erfolgreich"
End Sub
Gruß Daniel
Anzeige

341 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige