Herbers Excel-Forum - das Archiv

Datensatz löschen

Informationen und Beispiele zu den hier genannten Dialog-Elementen:
Bild

Betrifft: Datensatz löschen
von: Andreas

Geschrieben am: 19.04.2005 09:34:49
Hallo Leute,
ich benutze folgenden Code, um einen Datensatz im Arbeitsblatt "SerienNr" in Spalte B auszusuchen (mit einer Inputbox), und zu löschen, wenn in Spalte C "dBa" steht.
Die Seriennummer kann 2-fach vorkommen, aber nur der Datensatz mit dBa soll gelöscht werden.
Das ganze funktioniert soweit recht gut, wenn der Datensatz mit dBa vor dem Datensatz ohne dBa steht.
Ist es umgekehrt, wird der Datensatz nicht gelöscht.
Gibt es dafür auch eine Lösung?
Sub Andreas()
Dim Mldg, Titel, Wert, Zelle
Mldg = "Serien-Nr eingeben"
Titel = "Datesatz löschen"
Wert = InputBox(Mldg, Titel)
With Worksheets("SerienNr").Columns(2)
Set Zelle = .Find(Wert, LookIn:=xlValues, LookAt:=xlWhole)
If Not Zelle Is Nothing And Zelle(1, 2) = "dBa" Then
Rows(Zelle(1, 2).Row).Delete Shift:=xlUp
End If
End With
End Sub

Im Voraus schon mal herzlichen Dank.
Gruß Andreas
Bild

Betrifft: AW: Datensatz löschen
von: Ramses

Geschrieben am: 19.04.2005 10:04:40
Hallo
probier mal
Sub Andreas()
Dim Mldg, Titel, Wert, Zelle
Mldg = "Serien-Nr eingeben"
Titel = "Datesatz löschen"
Wert = InputBox(Mldg, Titel)
With Worksheets("SerienNr").Columns(2)
Set Zelle = .Find(Wert, LookIn:=xlValues, LookAt:=xlWhole)
If Not Zelle Is Nothing And Zelle.Offset(1, 2) = "dBa" Then
Rows(Zelle(1, 2).Row).Delete Shift:=xlUp
End If
End With
End Sub

Wobei ich nicht weiss ob das "Offset(1, 2)" nun korrekt ist. Ich habe es einfach mal deinem code so entnommen.
Es wird geprüft ob die zelle darunter !!! und 2 Spalten Rechts von der gefundenen Zelle der Begriff vorkommt. Steht dîese Zelle in der gleichen Zelle, ändere die 1 in 0
Gruss Rainer
Bild

Betrifft: AW: Datensatz löschen
von: Andreas

Geschrieben am: 19.04.2005 10:33:51
Hallo Rainer,
funktioniert leider nicht.
Der zu löschende Datensatz ist oft etliche Zeilen von dem anderen Datensatz entfernt.
Wenn ich das recht verstanden habe, funktioniert der Code dann sowiso nicht.
Gibt es noch eine andere Lösung?
Ich möchte eigentlich nur die Zeile Löschen, in der die gesuchte Seriennummer in Spalte B, und dBa in Spalte C steht.
Gruß Andreas
Bild

Betrifft: AW: Datensatz löschen
von: Ramses
Geschrieben am: 19.04.2005 11:07:21
Hallo
dann ändere die Zeile
Rows(Zelle(1, 2).Row).Delete Shift:=xlUp
in
Rows(Zelle.Row).Delete Shift:=xlUp
Gruss Rainer
Bild

Betrifft: AW: Datensatz löschen
von: Andreas

Geschrieben am: 19.04.2005 11:50:13
Hallo Rainer,
geht immer noch nicht.
Jetzt löscht es mir den Datensatz, in dem nicht dBa steht, wenn dieser im Arbeitsblatt vor dem Datensatz mit dBa kommt.
Gibt es mit VBA eine Möglichkeit, eine Zeile zu suchen, in der in Spalte B eine bestimmte Nummer und in Spalte C dBa steht, und diese Zeile dann zu löschen?
Gruß Andreas
Bild

Betrifft: AW: Datensatz löschen
von: Andreas

Geschrieben am: 19.04.2005 14:04:18
Hallo Rainer,
geht immer noch nicht.
Jetzt löscht es mir den Datensatz, in dem nicht dBa steht, wenn dieser im Arbeitsblatt vor dem Datensatz mit dBa kommt.
Gibt es mit VBA eine Möglichkeit, eine Zeile zu suchen, in der in Spalte B eine bestimmte Nummer und in Spalte C dBa steht, und diese Zeile dann zu löschen?
Gruß Andreas
Bild

Betrifft: AW: Datensatz löschen
von: WernerB.

Geschrieben am: 19.04.2005 15:13:41
Hallo Andreas,
wie gefällt Dir das?
Sub Andreas()
Dim Zelle As Range, _
Mldg As String, Titel As String, Wert As String, fiAd As String, _
laR As Long, _
Pruef As Boolean
Mldg = vbCr & vbCr & vbCr & "Serien-Nr. eingeben:"
Titel = "Datensatz löschen"
Wert = InputBox(Mldg, Titel)
If Wert = "" Then
MsgBox "Keine Eingabe !" & vbCr & vbCr & "Makro-Abbruch !", 16, _
"Dezenter Hinweis für " & Application.UserName & ":"
Exit Sub
End If
laR = Worksheets("SerienNr").Cells(Rows.Count, 2).End(xlUp).Row
With Worksheets("SerienNr").Range("B1:B" & laR)
Set Zelle = .Find(What:=Wert, After:=Worksheets("SerienNr").Range("B" & laR), LookAt:=xlWhole)
If Not Zelle Is Nothing Then
If Zelle.Offset(0, 1).Text = "dBa" Then
Rows(Zelle.Row).Delete
Else
fiAd = Zelle.Address
Do
Set Zelle = .FindNext(Zelle)
If Not Zelle Is Nothing Then
If Zelle.Address <> fiAd Then
If Zelle.Offset(0, 1).Text = "dBa" Then
Rows(Zelle.Row).Delete
MsgBox "Datensatz '" & Wert & "' mit 'dBa' wurde gelöscht !", 64, _
"Dezenter Hinweis für " & Application.UserName & ":"
Pruef = True
Exit Do
End If
End If
End If
Loop While Not Zelle Is Nothing And Zelle.Address <> fiAd
End If
If Pruef = False Then
MsgBox "Datensatz '" & Wert & "' mit 'dBa' nicht gefunden !", 64, _
"Dezenter Hinweis für " & Application.UserName & ":"
End If
Else
MsgBox "Datensatz '" & Wert & "' nicht gefunden !", 64, _
"Dezenter Hinweis für " & Application.UserName & ":"
End If
End With
End Sub

Viel Erfolg wünscht
WernerB.
P.S.: Dieses Forum lebt auch von den Rückmeldungen der Fragesteller an die Antworter !
Bild

Betrifft: AW: Datensatz löschen
von: Andreas

Geschrieben am: 19.04.2005 15:37:12
Hallo Werner,
ist genau das, was ich gesucht habe, funktioniert absolut einwandfrei.
Leider verstehe ich den Code überhaupt nicht.
Könntest du eventuell noch ein paar komentare einfügen, die den Code für mich etwas verständlicher machen?
Wenn du keine Zeit dafür hast, ist auch nicht so schlimm, funktioniert ja einwandfrei.
Das Forum ist absolut Spitze, allen die mir geholfen haben
Vielen Dank
Gruß aus dem Allgäu Andreas.
Bild

Betrifft: AW: Datensatz löschen
von: WernerB.

Geschrieben am: 20.04.2005 08:57:26
Hallo Andreas,
damit die Meldungen auch stimmen, habe ich das Makro entsprechend modifiziert:
Sub Andreas()
Dim Zelle As Range, _
Mldg As String, Titel As String, Wert As String, fiAd As String, _
Tx0 As String, Tx1 As String, Tx2 As String, Tx As String, _
laR As Long, _
Hinw As Byte
Mldg = vbCr & vbCr & vbCr & "Serien-Nr. eingeben:"
Titel = "Datensatz löschen"
Wert = InputBox(Mldg, Titel)
If Wert = "" Then
MsgBox "Keine Eingabe !" & vbCr & vbCr & "Makro-Abbruch !", 16, _
"Dezenter Hinweis für " & Application.UserName & ":"
Exit Sub
End If
laR = Worksheets("SerienNr").Cells(Rows.Count, 2).End(xlUp).Row
With Worksheets("SerienNr").Range("B1:B" & laR)
Set Zelle = .Find(What:=Wert, After:=Worksheets("SerienNr").Range("B" & laR), LookAt:=xlWhole)
If Not Zelle Is Nothing Then
'Serien-Nr. wurde gefunden
If Zelle.Offset(0, 1).Text = "dBa" Then
'In der Nachbarzelle (Spalte C) steht "dBa"
Hinw = 1
Rows(Zelle.Row).Delete
Else
'In der Nachbarzelle (Spalte C) steht nicht "dBa"
Hinw = 2
fiAd = Zelle.Address
Do
'wiederholte Suche wird gestartet (Abbruchbedingungen stehen bei "Loop")
Set Zelle = .FindNext(Zelle)
If Not Zelle Is Nothing Then
'Serien-Nr. wurde gefunden
If Zelle.Address <> fiAd Then
If Zelle.Offset(0, 1).Text = "dBa" Then
'In der Nachbarzelle (Spalte C) steht "dBa"
Hinw = 1
Rows(Zelle.Row).Delete
Exit Do
End If
End If
End If
Loop While Not Zelle Is Nothing And Zelle.Address <> fiAd
End If
End If
End With
Tx0 = "Datensatz '" & Wert & "' wurde nicht gefunden !"
Tx1 = "Datensatz '" & Wert & "' mit 'dBa' wurde gelöscht !"
Tx2 = "Datensatz '" & Wert & "' mit 'dBa' wurde nicht gefunden !"
Select Case Hinw
Case 0
Tx = Tx0
Case 1
Tx = Tx1
Case 2
Tx = Tx2
End Select
MsgBox Tx, 64, "Dezenter Hinweis für " & Application.UserName & ":"
End Sub

Funktionsweise:
1. Das Makro findet in Spalte B eine Zelle mit der Serien-Nr.:
---1a) in der Nachbarzelle (Spalte C) steht "dBa":
------Reaktion: Zeile wird gelöscht, entsprechende Meldung.
---1b) ) in der Nachbarzelle (Spalte C) steht nicht "dBa":
------Reaktion: wiederholte Suche wird gestartet (bis Treffer bzw. bis Spaltenende).
---------bei Treffer: Zeile wird gelöscht, wiederholte Suche wird beendet, entsprechende Meldung.
---------ohne Treffer bis Spaltenende: entsprechende Meldung.
2. Das Makro findet in Spalte B keine Zelle mit der Serien-Nr.:
---Reaktion: entsprechende Meldung.

Gruß
WernerB.
Bild

Betrifft: AW: Datensatz löschen
von: Andreas

Geschrieben am: 20.04.2005 12:03:54
Hallo Werner,
vielen Dank für den neuen Code und die Erklärungen.
Jetzt komme ich langsam dahinter wie´s funktioniert.
Nochmals vielen Dank für deine Mühe.
Viele grüße aus dem Allgäu
Andreas
 Bild
Excel-Beispiele zum Thema "Datensatz löschen"
Doppelte Datensätze löschen Alle Datensätze >= Eingabewert filtern
Datensatz nach Eingabe eines Kurzbegriffes Datensätze nach zwei Kriterien in neues Blatt übernehmen
Datensätze in zweitem Blatt anders anordnen Datensätze in UserForm auswählen und im Blatt löschen
Doppelte Datensätze und Leerzeilen löschen Alle mehrfach vorkommenden Datensätze in zweiter Tabelle listen
Doppelte Datensätze farblich markieren und auflisten