AW: wenn inhalt in andere Tab. vorhanden, dann zei
30.05.2007 21:43:45
fcs
Hallo Abdullah,
hier sind zwei Makros, die die Löschaktion durchführen.
Das 1. Makro gleicht in einem Durchlauf die eingegeben Werte im 2. Blatt mit der Auswahlliste im 1. Blatt ab und löscht alle Zeilen, deren Werte im 2. Blatt vorkommen.
Das 2. Makro löscht "online" die Zeile im Blatt 1 wenn im Blatt 2 ein Wert eingegebn wird. In bin mir nur nicht sicher, ob es in Verbindung mit der Gültigkeitsauswahl per Drop-Down funktioniert. Zumindest unter Excel97 funktioniert es nicht wie gewünscht. Das 2. Makro muss du im VBA-Editor einfügen unter der Tabelle2 in der die Daten eingegeben werden.
Die Zellbereiche im Blatt 2, in dem die Werte eingegebn werden muss du natürlich entspechend anpassen.
Gruß
Franz
Sub WerteAus2in1löschen()
'Löscht Zeile in Tabelle1, wenn Wert in Spalte A im Bereich in Tabelle2 vorhanden
Dim wks1 As Worksheet, wks2 As Worksheet
Dim rngZelle1 As Range, rngZelle2 As Range, rngBereich2 As Range
Set wks1 = Worksheets("Tabelle1") 'Tabelle mit Liste in Spalte A
Set wks2 = Worksheets("Tabelle2") 'Tabelle mit den Eingabewerten
'Eingabebereich in Tabelle2 vorgeben (hier z,B. Spalten 2 bis 3 ab Zeile 2)
With wks2
Set rngBereich2 = .Range(.Cells(2, 2), .Cells(.UsedRange.Row + _
.UsedRange.Rows.Count - 1, 3))
End With
With wks1
For Each rngZelle2 In rngBereich2
If Not IsEmpty(rngZelle2) Then
Set rngZelle1 = .Range(.Cells(2, 1), .Cells(.Rows.Count, 1).End(xlUp)) _
.Find(what:=rngZelle2.Value, LookIn:=xlValues, LookAt:=xlWhole)
If rngZelle1 Is Nothing Then
'do nothing
Else
rngZelle1.EntireRow.Delete shift:=xlShiftUp
End If
End If
Next
End With
End Sub
Private Sub Worksheet_Change(ByVal Target As Excel.Range)
'Löscht Zeile in Tabelle1, wenn Wert in Spalte A gleich eingegebenem Wert _
im Bereich in Tabelle2
Dim wks1 As Worksheet, wks2 As Worksheet
Dim rngZelle1 As Range, rngZelle2 As Range, rngBereich2 As Range
If Target.Cells.Count = 1 Then
Set wks1 = Worksheets("Tabelle1") 'Tabelle mit Liste in Spalte A
Set wks2 = Worksheets("Tabelle2") 'Tabelle mit den Eingabewerten
'Eingabebereich in Tabelle2 vorgeben (hier z,B. Spalten 2 bis 3 ab Zeile 2)
With wks2
Set rngBereich2 = .Range(.Cells(2, 2), .Cells(.UsedRange.Row + _
.UsedRange.Rows.Count - 1, 3))
End With
If Not Intersect(Target, rngBereich2) Is Nothing Then
With wks1
If Not IsEmpty(Target) Then
Set rngZelle1 = .Range(.Cells(2, 1), .Cells(.Rows.Count, 1).End(xlUp)) _
.Find(what:=Target.Value, LookIn:=xlValues, LookAt:=xlWhole)
If rngZelle1 Is Nothing Then
'do nothing
Else
rngZelle1.EntireRow.Delete shift:=xlShiftUp
End If
End If
End With
End If
End If
End Sub