Microsoft Excel

Herbers Excel/VBA-Archiv

Zeilen löschen nach Bedingung | Herbers Excel-Forum


Betrifft: Zeilen löschen nach Bedingung von: Nicole
Geschrieben am: 16.12.2009 13:56:51

Hallo alle zusammen,

ich habe einen Code zum Löschen von Zeilen, wenn in Spalte B eine "0" steht. Klappte bisher auch wunderbar. Nun habe ich aber mehr Spalten gefüllt, von denen einige Zellen verbunden sind in der Überschrift. Jetzt bekomme ich die Fehlermeldung "..verbundene Zeilen geht nicht...".
Wie sage ich unten im Code, dass erst ab Zeile 7 geschaut werden soll, ob "0" in Spalte B ist? Oder würde die Fehlermeldung immer noch kommen?
Oder kann man den Code fürs "Löschen einer Zeile nach Bedingung" auch noch schlanker machen?

strSuchwert = "0" 'Suchwert
SucheInSpalte = "2" 'Spalte B
Set oSH = Sheets("Tabelle1")

With Application
iCalc = .Calculation
.Calculation = xlCalculationManual
.ScreenUpdating = False

With oSH.UsedRange
With .Columns(.Columns.Count).Offset(0, 1)

.Formula = "=IF(TEXT(RC" & SucheInSpalte & ",""@"")=""" & strSuchwert & """,True,ROW())"
oSH.UsedRange.Sort Key1:=.Cells(0, 1), Order1:=xlAscending, Header:=xlNo
On Error Resume Next
.SpecialCells(xlCellTypeFormulas, 4).EntireRow.Delete
On Error GoTo 0

.EntireColumn.Delete
End With
End With

.ScreenUpdating = True
.Calculation = iCalc
End With

Vielen Dank schon im voraus
Nicole

  

Betrifft: AW: Zeilen löschen nach Bedingung von: Tino
Geschrieben am: 16.12.2009 14:52:02

Hallo,
teste mal

Sub test()
Dim LLetzte&
Dim oSH As Worksheet
Dim strSuchwert$, SucheInSpalte$
Dim iCalc%

strSuchwert = "0" 'Suchwert 
SucheInSpalte = "2" 'Spalte B 

Set oSH = Sheets("Tabelle1")

LLetzte = oSH.Cells.SpecialCells(xlCellTypeLastCell).Row

If LLetzte > 6 Then

    With Application
        iCalc = .Calculation
        .Calculation = xlCalculationManual
        .ScreenUpdating = False
    
        With Range(oSH.Cells(7, oSH.Columns.Count), oSH.Cells(LLetzte, oSH.Columns.Count))
            .Formula = "=IF(TEXT(RC" & SucheInSpalte & ",""@"")=""" & strSuchwert & """,True,ROW())"
            .EntireRow.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
    
        .ScreenUpdating = True
        .Calculation = iCalc
    End With

End If


End Sub
Gruß Tino


  

Betrifft: AW: Zeilen löschen nach Bedingung von: Nicole
Geschrieben am: 16.12.2009 15:14:58

leider kommt ein "anwendungs- oder objektbezogener Fehler" bei der Zeile:

With Range(oSH.Cells(7, oSH.Columns.Count), oSH.Cells(LLetzte, oSH.Columns.Count))


  

Betrifft: AW: Zeilen löschen nach Bedingung von: Tino
Geschrieben am: 16.12.2009 15:32:04

Hallo,
habe es gerade getestet, bei mir kommt kein Fehler!?

Lade mal ein Beispiel hoch.

Gruß Tino


  

Betrifft: AW: Zeilen löschen nach Bedingung von: Luschi
Geschrieben am: 16.12.2009 15:50:32

Hallo Nicole,

so sollte es klappen:
With oSH.Range(oSH.Cells(7, oSH.Columns.Count), oSH.Cells(LLetzte, oSH.Columns.Count))

Gruß von Luschi
aus klein-Paris


  

Betrifft: AW: Zeilen löschen nach Bedingung von: Tino
Geschrieben am: 16.12.2009 16:08:14

Hallo,
normalerweise reicht es wenn die Referenzierung auf die Tabelle in den Klammern stattfindet.
Ich denke der Fehler liegt wo anders.

Gruß Tino


  

Betrifft: AW: Zeilen löschen nach Bedingung von: Nicole
Geschrieben am: 16.12.2009 16:25:27

danke euch beiden, mit Luschis Code-Schnippsel :-) hats geklappt.

Nicole


  

Betrifft: wo steht Dein Code? von: Tino
Geschrieben am: 16.12.2009 16:29:38

Hallo,
wahrscheinlich nicht in einem Modul.

Gruß Tino


  

Betrifft: AW: wo steht Dein Code? von: Nicole
Geschrieben am: 16.12.2009 16:43:38

nein, direkt in der Arbeitsmappe bzw. in einem Tabellenblatt


  

Betrifft: ok. dann ist es klar. danke oT. von: Tino
Geschrieben am: 16.12.2009 16:44:51




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