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

Gefundene Datensätze variabel markieren

Gefundene Datensätze variabel markieren
27.04.2020 08:23:13
C.H.
Hallo zusammen,
ich möchte aus einer Liste bestimmte Datensätze löschen. Dazu habe ich folgendes aufgezeichnet:
Cells.Select
Range("B1").Activate
Selection.AutoFilter
Application.Goto Reference:="C2"
Application.Left = 730.75
Application.Top = 185.5
ActiveSheet.Range("$A$1:$AH$6476").AutoFilter Field:=2, Criteria1:="139302"
Rows("224:224").Select
Selection.Delete Shift:=xlUp
ActiveSheet.Range("$A$1:$AH$6475").AutoFilter Field:=2, Criteria1:="139328"
Rows("224:225").Select
Selection.Delete Shift:=xlUp

Nun sind die gefundenen Datensätze natürlich nicht immer in der/den oben angegebenen Zeile(n). Wie muß ich das VBA-Statement so anpassen, daß es mir immer nur die gefundenen Datensätze (-Zeilen) markiert und löscht.
MfG
Christoph

11
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Gefundene Datensätze variabel markieren
27.04.2020 09:23:21
Regina
Hallo Christoph,
teste mal den folgenden Code. dabei wir die letzte Zeile der Liste ermittelt, falls die Liste mal länger oder kürzer ist.
Sub test()
Dim lng_letzteZeile As Long
With ActiveSheet
lng_letzteZeile = .Cells(Rows.Count, 1).End(xlUp).Row
Application.DisplayAlerts = False
.Range("$A$1:$AH$" & lng_letzteZeile).AutoFilter Field:=2, Criteria1:="139302"
.Rows(1).Hidden = True
.Range("$A$1:$AH$" & lng_letzteZeile).SpecialCells(xlCellTypeVisible).Delete
.Rows(1).Hidden = False
.Range("$A$1:$AH$" & lng_letzteZeile).AutoFilter Field:=2, Criteria1:="139328"
.Rows(1).Hidden = True
.Range("$A$1:$AH$" & lng_letzteZeile).SpecialCells(xlCellTypeVisible).Delete
.Rows(1).Hidden = False
.AutoFilterMode = False
Application.DisplayAlerts = True
End With
End Sub

Anzeige
AW: Gefundene Datensätze variabel markieren
27.04.2020 10:33:00
C.H.
Danke erst einmal soweit. Das funxt.
Der Hunger kommt mit dem Essen:
wie gehe ich mit dem Fehlerfall um? Angenommen es wird in dem Script nach einem Wert gesucht, der aber gar nicht vorhanden ist. Derzeit stoppt das Script an der Stelle.
MfG
Christoph.
AW: Gefundene Datensätze variabel markieren
27.04.2020 10:49:08
Daniel
Hi
Das SpecialCells braucht immer mindendesten eine gefundene Zelle.
Versetze beim Löschen einfach den Zellbereich des Autofilters um 1 nach unten.
Dann bleibt die Überschrift auf jeden Fall stehen und für das SpecialCells gibt es die erste Leerzeile unterhalb des Autofilterbereichs als sicheren Treffer:
Solange du unterhalb der gefilterten Tabelle keine weiteren Daten hast, ist das das einfachste:
Sub test()
Dim lng_letzteZeile As Long
With ActiveSheet
lng_letzteZeile = .Cells(Rows.Count, 1).End(xlUp).Row
Application.DisplayAlerts = False
.Range("$A$1:$AH$" & lng_letzteZeile).AutoFilter Field:=2, Criteria1:="139302"
.Range("$A$2:$AH$" & lng_letzteZeile + 1).SpecialCells(xlCellTypeVisible).Delete
.Range("$A$1:$AH$" & lng_letzteZeile).AutoFilter Field:=2, Criteria1:="139328"
.Range("$A$2:$AH$" & lng_letzteZeile + 1).SpecialCells(xlCellTypeVisible).Delete
.AutoFilterMode = False
Application.DisplayAlerts = True
End With
End Sub

