Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1096to1100
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

For Each mit Delete

For Each mit Delete
Philipp
Hallo zusammen,
mein folgendes Makro erfüllt seinen Zweck, jedoch empfinde ich die Sprungmarke als Schönheitsfehler, kann man bei For Each Schleifen und löschen des Elements dafür sorgen, dass er nicht immer ein Element überspringt?
Hier das Beispiel:
Sub LoescheSpalteWenn()
Dim Spalte as Object
Anfang:
For Each Spalte In ThisWorkbook.Sheets("Sheet1").Columns
If Cells(1, Spalte.Address).Value = "" Then Exit For
If Cells(1, Spalte.Address).Value  "Wert1" And Cells(1, Spalte.Address).Value  "Wert2"  _
Then
Spalte.Delete
GoTo Anfang
End If
Next
End Sub
Wenn ich nicht jedes Mal nach Löschen einer Spalte per Sprungmarke die Schleife erneut durchlaufen lasse, dann überspringt er die nächste Spalte, da ja die Spalte eins nach links rückt.
Mit ist klar, dass sich das leicht mit einer "For i = ..." Schleife realisieren lassen würde, ich möchte aber bewusst objektorientiert mit For Each arbeiten.
Grüße und besten Dank für Tipps im Voraus,
Philipp

10
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Benutzer
Anzeige
AW: For Each mit Delete
01.09.2009 11:46:23
Hajo_Zi
Halo Phillip,
lasse die Schleife von der letzten zur ersten Spalte laufen. Ich glaube dann brauchst Du keine Sprungmarke.

AW: For Each mit Delete
01.09.2009 11:53:13
JogyB
Hi.
Speichere die zu löschenden Spalten in einer Range und lösche die nach dem Durchlauf.
Ich wüßte gerade keine Möglichkeit, die Schleife bei For Each rückwärts laufen zu lassen (aber da lasse ich mir gerne eines besseren belehren).
Gruss, Jogy
AW: For Each mit Delete
01.09.2009 11:55:57
Hajo_Zi
Halo Jogy,
stelle die Letzte Spalte fest und dann For Loi=LetzteSpalte to 1
Gruß Hajo
Anzeige
AW: For Each mit Delete
01.09.2009 11:58:11
JogyB
Hi Hajo,
das ist mir klar, es ging explizit um das For Each und das soll ja - wenn ich es richtig verstanden habe - unbedingt genutzt werden.
Gruss, Jogy
AW: For Each mit Delete
01.09.2009 11:59:41
Hajo_Zi
Hallo Jogy,
ist da eine Sprungmarke notwendig?
Lade doch mal eine Datei hoch.
Gruß Hajo
AW: For Each mit Delete
01.09.2009 12:04:28
JogyB
Hi Hajo,
ich bin nicht der Fragesteller (mein erster Beitrag in diesem Thread sollte auch nicht unter Deinen, hab beim Posten nicht aufgepaßt).
Gruss, Jogy
AW: For Each mit Delete
01.09.2009 12:17:42
Philipp
Hallo,
die Variante mit dem Speichern als Range hört sich interessant an, auch wenn ich gerade nicht weiß wie das gehen soll.
Ich würde gerne eine Beispiel datei hochladen, aber die Firmenpolitik erlaubt es mir leider nicht Dateien hochzuladen, selbst wenn sie keine Firmeninformationen enthalten.
Kopiert einfach die Quellcode aus meinem ersten Beitrag und fügt in Spalte A bis Z irgendwelche Werte in der ersten Zeile ein. Zweit Spalten sollten den Wert "Wert1" und "Wert2" enthalten.
Vielleicht hat jemand noch eine Idee, wie man bei For Each Schleifen und löschen des Elements trotzdem nicht immer ein überspringt.
Vielen Dank bereits für eure Antworten,
Philipp
Anzeige
AW: For Each mit Delete
01.09.2009 12:03:02
Luschi
Hallo Philipp,
hier mußt Du schon mit For i = ... vorlieb nehmen, denn die For Each-Schleife beginnt immer im dem 1. Elelemt der Auflistung. Beim Löschen von Zeilen oder Spalten in der Excel-Tabelle muß man von unten nach oben bzw. von hinten nach vorn beginnen, ansonsten wird jede 2. Zeile/Spalte übersprungen.
Gruß von Luschi
aus klein-Paris
For Each mit Delete und Union
01.09.2009 12:19:26
NoNet
Hallo Philipp,
teste mal diesen Code (entspricht Jogys Vorschlag) :
Sub LoescheSpalteWenn2()
Dim rngSpalte As Range, rngGesamt As Range
For Each rngSpalte In ThisWorkbook.Sheets("Sheet1").Columns
If rngSpalte.Resize(1).Value = "" Then Exit For
If rngSpalte.Resize(1).Value  "Wert1" And rngSpalte.Resize(1).Value  "Wert2" Then
If rngGesamt Is Nothing Then
Set rngGesamt = rngSpalte
Else
Set rngGesamt = Union(rngGesamt, rngSpalte)
End If
End If
Next
If Not rngGesamt Is Nothing Then rngGesamt.Delete
Set rngGesamt = Nothing
End Sub

Gruß, NoNet
Anzeige
AW: For Each mit Delete und Union
01.09.2009 12:29:56
Philipp
Danke, den Umgang mit Range habe ich meist vermieden, aber endlich mal ein Klasse Beispiel, wie man damit arbeiten kann.

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige