Supportnet Computer
Planet of Tech

Supportnet / Forum / Tabellenkalkulation

Makro zum Löschen bestimmter Zeilen





Frage

guten tag zusammen... habe hier ein meiner meinung nach etwas größeres problem ^^ ich hab eine preisliste mit über 45000 einträgen und soll diese tabelle mit meiner eigenen abgleichen und entsprechend aktualisieren. mit dem befehl: =WENN(ISTNV(SVERWEIS(TEXT(A2;"@");mac_dbf.dbf!daten;8;FALSCH));"nicht mehr gültig";SVERWEIS(TEXT(A2;"@");mac_dbf.dbf!daten;8;FALSCH)) konnte ich dies lösen - habe auch gleichzeitig die meldung "´NV" unterdrückt und sie durch "nicht mehr gültig" ersetzt (für die artikel die nichtmehr in der neuen preisliste vorhanden sind und somit ungültig sind) nun muss ich aber diese zeilen mit "nicht mehr gültig" alle rauslöschen ..... habe es zunächst mal mit der "makro-aufnehmen" funktion versucht, (autofilter eingeschaltet; nach "nicht mehr gültig" sortiert ; die entsprechenden "übriggebliebenen" markiert und dann gelöscht) allerdings hat er mir da alle zeilen gelöscht (von der ersten markierten bis zur letzten) nun hab ich mir folgendes makro zusammengebastelt: Sub ZeilenLöschen() Dim i As Integer Range("B").Select z = ActiveSheet.UsedRange.Rows.Count Do Until ActiveCell.Value = "" If ActiveCell.Value = "nicht mehr gültig" Then ActiveCell.EntireRow.Delete i = i + 1 Else ActiveCell.Offset(1, 0).Select End If Loop MsgBox "Es wurden " & i & " Zeilen gelöscht" End Sub das makro funktioniert zwar, dauert es ewig, da er nach jeder gelöschten zeile die liste aktualisiert.... nuna zu meiner eigentlichen frage da mir das makro einfach zu lange dauert wollte ich wissen, ob die möglichkeit besteht, dass er alle zeilen in denen "nicht mehr gültig" vorkommt markiert und dann am ende löschte (sodass er das ganze nur einmal aktualisieren muss) wäre nett wenn mir jemand mein makro entsprechend ergänzt danke im vorraus mfg issues05

Antwort 1 von schnallgonz

Tagchen,
wenn Du die Bildschirmaktualisierung abklemmst,
sollte das den Ablauf schon ordentlich beschleunigen.

Application.ScreenUpdating = False


setzt Du an den Anfang des Listings, am Ende die Aktualisierung wieder anschalten (derselbe Befehl mit "True")

MfG
schnallgonz

Antwort 2 von issues05

habe das ausprobiert schnallgonz

- die aktualisierung am monitor ist nicht mehr zu sehen
- die zeit die er brauch um die zeilen zu löschen ist aber immernoch die selbe

ich schätze mal er rechnet die aktualisierung trotzdem noch durch .....
trotzdem danke für die hilfe ^^

ich tendiere immernoch zu der markierung der zeilen in der schleife úm dann alle zeilen nach der schleife zu löschen - hab aba keine ahnung wie ich das machen soll dass er all die markiert die "nicht mehr gültig" sind

wäre dankbar für weitere hilfe

mfg
issues05

Antwort 3 von schnallgonz

Hi, vielleicht hilft Dir dieses makro von Coros:

https://supportnet.de/threads/210698

MfG
schnallgonz

Antwort 4 von nighty

hi all :)

ist um einiges schneller vielleicht :))

gruss nighty

spalte a wird zur zeit durchsucht und wenn "nicht mehr gültig" gefunden wird die zeile gelöscht

Sub such()
Dim suche1 As Range
Dim zaehler1 As Long
For zaehler1 = 1 To ActiveSheet.UsedRange.SpecialCells(xlCellTypeLastCell).Row + 1
Set suche1 = ActiveSheet.Range("A" & zaehler1 & ":A" & ActiveSheet.UsedRange.SpecialCells(xlCellTypeLastCell).Row + 1).Find("nicht mehr gültig", LookIn:=xlValues)
If Not suche1 Is Nothing Then
zaehler1 = suche1.Row
ActiveSheet.Range(suche1.Row & ":" & suche1.Row).Delete Shift:=xlUp
Sheets(1).Application.CutCopyMode = False
End If
Next zaehler1
End Sub

Antwort 5 von nighty

hi :)

ok korrigiert :))

gruss nighty

Sub such()
Dim suche1 As Range
Dim zaehler1 As Long
Application.ScreenUpdating = False
For zaehler1 = 1 To ActiveSheet.UsedRange.SpecialCells(xlCellTypeLastCell).Row + 1
Set suche1 = ActiveSheet.Range("A" & zaehler1 & ":A" & ActiveSheet.UsedRange.SpecialCells(xlCellTypeLastCell).Row + 1).Find("test", LookIn:=xlValues)
If Not suche1 Is Nothing Then
zaehler1 = suche1.Row
ActiveSheet.Range(suche1.Row & ":" & suche1.Row).Delete Shift:=xlUp
End If
Next zaehler1
Application.ScreenUpdating = False
End Sub

Antwort 6 von nighty

hi all

vorletzte zeile
Application.ScreenUpdating = true

bin abgelenkt

gruss nighty

Antwort 7 von issues05

thx nighty

hm ... was müsste ich denn alles abändern um in spalte "B" nach dem begriff "nicht mehr gültig" zu suchen ?
mir fehlt irgendwie der überblick in dem von dir geschriebenen makro

danke dir

issues05

Antwort 8 von schnallgonz

Hi issues05
ich hoffe, nighty verzeiht mir, wenn ich in seinem Code rumfuchtel.
Ich habe Deinen Wunsch reingebastelt und zwei Kommentarzeilen reingeschrieben, falls Du das Ding später nochmal anpassen musst:
Sub such()
Dim suche1 As Range
Dim zaehler1 As Long
Application.ScreenUpdating = False
For zaehler1 = 1 To ActiveSheet.UsedRange.SpecialCells(xlCellTypeLastCell).Row + 1
Rem hier gewünschte Spalte eintragen, jetzt B
Rem und hinter F i n d  zwischen "" Suchbegriff
Set suche1 = ActiveSheet.Range("B" & zaehler1 & ":B" & ActiveSheet.UsedRange.SpecialCells(xlCellTypeLastCell).Row + 1).Find("nicht mehr gültig", LookIn:=xlValues)
If Not suche1 Is Nothing Then
zaehler1 = suche1.Row
ActiveSheet.Range(suche1.Row & ":" & suche1.Row).Delete Shift:=xlUp
End If
Next zaehler1
Application.ScreenUpdating = False
End Sub


MfG
schnallgonz

Ein Erfahrener ist besser als 10 Gelehrte.
Signatur und Textformatierungen wurden mitSNTool V1.2.7 erstellt