Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1112to1116
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Zeile löschen

Zeile löschen
Yvonne
Hallo,
ich möchte die komplette zeile löschen, wenn in spalte A ein datum steht und die spalten D , F, G und J leer sind.
wie bekomm ich das am einfachsten hin?

11
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Benutzer
Anzeige
Zeilen bedingt löschen
29.10.2009 10:03:52
Erich
Hi Yvonne,
probier mal

Option Explicit
Sub BedLoesch()
Dim arrW, zz As Long, rngDel As Range
arrW = Cells(1, 1).Resize(Cells(Rows.Count, 1).End(xlUp).Row, 10)
For zz = 1 To UBound(arrW)
If IsDate(arrW(zz, 1)) Then
If arrW(zz, 4) & arrW(zz, 6) & arrW(zz, 7) & arrW(zz, 10) = "" Then
If rngDel Is Nothing Then
Set rngDel = Cells(zz, 1)
Else
Set rngDel = Union(rngDel, Cells(zz, 1))
End If
End If
End If
Next zz
If Not rngDel Is Nothing Then rngDel.EntireRow.Delete
End Sub
Rückmeldung wäre nett! - Grüße von Erich aus Kamp-Lintfort
AW: Zeilen bedingt löschen
29.10.2009 15:40:29
Yvonne
funtkioniert super.
kannst du mir noch eine kurze Beschreibung zu den einzelnen Schritten geben. Ich möchte es halt auch noch verstehen.
Anzeige
AW: Zeilen bedingt löschen
29.10.2009 17:17:55
Erich
Hi Yvonne,
hier mit ein paar Kommentaren:

Sub BedLoesch()
Dim zz As Long, rngDel As Range, arrW As Variant
' arrW dient zur Aufnahme der Werte im Bereich A1:Znnn,
'  wobei nnn die letzte in SPalte A belegte Zeile ist
' Abgeprüft werden die Werte des Arrays arrW.
' Das geht schneller, als die Zellen in der Tabelle zu prüfen.
arrW = Cells(1, 1).Resize(Cells(Rows.Count, 1).End(xlUp).Row, 10)
' zz ist der Zeilenzähler,
'  von Zeile 1 bis zur letzten Zeile in Sp. A (obere Grenze von arrW)
For zz = 1 To UBound(arrW)
If IsDate(arrW(zz, 1)) Then   ' Wert aus Spalte A soll Datum sein
' Werte aus Sp. D,F,G,J zusammen leer?
If arrW(zz, 4) & arrW(zz, 6) & arrW(zz, 7) & arrW(zz, 10) = "" Then
' rngDel nimmt je 1 Zelle (aus Spalte A) der zu löschenden Zeile auf
If rngDel Is Nothing Then
Set rngDel = Cells(zz, 1)  ' erste zu löschende Zelle
Else
Set rngDel = Union(rngDel, Cells(zz, 1)) ' weitere zu löschende Zelle
End If
End If
End If
Next zz
' wenn rngDel nicht "Nichts" ist, lösche den Bereich,
'   mit jeweils der gesamten Zeile
If Not rngDel Is Nothing Then rngDel.EntireRow.Delete
End Sub
Wenn du Fragen hast, kein Problem - dazu sind wir hier.
Rückmeldung wäre nett! - Grüße von Erich aus Kamp-Lintfort
Anzeige
AW: Zeilen bedingt löschen
29.10.2009 19:01:43
Yvonne
Deine Version funktioniert super, aber ich brauch es irgendwie einfacher vom erklären her. Ist egal wenn es dadurch länger dauert. Muss es halt bei meiner Präsentation erklären können. Egal wenn es dann ein bißchen dauert.
Habe hier eine Variante funktioniert aber leider nicht.
Das versteh ich aber alles. Hoffe das nur eine kleine Korrektur nötig ist.
Dim Zeile As Long
For Zeile = Range("A" & Rows.Count).End(xlUp).Row To 1 Step -1
If IsDate(Zeile, 4) Then
If Cells(Zeile, 4) & Cells(Zeile, 6) & Cells(Zeile, 8) & Cells(Zeile, 10) = "" Then
Cells(Zeile, 4).EntireRow.Delete
End If
End If
Next Zeile
Wäre echt super wenn du mir helfen würdest. Wenn meine Präsentation um ist, werde ich deine Version durch meine ersetzen.
Anzeige
Kleine Korrektur
29.10.2009 19:31:29
Erich
Hi Yvonne,
nur 1 kleine Korrektur und 1 Vorschlag:

Sub Yv()
Dim Zeile As Long
For Zeile = Range("A" & Rows.Count).End(xlUp).Row To 1 Step -1
If IsDate(Cells(Zeile, 4)) Then                  ' da fehlte das "Cells("
If Cells(Zeile, 4) & Cells(Zeile, 6) & Cells(Zeile, 8) & Cells(Zeile, 10) = "" Then
Rows(Zeile).Delete                    ' ist einfacher und klarer
' statt     Cells(Zeile, 4).EntireRow.Delete
End If
End If
Next Zeile
End Sub
Noch ein Vorschlag: lngZ oder lngZe statt Zeile als Variablenname.
ZEILE() ist eine Excelfkt., deren Namen man nicht für eigene Variablen verwenden sollte.
Rückmeldung wäre nett! - Grüße von Erich aus Kamp-Lintfort
Anzeige
AW: Kleine Korrektur
29.10.2009 19:42:43
Yvonne
erst einmal vielen dank.
ich melde mich morgen nochmal, muss jetzt erst einmal den pc ausmachen.
bin irgendwie leicht fertig.
AW: Kleine Korrektur
30.10.2009 09:21:39
Yvonne
es funtkioniert alles super. danke für deine hilfe.
geht es so?
29.10.2009 10:18:32
Tino
Hallo,
kannst mal diese Version testen (mit Hilfsspalte)
Sub Loeschen()
Dim iCalc As Integer

With Application
 iCalc = .Calculation
 .ScreenUpdating = False
 .Calculation = xlCalculationManual 'Berechnung auf manuell (wichtig) 

    With Tabelle1.UsedRange 'Tabelle1 Benutzter Bereich 
      With .Columns(.Columns.Count).Offset(0, 1) 'nächste nicht benutzte Spalte 
           'Hilfsformel 
           .FormulaR1C1 = _
            "=IF(OR(NOT(ISNUMBER(RC1)),(RC4<>""""),(RC5<>""""),(RC6<>""""),(RC10<>"""")),ROW(),TRUE)"
            'Tabelle Sortieren 
            With Tabelle1.UsedRange
             .Sort key1:=.Cells(1, .Columns.Count), Order1:=xlAscending
            End With
            
            On Error Resume Next
             'Zeilen mit Inhalt Wahr löschen 
             .Cells.SpecialCells(xlCellTypeFormulas, 4).EntireRow.Delete
            On Error GoTo 0
            
            'Hilfsspalte löschen 
            .EntireColumn.Delete
      End With
    End With
 
 .ScreenUpdating = True
 .Calculation = iCalc
End With
End Sub
Gruß Tino
Anzeige
AW: geht es so?
29.10.2009 15:36:28
Yvonne
nee irgendwie passiert da gar nichts. muss aber heute abend nochmal in ruhe probieren.
AW: hier ein Beispiel.
29.10.2009 19:10:44
Yvonne
funktioniert super muss es jetzt nur noch in meine anwendung einfügen und verstehen. denn ich muss es auch erklären können.
habe hier auch eine version diese funktioniert aber nicht.
vielleicht ist nur eine kleine korrektur nötig. vielleicht hast du ja eine idee. diese version verstehe ich bis jetzt.
Dim Zeile As Long
For Zeile = Range("A" & Rows.Count).End(xlUp).Row To 1 Step -1
If IsDate(Zeile, 4) Then
If Cells(Zeile, 4) & Cells(Zeile, 6) & Cells(Zeile, 8) & Cells(Zeile, 10) = "" Then
Cells(Zeile, 4).EntireRow.Delete
End If
End If
Next Zeile
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige