Anzeige
Archiv - Navigation
1456to1460
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

Alternative zu for each Zelle

Alternative zu for each Zelle
20.11.2015 14:42:13
Chris
Hallo Forum,
ich möchte rund 2000 Zellen einer Spalte ("B2:B2000") auf den Wert 60 überprüfen.
Wenn vorhanden lösche ganze Zeile.
Gibt es eine Alternative zu
For each zelle in rng
if zelle.value = 60 then ....
Schleifen sollen bei vielen Zellen recht langsam werden...
Danke
Chris

9
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Alternative zu for each Zelle
20.11.2015 14:49:13
RPP63
Hi!
Filtere Spalte B nach 60 und lösche die sichtbare Zeilen unterhalb der Überschrift.
(geht natürlich auch mittels VBA)
Oder sortiere Spalte B, bestimme die erste und letzte Zeile mit 60 und lösche den Block.
Gruß Ralf

AW: Alternative zu for each Zelle
20.11.2015 14:53:24
Chris
Hallo Ralf,
das mit dem Filter ist eine gute Idee und bekomme ich per vba bestimmt hin.
Mir fällt gerade das nächste Problem ein:
Nachdem alle 60er gelöscht wurden und der filter wieder aufgehoben ist, sind die
gelöschten Reihen leer. Zwischendurch finden sich dann Zeilen mit Inhalt...
Wie kann nach dem löschen alle Zeilen mit Inhalte untereinander auflisten,
sodass zwischendurch keine leeren Zeilen vorhanden sind.
Gruß
Chris

Anzeige
AW: Alternative zu for each Zelle
20.11.2015 15:33:38
Werner
Hallo Chris,
z.B. indem du dann deine Daten nach irgend einer Spalte sortiert.
Gruß Werner

AW: Alternative zu for each Zelle
20.11.2015 14:54:34
Claus
Hallo Chris,
von Hand könnte man ja mit dem Autofilter auf Spalte B = 60 diese anzeigen, dann alles markieren und löschen. Vielleicht diesen Vorgang mal als Makro aufzeichnen und schauen was passiert...
Grüßle Claus

AW: Alternative zu for each Zelle
20.11.2015 15:12:03
Daniel
Hi
du hast zum Autofilter noch folgende Alternative, wenn die 60 als fixer Wert in der Zelle steht und nicht per Formel erzeugt wird:
ersetze die 60 durch den Wahrheitswert WAHR und lösche alle Zellen mit Wahrheitswert und er _ Option "ganze Zeile:

With Columns(2)
.Replace 60, True, xlwhole
on error Resume Next
.SpecialCells(xlcelltypeconstants, 4).EntireRow.Delete
On error goto 0
End With
ansonsten kann ich immer nur meine Standardmethode zum löschen von Zeilen ab Excel 2007 empfehlen, welche:
- sehr schnell ist, auch in unsortierten Daten mit grössten Datenmengen
- höchst flexibel in Bezug auf die Löschbedinung ist
- Bei bedarf auch von Hand ohne makro anwendbar ist
- einfach Programmiert werden kann und ohne Schleifen auskommt (vorteilhaft fürs Testen im einzelstep)
das geht dann so:
1. schreibe in eine Hilfsspalte am Tabellenende eine Formel, welche alle Zeilen, die gelöscht werden sollen mit 0 kennzeichenet und alle die stehen bleiben müssen mit der aktuellen Zeilennummer
in deinem Falle für Zeile 2: =Wenn(B2=60;0;Zeile())
2. schreibe in die Überschriftenzeile der Hilfsspalte ebenfalls die 0
3. wende auf die ganze Tabelle die Menüfunktion DATEN - DATENTOOLS - DUPLLKATE ENTFERNEN an, mit der Hilfsspalte als Kriterium und der Option "keine Überschrift"
4. lösche die Hilfsspalte:
sieht dann als Code so aus:
With ActiveSheet.UsedRange
With .columns(.Columns.count + 1)
.FormulaR1C1 = "=If(RC2=60,0,Row())"
.cells(1, 1).Value = 0
.EntireRow.RemoveDuplicates .column, xlnno
.ClearContents
End With
End With
den Code kannst du so für alle anfallenden Zeilenlöschungen mit Bedingung verwenden, anpassen musst nur die Formel an die jeweilige Bediung, der erst ist immer gleich.
Gruß Daniel

Anzeige
AW: Alternative zu for each Zelle
24.11.2015 07:34:24
Chris
Hallo Daniel,
danke für dein Makro. Kann man das so anpassen, dass anstatt EntireRow nur ein bestimmter Bereich
gelöscht wird?
Also so: Wenn in irgendeiner Zelle von BH2:B2000 der Wert 60 drin stehtn, dann lösche in der entsprechende Reihe den Bereich J:U in sortiere danach alles so, dass keine Leerzeilen zwischen den Datensätzen sind.
Ich weiß leider nicht, wie man dein Makro umändern muss...
Danke und Grüße

AW: Alternative zu for each Zelle
24.11.2015 07:49:09
Chris
ich meine...BH2:BH2000, vgl.unten...

AW: Alternative zu for each Zelle
24.11.2015 08:31:56
Chris
ich meine...BH2:BH2000, vgl.unten...

AW: Alternative zu for each Zelle
24.11.2015 09:44:22
Daniel
Hi
ungetestet:
With range("BH:BH")
.Replace 60, True, xlwhole
on error Resume Next
Intersect(.SpecialCells(xlcelltypeconstants, 4).EntireRow, Range("J:U")).Delete Shift:=xlup
On error goto 0
End With
With ActiveSheet.UsedRange
.Columns(22).Insert shift:=xltoright
With .columns(22).FormulaR1C1 = "=If(RC61=60,0,Row())"
.cells(1, 1).Value = 0
.Offset(0, -12).Resize(, 13).RemoveDuplicates 13, xlno
.Delete Shift:=xltoleft
End With
End With
beachte ggf, dass bei der ersten Variante Zellbezüge, die sich auf die gelöschten Zellbereiche beziehen mit angepasst werden.
bei der zweiten Variante mit dem RemoveDuplicates passiert das nicht (das ist vermutlich auch der Grund dafür, dass das RemoveDuplicats so schnell ist)
Gruß Daniel
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige