Discussion:
Zeile löschen wenn bestimmte Zelle gleich null
(zu alt für eine Antwort)
Bernd Bichler
2007-01-03 09:25:06 UTC
Permalink
Hallo NG,
ich würde gern folgende Aktion über ein Makro/Button ausführen:
ich habe eine ewig lange Positionsliste, bei der nur einige Positionen mit
einer menge/Anzahl versehen sind. Diese stehen in der Spalte D. Ich würde
nun gerne alle Zeilen, in der keine Menge/Anzahl löschen. (z.B. Wenn D14=0
dann Zeile löschen).
Vom Prinzip her wahrscheinlich nicht schwierig, aber leider kenn ich mich
mit VBA nicht sehr gut aus.
Es wäre prima wenn Ihr mir damit weiterhelfen könntet, weil das manuelle
Löschen macht einen ganz schön rammdösig.

Schönen Gruß
bernd
Thomas Ramel
2007-01-03 09:52:46 UTC
Permalink
Grüezi Bernd

Bernd Bichler schrieb am 03.01.2007
Post by Bernd Bichler
ich habe eine ewig lange Positionsliste, bei der nur einige Positionen mit
einer menge/Anzahl versehen sind. Diese stehen in der Spalte D. Ich würde
nun gerne alle Zeilen, in der keine Menge/Anzahl löschen. (z.B. Wenn D14=0
dann Zeile löschen).
Du kannst dazu die folgende allgemeine Sub verwenden und sie wie unten
aufgeführt aus dem Code des Buttons heraus aufrufen.

Teste das Ganze zuerst an einer Kopie deiner Daten.

Public Sub DelRows(rngSpalte As Range, varValue As Variant)
'© Thomas Ramel / 24.01.2005
'Funktion zum Löschen ganzer Zeilen eines Tabellenblattes unter
'Berücksichtigung von Kriterien
'Bedingung: nicht mehr als 8125 unzusammenhängende Bereiche als Ergebnis
'Die Funktion kann nur von VBA aufgerufen werden *nicht* in einer Zelle
'Folgender Aufruf löscht alle Zeilen wenn in Spalte A '10' enthalten ist:
'DelRows Range("A:A"), 10

Application.ScreenUpdating = False
Application.Calculation = xlManual
If Application.WorksheetFunction.CountIf(rngSpalte, varValue) > 0 Then
If varValue = "" Then
rngSpalte.SpecialCells(xlCellTypeBlanks).EntireRow.Delete
Else
With rngSpalte
.Replace "", "##@@##", xlWhole
.Replace varValue, "", xlWhole
.SpecialCells(xlCellTypeBlanks).EntireRow.Delete
.Replace "##@@##", "", xlWhole
End With
End If
End If
Application.Calculation = xlAutomatic
Application.ScreenUpdating = True
End Sub


Sub DelRowsTest()
DelRows Range("D:D"), 0
End Sub



Mit freundlichen Grüssen
Thomas Ramel (@Laptop)
--
- MVP für Microsoft-Excel -
[Win XP Pro SP-2 / xl2000 SP-3]
Bernd Bichler
2007-01-03 10:43:39 UTC
Permalink
Vielen dank für Eure Hilfe. Das Modul von Thomas funktioniert prima,
allerdings nicht, wenn die null in der Zelle auf einem Zellbezug basiert.
Ich konnte allerdings ein makro aufzeichnen mit: Kopieren Spalte D ->
Inhalte einfügen, nur Werte, dies dem Modul von Thomas vorschalten, so dass
es jetzt auch so funktioniert.

@ Wolfgnag: Vielen dank für Deine Hilfe!!!

Schönen Gruß
Bernd
Bernd Bichler
2007-01-03 11:11:05 UTC
Permalink
Hallo Wolfgnag,
vielen dank, dein makro funktioniert auch super, auch mit Zellverknüpfungen.
Schönen Gruß
Bernd
Hallo Bernd,
Sub ZeileMit_0_Löschen()
For i = 100 To 2 Step -1
If Cells(i, 4) = 0 Then
Rows(i).Delete
End If
Next
End Sub
Damit ich auch Zeilen die hintereinander mit 0 in Spalte D gefüllt sind
erwische, habe ich die FOR-Schleife rückwärts laufen lassen ... von 100
bis 2.
Bitte Deine Zeilen-Nr. richtig eintragen!
--
Gruß Wolfgang
WinXP Home SP2, Office 2003 SP2
http://www.wk-bau-edv.de
Hallo Bernd,
leider hatte ich das Makro vorher nicht getestet.
Es muss heißen Rows(i) statt Row(i).
Außerdem erwischt das Makro diejenigen Zeilen nicht, die unmittelbar
hinter
einer gelöschten Zeile stehen.
Ich melde mich nochmal, wenn das Makro richtig läuft.
--
Gruß Wolfgang
WinXP Home SP2, Office 2003 SP2
http://www.wk-bau-edv.de
Hallo Bernd,
Sub ZeileMit_0_Löschen()
For i = 2 To 100
'hier die Zeilen-Nr. = i von To bis eintragen
If Cells(i, 4) = 0 Or Cells(i, 4) = "" Then
Row(i).Delete
End If
Next
End Sub
Es werden auch alle Zeilen gelöscht, die in Spalte D leer sind.
Die Zeilen-Nr. in FOR i = .... TO .... bitte nach DeinenErfordernissen
eintragen.
--
Gruß Wolfgang
WinXP Home SP2, Office 2003 SP2
http://www.wk-bau-edv.de
Post by Bernd Bichler
Hallo NG,
ich habe eine ewig lange Positionsliste, bei der nur einige Positionen mit
einer menge/Anzahl versehen sind. Diese stehen in der Spalte D. Ich würde
nun gerne alle Zeilen, in der keine Menge/Anzahl löschen. (z.B. Wenn D14=0
dann Zeile löschen).
Vom Prinzip her wahrscheinlich nicht schwierig, aber leider kenn ich mich
mit VBA nicht sehr gut aus.
Es wäre prima wenn Ihr mir damit weiterhelfen könntet, weil das manuelle
Löschen macht einen ganz schön rammdösig.
Schönen Gruß
bernd
Eberhard Funke
2007-01-03 11:21:17 UTC
Permalink
Post by Bernd Bichler
Hallo NG,
ich habe eine ewig lange Positionsliste, bei der nur einige Positionen mit
einer menge/Anzahl versehen sind. Diese stehen in der Spalte D. Ich würde
nun gerne alle Zeilen, in der keine Menge/Anzahl löschen. (z.B. Wenn D14=0
dann Zeile löschen).
Vom Prinzip her wahrscheinlich nicht schwierig, aber leider kenn ich mich
mit VBA nicht sehr gut aus.
Es wäre prima wenn Ihr mir damit weiterhelfen könntet, weil das manuelle
Löschen macht einen ganz schön rammdösig.
Schönen Gruß
bernd
Hallo Bernd,

das Makro kannst Du Dir leicht selbst erstellen:

Aktiviere den Makrorecorder.
Markiere Spalte D, dann Taste F5 --> Inhalte --> Leerzellen markieren.
Menü Bearbeiten --> Zelle löschen --> ganze Zeile wählen.

Das sollte dann so aussehen:

Sub Makro1()
Columns("D:D").Select
Selection.SpecialCells(xlCellTypeBlanks).Select
Selection.EntireRow.Delete
End Sub

Aus Deinem Folgepost habe ich entnommen, dass die "leeren" Zellen in Spalte
D auch Formeln enthalten können, die den Wert "" (0der auch 0?) ergeben
können.

Alle Nullen oder Formeln, die Null bzw. "" ergeben, werden durch folgendes
Makro gelöscht (musst Du vor "Makro1" laufen lassen!)

Sub Nullwerte_ersetzen()
Dim rngBer As Range, rngZelle As Range
Dim lngLetzte As Long

lngLetzte = ActiveSheet.Range("D65536").End(xlUp).Row
Set rngBer = ActiveSheet.Range("D1:D" & lngLetzte)

For Each rngZelle In rngBer
If rngZelle.Value = 0 Then
rngZelle.ClearContents
End If
Next
End Sub
--
Mit freundlichen Grüssen Eberhard
XP home XL 2000
Eberhard(punkt)W(punkt)Funke(at)t-online.de
Loading...