Live-Forum - Die aktuellen Beiträge
Datum
Titel
24.04.2024 19:29:30
24.04.2024 18:49:56
24.04.2024 17:19:09
Anzeige
Archiv - Navigation
1488to1492
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

Code verkürzen

Code verkürzen
18.04.2016 13:08:13
Alex
Hallo Forum,
Ich würde gerne den Code in meinem Programm kürzen.
Das Programm geht eine Liste durch und soll, wenn sie bestimmte Strings findet die gesamte Zeile löschen. Zur Zeit habe ich das so gelöst:
For lCount1 = 1 To Worksheets("Alarme").UsedRange.Rows.Count
If Sheets("meinBlatt").Cells(lCount1, 1).Value = "String1" Then 'Wenn String1 entdeckt wird
Rows(lCount1 & ":" & lCount1).Select
Selection.Delete Shift:=xlUp
lCount1 = lCount1 - 1
End If
If Sheets("meinBlatt").Cells(lCount1, 1).Value = "String2" Then 'Wenn String2 entdeckt wird
Rows(lCount1 & ":" & lCount1).Select
Selection.Delete Shift:=xlUp
lCount1 = lCount1 - 1
End If
Next 
das funktioniert zwar, aber wird relativ lang. Ich hatte überlegt alle Strings in ein Array zu schreiben und dann abzufragen ob der Inhalt teil des Arrays ist. Bin bei der Umsetzung aber gescheitert.
Danke im vorraus!
Gruß
Alex

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

Betreff
Datum
Anwender
Anzeige
AW: Code verkürzen
18.04.2016 13:19:31
Daniel
Hi
zeilen Löschen mit Bedingung macht man am besten mit Duplikate-Entfernen.
hierzu kennzeichnet man mit einer Formel in einer Hilfsspalte alle Zellen, die gelöscht werden sollen mit 0 und alle die stehenbleiben müssen mit der aktuellen Zeilennummer.
dann schreibt man noch in die Überschriftenzeile die 0 (weil das Duplikate-Entfernen ja eine Zeile mit der 0 stehen lässt!) und führt dann das Duplikate-Entfernen aus.
sieht als makro dann so aus:
With Sheets("Alarme").UsedRange
With .Columns(.Columns.Count + 1)
.FormulaR1C1 = "=IF(IsNumber(Find(""-""&RC1&""-"",""-String1-String2-"")),0,Row())"
.Cells(1, 1).Value = 0
.EntireRow.RemoveDuplicates .Column, xlNo
.ClearContents
End With
End With
Gruß Daniel

Anzeige
AW: Code verkürzen
18.04.2016 13:54:22
Alex
Ich würde lügen wenn ich behaupten würde, dass ich den Code verstehe. Aber es funktioniert aufjedenfall. Danke :)

AW: Code verkürzen
18.04.2016 14:01:25
Daniel
Hi
naja ich hab doch erkärt was der Code macht:
zuert fügt er am Tabellenende eine Formel ein, welche alle Zellen mit 0 kennzeichnet die gelöscht werden sollen und alle die stehen bleiben müssen, mit der jeweiligen Zeilennummer.
damit haben alle Zellen, die gelöscht werden sollen den gleichen Wert und alle die stehen bleiben sollen, einen individuellen Wert.
Somit kann man die Zeilen mit 0 mit der Excelfunktion DATEN - DATENTOOLS - DUPLIKATE ENTFERNEN löschen.
die Formel die ich verwende prüft nur, ob der Text aus der Zelle im angegebenen langtext vorhanden ist:
=Wenn(IstZahl(Finden("-"&A1&"-";"-String-String2-"));0;Zeile())

Die Formel ist im Makro halt in der R1C1-Schreibweise geschrieben (englisch mit Z1S1-Zelladdressen)
Kannst du zum Testen auch mal von Hand ohne Makro ausführen (ist ja auch manchmal ganz hilfreich, wenn man grössere Tabellen von Hand bearbeiten kann, ohne erst ein Makro schreiben zu müssen)
Gruß Daniel

Anzeige
AW: Code verkürzen
18.04.2016 14:14:35
Daniel
Hi
nochmal für dich dein Code für mehrere unterschiedliche Texte:
for lCount1 = Worksheets("Alarme").UsedRange.Rows.Count to 1 Step -1
Select Case Sheets("meinBlatt").Cells(lCount1, 1).Value
Case "String1", "String2", "String3"
Rows(lCount1).Delete
Case Else
end Select
Next
beachte:
1. Schleifen zum Einfügen oder Löschen von Zeilen sollten immer rückwärts laufen.
Damit erspart man sich das Manipulieren am Schleifenzähler, weil sich das Verschieben der Zeilen auf den Bereich auswirkt der schon durchlaufen wurde und nicht auf den, der noch durchlaufen werden muss.
allerdings ist das löschen von Zeilen per Schleife sehr langsam, das von mir gezeigte RemoveDuplicates ist wesentlich schneller.
2. wenn eine Aktion bei mehren unterschiedlichen Werten ausgeführt werden soll, lässt sich das recht elegant mit Select Case anstelle von IF-Then programmieren.
Gruß Daniel

Anzeige
AW: Code verkürzen
18.04.2016 14:27:23
Alex
Ah der Tipp die Schleife Rückwärts laufen zu lassen ist echt gut.
Die Beschreibung war gut und es ging genau um die Zeile, die du nochmal übersetzt hast. Ich konnte sie zwar grob nachvollziehen, aber ich bin mir nicht sicher ob ich die Methode nochmal auf ein anderes Problem anwenden könnte. Aber die Übersetzung hilft sehr. Ich hatte ein Problem damit -RC1- gedanklich umzusetzen.
Deine Methode hat das Programm im Vergleich zur "Schleifen-variante" merklich schneller gemacht.
Vielen Dank für deine Mühe!

AW: Code verkürzen
18.04.2016 14:51:03
Daniel
HI
an dem R1C1 brauchst du dich nicht unbedingt stören.
du kannst die Formel auch erstmal von Hand direkt in die Zelle schreiben und dann dir im Direktfenster die Formel mit
?Selection.FormulaR1C1
anzeigen lassen. oder besser mit:
?Replace(Selection.FormulaR1C1, """", """""")
welches dir die Anführungszeichen gleich verdoppelt, so dass du die Formel direkt per Copy-Paste in den Code übernehmen kannst.
(es empfiehlt sich, in der Formel möglichst viele Zellbezüge absolut zu setzen und nur die relativ zu lassen, die unbedingt relativ sein müssen, dann wird die R1C1-Addressierungsart kürzter und übersichtlicher)
Gruß Daniel
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige