Zeilen zwischen zwei Zeichen löschen ohne VBA
12.09.2017 10:01:35
Daniel
Hi
manuell kannst du das so schnell erledigen:
verwende eine Hilfsspalte (fürs Beispiel Spalte B)
die erste Zeile muss eine Überschriftenzeile sein.
schreibe in die zweite Zeile der Hilfsspalte diese Formel:
=Wenn(Links(A3;1)="{";wahr;falsch)
schreibe in die dritte Zeile der Hilfsspalte B diese Formel:
=Wenn(oder(Links(A3;1)="{";Links(A1;1)="}");nicht(A2);A2)
ziehe die Formel aus B3 bis zum Tabellenende runter (B2 nicht mit ziehen)
dann sollten alle Formeln, die gelöscht werden müssen mit WAHR gekennzeichnet sein und alle die stehen bleiben müssen mit FALSCH.
zum Löschen kannst du dann mit dem AUTOGFILTER nach WAHR filtern und diese Zeilen löschen.
bei vielen Zeilen geht's eventuell schneller, wenn du die Hilfsspalte kopierst und als Wert einfügts, und vor dem Filtern und Löschen die Liste nach der Hilfsspalte sortierst.
alternativ kannst du noch eine zweite Hilfsspalte C einfügen.
- dort kommt die Formel rein (Formel für C2)
=Wenn(B2;0;Zeile())
- diese Formel wieder bis nach unten ziehen
- in die Zelle C1 kommt die 0
- wende auf die ganze Tabelle die Funktion DATEN - DATENTTOOLS - DUPLIKATE ENTFERNEN an, mit der Spalte C als Kriterium und der Option "keine Hilfssspalte")
das ganze geht natürlich auch per Code:
Sub Löschen()
With ActiveSheet.UsedRange
With .Columns(.Columns.Count + 1).Resize(, 2)
.Cells(1, 1).Value = "check"
.Cells(2, 1).FormulaR1C1 = "=IF(LEFT(RC[-1],1)=""{"",TRUE,FALSE)"
.Cells(3, 1).Resize(.Rows.Count - 2).FormulaR1C1 = _
"=IF(OR(LEFT(RC1,1)=""{"",LEFT(R[-2]C1,1)=""}""),NOT(R[-1]C),R[-1]C)"
.Cells(1, 2) = 0
.Cells(2, 2).Resize(.Rows.Count - 1).FormulaR1C1 = "=IF(RC[-1],0,ROW())"
.EntireRow.RemoveDuplicates .Column + 1, xlNo
.ClearContents
End With
End With
End Sub
das ganze sollte wesentlich schneller sein als eine Schleife zum Löschen.
außerdem kannst du einfacher kontrollieren, ob die richtigen Zeilen zum löschen gekennzeichnet wurden, wenn du den Code nach dem Einfügen der Formeln stoppst.
Gruß Daniel