Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

VBA: Zeile in anderem Blatt finden und löschen

VBA: Zeile in anderem Blatt finden und löschen
18.11.2019 23:45:54
Lukas
Hallo liebe Community,
ich habe eine Excel-Datei mit zwei Tabellenblättern. Die (vereinfachte) Ausgangssitutation ist folgende:
Tabellenblatt 1 ("Input"):
Datum, Vorname, Name, Thema
Tabellenblatt 2 ("Output"):
Datum, Vorname, Name, Thema, Status
Ziel:
Wenn in einer beliebigen Zeile in Spalte D im Tabellenblatt 2 ("Output") der Status "xy" ausgewählt wurde, durchsuche Tabellenblatt 1 ("Input") nach den vier Kriterien (Datum, Vorname, Name, Thema) und lösche die betroffene Zeile im Tabellenblatt 1 ("Input"). Das kann gerne auch mit einer Hilfsspalte passieren, z.B. mit einer ID basierend auf den vier Kriterien bzw. einer einfachen Verkettung der vier Kriterien (z.B. "18.11.2019-Max-Mustermann-Wohnung-xy").
Wie kann ich das als VBA umsetzen?
Vielen Dank für Eure Hilfe!

8
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: VBA: Zeile in anderem Blatt finden und löschen
19.11.2019 00:14:20
Rob
Hallo Lukas,
so z.B.:

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim wsInput As Worksheet
Set wsInput = Sheets("Input")
If Not Intersect(Target, Columns(5)) Is Nothing Then
wsInput.Cells.Rows(Target.Cells.Row).Delete
End If
End Sub

AW: VBA: Zeile in anderem Blatt finden und löschen
19.11.2019 00:16:13
Rob
Hallo Lukas,
folgenden Code direkt in Tabelle2(Output) einfügen:

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim wsInput As Worksheet
Set wsInput = Sheets("Input")
If Not Intersect(Target, Columns(5)) Is Nothing Then
wsInput.Cells.Rows(Target.Cells.Row).Delete
End If
End Sub

Anzeige
AW: VBA: Zeile in anderem Blatt finden und löschen
19.11.2019 00:19:19
Rob
Du musst allerdings beide Tabellen vorher nach ID absteigend sortieren. Ich gehe mal jetzt davon aus, dass beiden Tabellen identisch sind. Andernfalls müsste man das Makro noch anpassen.
AW: VBA: Zeile in anderem Blatt finden und löschen
19.11.2019 10:11:51
Daniel
Naja spätesten nach der ersten Ausführung des Makros sind die Listen nicht mehr gleich und ab der zweiten musst schon explizit suchen.
Gruß Daniel
AW: VBA: Zeile in anderem Blatt finden und löschen
19.11.2019 10:58:20
Lukas
Rob, vielen Dank für deine schnelle Antwort und den Vorschlag! Daniel hat allerdings recht: Die Listen sind nicht exakt identisch.
Grundsätzlich gilt: Einträge, die im Input gelöscht werden, werden nicht in den Output übernommen (fliegen also bei der nächsten Aktualisierung raus - dafür hab ich bereits einen Makro). Allerdings arbeite ich ausschließlich im Output, weshalb ich von dort aus gerne Sachen im Input löschen möchte. Wenn ich etwas nur im Output lösche, taucht es bei der nächsten Aktualisierung wieder auf, weil es nach wie vor im Input vorhanden ist.
Ich habe also drei Möglichkeiten:
1. Manuell: ID im Input suchen und Zeile dort löschen (das will ich vermeiden)
2. VBA: ID im Input suchen und Zeile dort löschen
3. VBA: ID im Input suchen und Zeile dort löschen, zusätzlich Zeile im Output löschen (alternativ den VBA aus Lösung Nr. 2 einfach zweimal laufen lassen)
Zudem ist die Spaltenaufteilung nicht die gleiche. Im Input sind deutlich mehr Spalten vorhanden, welche ich nicht alle in den Output übernehme.
Anzeige
AW: VBA: Zeile in anderem Blatt finden und löschen
19.11.2019 11:26:33
Daniel
Wenn die Listen nicht allzulang sind, könntest du mit ZählenWenns in einer Hilfsspalte prüfen, ob der Eintrag aus Tabelle 1 auch in Tabelle 2 vorhanden ist.
Gruß Daniel
AW: VBA: Zeile in anderem Blatt finden und löschen
19.11.2019 11:43:17
Rob
Hallo Lukas,
ja richtig, war nicht ganz zu Ende gedacht...ich passe das nochmal an.
Grüße, Rob
AW: VBA: Zeile in anderem Blatt finden und löschen
19.11.2019 14:42:42
Rob
Doch bischen mehr Code wie ich dachte aber damit sollte es funktionieren:

Option Explicit
Dim lastColumn As Integer, lastRow As Integer
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim wsInput As Worksheet, wsOutput As Worksheet
Dim findText As Range
Set wsInput = Sheets("Input")
Set wsOutput = Sheets("Output")
If Not Intersect(Target, Columns(5)) Is Nothing Then
'Funktion aufrufen um ID zu erstellen -> Verkettung der Spalten
Call ConcatenateRows(wsInput)
Call ConcatenateRows(wsOutput)
'ID in Arbeitsblatt 'Input' suchen und Zeile löschen
lastColumn = wsInput.Cells(1, Columns.Count).End(xlToLeft).Column
Set findText = wsInput.Columns(lastColumn).Find(Target.Offset(0, 1))
wsInput.Rows(findText.Row).Delete
'Ausgewählte Zeile in Arbeitsblatt 'Output' löschen
Rows(Target.Row).Delete
End If
'Abschließend die IDs wieder löschen
wsInput.Columns(lastColumn).Clear
lastColumn = wsOutput.Cells(1, Columns.Count).End(xlToLeft).Column
wsOutput.Columns(lastColumn).Clear
End Sub
Private Sub ConcatenateRows(ws As Worksheet)
Dim r As Range, concatRange As Range
With ws
lastColumn = .Cells(1, .Columns.Count).End(xlToLeft).Column + 1
lastRow = .Cells(.Rows.Count, 5).End(xlUp).Row
Set concatRange = .Range(.Cells(1, lastColumn), .Cells(lastRow, lastColumn))
End With
For Each r In concatRange
r = Application.WorksheetFunction.Concat(r, r.Offset(0, -5), r.Offset(0, -4), r.Offset( _
0, -3))
Next r
End Sub

Anzeige

359 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige