Microsoft Excel

Herbers Excel/VBA-Archiv

Zeilen löschen anhand Bedingung in A1 | Herbers Excel-Forum


Betrifft: Zeilen löschen anhand Bedingung in A1 von: F. Jordan
Geschrieben am: 29.01.2010 13:35:11

Hallo zusammen

Ich möchte alle Zeilen einer sehr langen Liste löschen lassen, wenn sie in der Spalte A nicht den
gleichen Begriff aufweisen, wie in A1 steht.

Vielen Dank.

Gruss
Frédéric

  

Betrifft: AW: Zeilen löschen anhand Bedingung in A1 von: Oberschlumpf
Geschrieben am: 29.01.2010 13:43:08

Hi Frédéric

Versuch mal:

Sub test()

    Dim loRow As Long
    
        For loRow = Cells(.Rows.Count, 1).End(xlUp).Row To 2 Step -1
            If Range("A" & loRow).Value <> Range("A1").Value Then
                Rows(loRow & ":" & loRow).Delete Shift:=xlUp
            End If
        Next

End Sub
Sucht in den Zeilen 2 bis letzte, benutzte Zeile in Spalte A und löscht JEDE Zeile, dessen Wert in Spalte A NICHT mit Wert in Zelle A1 übereinstimmt.

Hilfts?

Ciao
Thorsten


  

Betrifft: AW: Zeilen löschen anhand Bedingung in A1 von: F. Jordan
Geschrieben am: 29.01.2010 13:54:49

Funktioniert leider nicht. Könnte es daran liegen, dass in A1 keine Zahl, sondern z.B. Haus 1 steht?

Gruss
Frédéric


  

Betrifft: AW: Zeilen löschen anhand Bedingung in A1 von: Oberschlumpf
Geschrieben am: 29.01.2010 14:01:31

ne Bsp-Datei wäre nicht schlecht.

Meinem Code ist es "egal", ob Zahl oder Text. Es wird geprüft, ob Wert in A1 mit Wert in Spalte A der anderen Zeilen übereinstimmt.

Ciao
Thorsten


  

Betrifft: AW: Zeilen löschen anhand Bedingung in A1 von: F. Jordan
Geschrieben am: 29.01.2010 14:21:05

Hallo Thorsten

Ergibt Fehler: Unzulässiger oder unzureichender Verweis

Und markiert. in der for...-Zeile "rows"

Gruss
Frédéric


  

Betrifft: AW: Zeilen löschen anhand Bedingung in A1 von: Oberschlumpf
Geschrieben am: 29.01.2010 14:29:02

Hi Frédéric

Ja, hast Recht.

Verwende diese Zeile:

For loRow = Cells(Rows.Count, 1).End(xlUp).Row To 2 Step -1

Hilfts?

Ciao
Thorsten


  

Betrifft: AW: Zeilen löschen anhand Bedingung in A1 von: F. Jordan
Geschrieben am: 29.01.2010 14:31:58

Ja, vieeel besser. Danke.

Gruss
Frédéric


  

Betrifft: AW: Zeilen löschen anhand Bedingung in A1 von: Wenderhold
Geschrieben am: 29.01.2010 13:50:30

Hi Frederic

Public Sub del_lines()
     dim i as long
     dim szCompare as string
     szCompare = sheets(1).Cells(1,1).Value
     for i = 2 to 65536      ' über alle Zeilen
           ' Abbruchbedingung
           if sheets(1).cells(i,1).Value = "" then exit for
           if sheets(1).cells(i,1).Value <> szCompare then
                   sheets(1).Rows(i).delete
           endif
     next i
End Sub
best wishes
eugen


  

Betrifft: AW: Zeilen löschen anhand Bedingung in A1 von: F. Jordan
Geschrieben am: 29.01.2010 13:59:44

Hallo Eugen