Gruß Daniel
Anzeige
AW: Gefundene Datensätze variabel markieren
27.04.2020 10:52:11
Regina
Hi,
dann muss vor dem Löschen abgefragt werden, ob mindestens ein Treffer gefunden wurde:
Sub test()
Dim lng_letzteZeile As Long
With ActiveSheet
lng_letzteZeile = .Cells(Rows.Count, 1).End(xlUp).Row
Application.DisplayAlerts = False
.Range("$A$1:$AH$" & lng_letzteZeile).AutoFilter Field:=2, Criteria1:="139302"
.Rows(1).Hidden = True
If .Range("A1:A" & Cells(Rows.Count, 1).End(xlUp).Row).SpecialCells(xlCellTypeVisible).Count >= _
1 Then
.Range("$A$1:$AH$" & lng_letzteZeile).SpecialCells(xlCellTypeVisible).Delete
End If
.Rows(1).Hidden = False
.Range("$A$1:$AH$" & lng_letzteZeile).AutoFilter Field:=2, Criteria1:="139328"
.Rows(1).Hidden = True
If .Range("A1:A" & Cells(Rows.Count, 1).End(xlUp).Row).SpecialCells(xlCellTypeVisible).Count > _
= 1 Then
.Range("$A$1:$AH$" & lng_letzteZeile).SpecialCells(xlCellTypeVisible).Delete
End If
.Rows(1).Hidden = False
.AutoFilterMode = False
Application.DisplayAlerts = True
End With
End Sub
Gruß Regina
Anzeige
AW: Gefundene Datensätze variabel markieren
27.04.2020 10:58:27
Daniel
Hi
Das verhindert den Fehler nicht.
Das SpecialCells muss mindestens eine Zelle finden.
Wenn dann so:
Überschrift eingeblendet lassen, das ist dann der sichere Treffer für das SpecialCells und in der IF-Abfrage dann mit ...Cells.Count > 1 prüfen.
Wenn du dann noch beim Löschen erst in Zeile 2 beginnt, brauchst du die Überschrift nicht ein- und ausblenden.
Gruß Daniel
AW: Gefundene Datensätze variabel markieren
27.04.2020 11:01:32
Regina
Hi Daniel,
ok, da bin ich wohl etwas "zu kurz gesprungen".
Gruß Regina
AW: Gefundene Datensätze variabel markieren
27.04.2020 11:26:57
Daniel
oder man prüft mit ZählenWenn (Worksheetfunction.countIf) ob der Suchbegriff überhaupt in der Liste vorkommt und braucht dann u.U. auch gar nicht erst filtern.
ich bevorzuge zum Löschen von Zeilen die Methode, dass ich per formel die zu löschenden Zeilen mit 0 kennzeichne und die die stehen bleiben sollen, mit der Zeilennummer um dann mit dem Daten - Datentools - Duplikate - Entfernen die Zeilen mit 0 zu löschen.
das ist sehr schnell und bietet auch mehr Möglichkeiten als der Autofilter, weil beispielswiese ODER-Verknüpfungen über mehrere Spalten gebildet werden können oder Daten aus darüber oder darunter liegendnen Zeilen verwendet werden können:
with AcitveSheet.UsedRange
with .columns(.columns.count + 1)
.FormulaR1C1 = "=IF(OR(RC2=139302,RC2=139328),0,Row())"
.Cells(1, 1).value = 0
.entireRow.RemoveDuplicates .Column, xlno
.ClearContents
end with
end with

diesen Code kann man eingentlich immer für die Aufgabe "Löschen von Zeilen mit Bedingung" verwenden.
Angepasst werden muss lediglich die kennzeichnungsformel.
Den Formeltext für den Code kann man auch so ermitteln, in dem man die Formel von Hand in die Zelle schreibt und mit dem Recorder aufzeichnet.
das ist bisher die beste Mehtode, um Zeilen aus einem Zellbereich zu entfernen denn:
- es ist sehr schnell
- es funktioniert mit größten Datenmengen
- es ist einfach
- man kann die Methode auch ohne VBA von Hand einsetzen
Gruß Daniel
Anzeige
AW: Gefundene Datensätze variabel markieren
28.04.2020 16:07:30
C.H.
Tach zusammen,
das hat alles so weit geklappt. Ich habe das Script in meine persönliche Makro-Mappe integriert. Wie kann ich daraus aber jetzt die aktive Datei mit dem aktiven Tabellenblatt "bearbeiten"?
MfG
Christoph
AW: Gefundene Datensätze variabel markieren
28.04.2020 16:15:35
Regina
Hi,
ActiveSheet bedeutet aktives Blatt, das ist es eigentlicg egal, wo der Code steht.
Gruß Regina
AW: Gefundene Datensätze variabel markieren
28.04.2020 16:51:42
C.H.
mmmh. Nun gut.
Nächste Fragen:
- Wie bekomme ich sie "ausgeblendet geöffnet?
- Wie lautet der korrekte Ausdruck für "Speichern unter" in xls 97-2003-Format? Der Folgende Dialog funxt jedenfalls nicht.
ActiveWorkbook.SaveAs Filename:= _
"LW:\Verzeichnis\Verzeichnis\*.xls" _
, FileFormat:=xlExcel8, Password:="", WriteResPassword:="", _
ReadOnlyRecommended:=False, CreateBackup:=False

Anzeige
AW: Gefundene Datensätze variabel markieren
28.04.2020 17:10:41
Daniel
Hi
Beim SaveAs musst du schon den vollständigen Dateinamen angeben, ohne Joker wie ? Und *
Die Dateierweiterung darfst du weglassen, die wird automatisch passen zum gewählten FileFormat vergeben.
Ausgeblendet öffnen geht mit GetObject
Oder normal öffnen und dann gleich ausblenden.
Wenn dazu noch die Bildschirmaktualisierung ausgeschaltet ist, siehts auch keiner.
Gruß Daniel

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige