Discussion:
Zeilen löschen, wenn SVERWEIS falsch
(zu alt für eine Antwort)
Jürgen Denk
2004-07-21 14:36:51 UTC
Permalink
Hallo zusammen,

ich habe eine Tabelle in der Daten mit der Funktion SVERWEIS ausgewertet
wurden. Nun habe ich die Datensätze so sortiert, dass alle
SVERWEISE, die den Wert FALSCH haben, ganz unten in der Tabelle stehen.

Genau diese Datensätze sollen nun automatisch gelöscht werden, so dass nur
noch diejenigen Datensätze übrigbleiben, die für SVERWEIS den Wert WAHR
haben.

Wie kann ich hier die nicht mehr benötigten Zeilen automatisch löschen
lassen, nach dem völlig unorthodoxen Prinzip:

Schaue die gesamte Spalte K vom ersten bis zum letzten vorhandenen Datensatz
durch und prüfe folgendes:

If VLOOKUP = FALSE THEN
lösche diese Zeilen
ELSE
lasse diese Zeilen bestehen
END IF

Wie würde der hier benötigte VB-Code korrekt lauten?

cu

J. D.
Melanie Breden
2004-07-21 15:34:46 UTC
Permalink
Hallo Jürgen,
Post by Jürgen Denk
ich habe eine Tabelle in der Daten mit der Funktion SVERWEIS ausgewertet
wurden. Nun habe ich die Datensätze so sortiert, dass alle
SVERWEISE, die den Wert FALSCH haben, ganz unten in der Tabelle stehen.
Genau diese Datensätze sollen nun automatisch gelöscht werden, so dass nur
noch diejenigen Datensätze übrigbleiben, die für SVERWEIS den Wert WAHR
haben.
Wie kann ich hier die nicht mehr benötigten Zeilen automatisch löschen
Schaue die gesamte Spalte K vom ersten bis zum letzten vorhandenen Datensatz
If VLOOKUP = FALSE THEN
lösche diese Zeilen
ELSE
lasse diese Zeilen bestehen
END IF
Wie würde der hier benötigte VB-Code korrekt lauten?
manuell würde ich den Autofilter benutzen und nach "FALSCH" filtern.
Anschließend dann die sichtbaren Zeilen löschen.
Mit VBA sieht das so aus:

Sub ZeilenLöschen()
Dim rngBoolean As Range

Application.ScreenUpdating = False
With ActiveSheet.Columns("K")
On Error Resume Next
Set rngBoolean = .SpecialCells(xlCellTypeFormulas, xlLogical)
.AutoFilter Field:=1, Criteria1:="FALSE"
rngBoolean.SpecialCells(xlCellTypeVisible).EntireRow.Delete
.AutoFilter
End With
Application.ScreenUpdating = True
End Sub

--
Mit freundlichen Grüssen

Melanie Breden
- Microsoft MVP für Excel -

http://excel.codebooks.de (Das Excel-VBA Codebook)
#Excel-Auftragsprogrammierung#
Jürgen Denk
2004-07-22 07:14:09 UTC
Permalink
Hallo Melanie,

erstmal herzlichen Dank für den Tip.

Leider führt dies dazu, dass nach der Filterung gar keine Datensätze mehr zu
sehen sind.

Inzwischen habe ich es mal mit dem Makro-Recorder versucht und erhalte
folgenden Code (es handelt sich übrigens um die Spalte L und nicht um K,
hoffe aber, dass das keine allzu große Rolle spielen möge):

Sub FilterSetzen()
ActiveCell.Offset(0, 11).Range("A1").Select
Selection.AutoFilter
Selection.AutoFilter Field:=12, Criteria1:="#NV"
End Sub

Wenn man dies anschließend als Makro laufen lässt, ist das Ergebnis genauso,
wie bei Deiner Lösung: es werden gar keine Datensätze mehr angezeigt,
folglich
kann man auch keine löschen.

Was mache ich noch falsch bzw. welche Grundeinstellungen für EXCEL 2002 SP3
müsste ich noch anpassen?

cu

J. D.
Melanie Breden
2004-07-22 07:38:22 UTC
Permalink
Hallo Jürgen,
Post by Jürgen Denk
Inzwischen habe ich es mal mit dem Makro-Recorder versucht und erhalte
folgenden Code (es handelt sich übrigens um die Spalte L und nicht um K,
Sub FilterSetzen()
ActiveCell.Offset(0, 11).Range("A1").Select
Selection.AutoFilter
Selection.AutoFilter Field:=12, Criteria1:="#NV"
End Sub
Wenn man dies anschließend als Makro laufen lässt, ist das Ergebnis genauso,
wie bei Deiner Lösung: es werden gar keine Datensätze mehr angezeigt,
folglich kann man auch keine löschen.
ich ging davon aus, dass du alle Zeilen die als Ergebnis FALSCH haben löschen willst.
Wenn du alle #NV-Werte filtern und löschen willst, verwende folgenden Code:

Sub NV_ZeilenLöschen()
Dim rngArea As Range

Application.ScreenUpdating = False
With ActiveSheet.Columns("L")
On Error Resume Next
Set rngArea = .CurrentRegion.Offset(1, 0).Resize( _
.CurrentRegion.Rows.Count - 1, 1)
.AutoFilter Field:=1, Criteria1:="#N/A"
rngArea.SpecialCells(xlCellTypeVisible).EntireRow.Delete
.AutoFilter
End With
Application.ScreenUpdating = True
End Sub


--
Mit freundlichen Grüssen

Melanie Breden
- Microsoft MVP für Excel -

http://excel.codebooks.de (Das Excel-VBA Codebook)
#Excel-Auftragsprogrammierung#
Jürgen Denk
2004-07-22 15:46:41 UTC
Permalink
Hallo Melanie,

herzlichen Dank, nun funzt es einwandfrei.

Hättest Du evtl. noch die Güte, meine Anfrage vom 21.07.2004 17:38 bezgl.
"Seitenumbruch nur bis vorletztes Ereignis"
anzuschauen? Mit der dort angebotenen Lösung komme ich nicht ganz klar.

Wäre total nett.

cu

J. D.
Melanie Breden
2004-07-22 20:27:42 UTC
Permalink
Hallo Jürgen Denk,
Post by Jürgen Denk
herzlichen Dank, nun funzt es einwandfrei.
Bittesehr, ist gern geschehen :-)
Post by Jürgen Denk
Hättest Du evtl. noch die Güte, meine Anfrage vom 21.07.2004 17:38 bezgl.
"Seitenumbruch nur bis vorletztes Ereignis"
anzuschauen? Mit der dort angebotenen Lösung komme ich nicht ganz klar.
Wäre total nett.
guckst du :-)

--
Mit freundlichen Grüssen

Melanie Breden
- Microsoft MVP für Excel -

http://excel.codebooks.de (Das Excel-VBA Codebook)
#Excel-Auftragsprogrammierung#
Jürgen Denk
2004-07-23 11:29:07 UTC
Permalink
Post by Melanie Breden
guckst du :-)
Na und wie ich da staune;-)))

cu

J. D.

Loading...