Hängt sich auf.. die Kiste hat aber genügend Power. Liegt das Problem (wie bei der anderen Antwort" daran, dass in A1 keine Zahl, sondern z.B. Haus 1 steht?

Gruss
Frédéric


  

Betrifft: @Wenderhold, Zeilen löscht man immer von unten von: Tino
Geschrieben am: 29.01.2010 14:14:21

Hallo Eugen,
nach oben in ein er Schleife (wie bei Thorsten),
sonst läuft der Zähler zu den vorhandenen Zeilen falsch.

Gruß Tino


  

Betrifft: müsste schnell genug sein. von: Tino
Geschrieben am: 29.01.2010 14:00:12

Hallo,
Tabelle im Code noch anpassen.

Sub Loeschen_Mit_Formel()
Dim oSH As Worksheet, iCalc As Integer

Set oSH = Sheets("Tabelle1") 'Tabelle anpassen

With Application
 iCalc = .Calculation
 .Calculation = xlCalculationManual
 .ScreenUpdating = False
 
     With oSH.UsedRange
        With .Columns(.Columns.Count).Offset(0, 1)
            
            .Formula = "=IF(RC1<>R1C1,TRUE,ROW())" 'entsprechende Formel
            
            oSH.UsedRange.Sort Key1:=.Cells(1, 1), Order1:=xlAscending, Header:=xlNo
            
            On Error Resume Next
            .SpecialCells(xlCellTypeFormulas, 4).EntireRow.Delete
            .EntireColumn.Delete
            On Error GoTo 0
        End With
     End With
 
 .ScreenUpdating = True
 .Calculation = iCalc
End With
End Sub

Gruß Tino


  

Betrifft: AW: müsste schnell genug sein. von: F. Jordan
Geschrieben am: 29.01.2010 14:24:41

Hallo Tino

Hat geklappt und war wirklich superschnell. Vielen Dank!

Ehrlich gestanden verstehe ich den grössten Teil des Codes nicht, aber werde mich bemühen alle Eure Lösungen möglichst bald nachvollziehen zu können.

Wenn ich eine variable Anzahl von Tabellen habe, wie müsste ich das umbauen, damit diese Lösung erst ab dem 9. Blatt beginnt?

Gruss
Frédéric


  

Betrifft: mit einer Schleife ... von: Tino
Geschrieben am: 29.01.2010 14:33:32

Hallo,
ab der Tabelle 9 bis zur letzten.

Sub Loeschen_Mit_Formel()
Dim oSH As Worksheet, iCalc As Integer
Dim i As Integer

With Application
 iCalc = .Calculation
 .Calculation = xlCalculationManual
 .ScreenUpdating = False
 
 'Schleife ab den 9. Tabellenblatt
 For i = 9 To Worksheets.Count
     Set oSH = Worksheets(i) 'Tabelle anpassen
     With oSH.UsedRange
        With .Columns(.Columns.Count).Offset(0, 1)
            
            .Formula = "=IF(RC1<>R1C1,TRUE,ROW())" 'entsprechende Formel
            
            oSH.UsedRange.Sort Key1:=.Cells(1, 1), Order1:=xlAscending, Header:=xlNo
            
            On Error Resume Next
            .SpecialCells(xlCellTypeFormulas, 4).EntireRow.Delete
            .EntireColumn.Delete
            On Error GoTo 0
        End With
     End With
 Next i
 
 .ScreenUpdating = True
 .Calculation = iCalc
End With
End Sub
Gruß Tino


  

Betrifft: AW: mit einer Schleife ... von: F. Jordan
Geschrieben am: 29.01.2010 14:36:35

Hallo Tino

Vielen herzlichen Dank! Hat wunderbar geklappt.

Gruss
Frédéric


  

Betrifft: AW: müsste schnell genug sein. von: F. Jordan
Geschrieben am: 29.01.2010 14:33:46

.


Beiträge aus den Excel-Beispielen zum Thema "Zeilen löschen anhand Bedingung in A1"