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

Mit Schlaufe Zeile löschen --> zu langsam

Mit Schlaufe Zeile löschen --> zu langsam
09.06.2009 17:36:00
Martin
Hallo zusammen
Ich habe eine Schlaufe geschrieben, mit der alle Zeilen gelöscht werden sollen bei denen in Spalte G ein "A" oder ein "I" steht:
For i = letzte To 2 Step -1
If Range("G" & i).Value = "A" _
Or Range("G" & i).Value = "I" Then
Rows(i).Delete
End If
Next i
Leider dauert diese Schlaufe recht lange, da das Worksheet mehrere 1000 Zeilen beinhaltet.
Wie könnte ich das Makro schneller machen?
Besten Dank im voraus für Eure Hilfe

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

Betreff
Datum
Anwender
Anzeige
AW: Mit Schlaufe Zeile löschen --> zu langsam
09.06.2009 17:53:34
Peter
Hallo Martin,
versuch es so:
Option Explicit
'
' Zeilen, die in Spalte G ein A oder I enthalten, sollen gelöscht werden
'

Public Sub Zeilen_loeschen()
Dim lZeile  As Long
Dim rZeile  As Range
For lZeile = 1 To ActiveSheet.UsedRange.SpecialCells(xlCellTypeLastCell).Row
If Range("G" & lZeile).Value = "A" Or _
Range("G" & lZeile).Value = "I" Then
If rZeile Is Nothing Then
Set rZeile = Rows(lZeile)
Else
Set rZeile = Union(rZeile, Rows(lZeile))
End If
End If
Next lZeile
If Not rZeile Is Nothing Then rZeile.Delete
Set rZeile = Nothing
End Sub


Gruß Peter

Anzeige
besser mit ...
09.06.2009 19:08:16
Uduuh
Hallo,
Cells und Select Case

Public Sub Zeilen_loeschen()
Dim lZeile  As Long
Dim rZeile  As Range
For lZeile = 1 To ActiveSheet.UsedRange.SpecialCells(xlCellTypeLastCell).Row
Select Case Cells(lZeile, 7)
Case "A", "I"
If rZeile Is Nothing Then
Set rZeile = Rows(lZeile)
Else
Set rZeile = Union(rZeile, Rows(lZeile))
End If
End Select
Next lZeile
If Not rZeile Is Nothing Then rZeile.Delete
Set rZeile = Nothing
End Sub


Gruß aus’m Pott
Udo

Danke
09.06.2009 21:51:36
Martin
Danke euch beiden!
Ich werde es morgen früh gleich einbauen und ausprobieren. Super, die schnellen Antwort!
n'schönen Abend noch
Anzeige
AW: Schleifenfreie Alternativen
09.06.2009 23:44:27
Daniel
Hi
hier nochmal zwei weitere Alternativen zum Löschen der Zeilen, die auch recht zügig laufen sollten.
bei grösseren Datenmengen (mehr als 16.000 Zeilen Daten) sollte auf jeden Fall die 2. Variante verwendet werden, weil dann die erste nicht mehr zuverlässig funktioniert.

Sub löschen1()
With Range("G:G")
.Replace what:="A", Replacement:=True, lookat:=xlWhole
.Replace what:="I", Replacement:=True, lookat:=xlWhole
.SpecialCells(xlCellTypeConstants, 4).EntireRow.Delete
End With
End Sub



Sub löschen2()
With ActiveSheet.UsedRange
With .Columns(.Columns.Count).Offset(0, 1)
.FormulaR1C1 = "'=IF(OR(RC7=""I"",RC7=""A""),"""",ROW())"
.Formula = .Value
.EntireRow.Sort key1:=.Cells(1, 1), order1:=xlAscending, header:=xlNo
.SpecialCells(xlCellTypeBlanks).EntireRow.Delete
.Clear
End With
End With
End Sub


Gruß, Daniel

Anzeige
AW: Schleifenfreie Alternativen
10.06.2009 09:00:51
Martin
Hallo Daniel
Besten Dank für die Antwort!
Ich habe gleich mal deine zweite Variante ins mein Makro reinkopiert. Bis zum "Delete" läuft sie auch, aber gelöscht werden die Zeilen nicht. Ich nahm mal an, dass es daran liegt, weil in der Zelle nicht ein "Blank" ist, sondern eine Formula.
Ich habe daher noch ein
.Copy
.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
vor
.SpecialCells(xlCellTypeBlanks).EntireRow.Delete
reingeschoben.
Komischerweise erscheint nun in den Zellen, die eigentlich "Blank" sein sollten, so ein Apostroph ' und ich verstehe nicht warum.....!?
Kann mir da jemand kurz einen Rat geben? Besten Dank schon auch im voraus.
Anzeige
AW: Schleifenfreie Alternativen
11.06.2009 14:28:21
Martin
Besten Dank nochmals für die sehr brauchbare Alternative!!
hab's inzwischen selber rausgekriegt.

300 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige