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.
setzt Du an den Anfang des Listings, am Ende die Aktualisierung wieder anschalten (derselbe Befehl mit "True")
MfG
schnallgonz
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
- 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
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
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
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
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
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:
MfG
schnallgonz
Ein Erfahrener ist besser als 10 Gelehrte.
Signatur und Textformatierungen wurden mitSNTool V1.2.7 erstellt
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