Löschen von Zeilen

Informationen und Beispiele zu den hier genannten Dialog-Elementen:
Bild

Betrifft: Löschen von Zeilen
von: Joachim
Geschrieben am: 24.04.2005 06:01:01
Guten Morgen............
mir fehlt die Formel oder der Code den ich in VBA eintragen muss, um einige bestimmte Zeilen aus einer Tabelle über eine Schaltfläche zu löschen.
In der Tabelle stehen Namen mit Geburtsdaten, jetzt möchte ich automatisch alle Zeilen der Person löschen die 1980 geboren sind.
z.B. löschen der Zeile 3 und 4, die Zeile von Ries Michael muss dann eine Zeile nach oben rutschen, so das es keine leeren Zeilen gibt.
Geht das? Gibt es jemand der mir helfen kann?
https://www.herber.de/bbs/user/21607.xls
Danke
Joachim

Bild

Betrifft: AW: Löschen von Zeilen
von: Marcus Rose
Geschrieben am: 24.04.2005 07:32:23
Hallo,
suchst Du so etwas?


      
Sub loesche()
    
Dim Loletzte As Long
    
Dim i As Integer
    Loletzte = IIf(IsEmpty(Range(
"d65536")), Range("d65536").End(xlUp).Row, 65536)
    
For i = 1 To Loletzte
    
If Cells(i, 4) = "1980" Then
    Cells(i, 4).EntireRow.Delete
    
End If
    
Next i
End Sub 

     Code eingefügt mit Syntaxhighlighter 3.0

Gruß
Marcus
http://xltreff.de
Bild

Betrifft: AW: Löschen von Zeilen
von: Hajo_Zi
Geschrieben am: 24.04.2005 08:02:18
Hallo Marcus,
es ist einfacher bei Löschen von Zeilen, Zellen von Hinten nach vorne mit der Schleife zu gehen. Bei Deinem Code werden Zeilen übersprungen. Du löscht Zele D3, D4 wird zu D3 usw und als nächstes Prüft Du D4. Damit wurde der Wert aus ehemals D4 nicht geprüft.
Mal nur als Hinweis.

Bitte keine Mail, Probleme sollten im Forum gelöst werden.
Microsoft MVP für Excel
Das Forum lebt auch von den Rückmeldungen.
Betriebssystem XP Home SP2 und Excel Version 2003 SP1.



"Wer Rechtschreibfehler findet, darf sie behalten!" Dies gilt auch für Bert.
Bild

Betrifft: AW: Löschen von Zeilen
von: Marcus Rose
Geschrieben am: 24.04.2005 08:11:03
Hallo Hajo,
das ist nett, dass Du mich darauf aufmerksam gemacht hast. Ist mir selber noch nicht aufgefallen, da es so schön geklappt hat. Ich lerne ja noch ... Sehe ich somit als Zufallstreffer an und werde mir dieses Makro einfach einmal umschreiben und ablegen.
Danke und einen schönen Sonntag
Gruß
Marcus
http://xltreff.de
Bild

Betrifft: AW: Löschen von Zeilen - überarbeitet
von: Marcus Rose
Geschrieben am: 24.04.2005 08:17:37
Hallo,
habe mein Makro somit jetzt einmal umgedreht, so dass es von hinten aufräumt:


      
Sub loesche()
    
Dim Loletzte As Long
    
Dim i As Integer
    Loletzte = IIf(IsEmpty(Range(
"d65536")), Range("d65536").End(xlUp).Row, 65536)
    
For i = Loletzte To 1 Step -1
    
If Cells(i, 4) = "1980" Then
    Cells(i, 4).EntireRow.Delete
    
End If
    
Next i
End Sub 

     Code eingefügt mit Syntaxhighlighter 3.0


Noch einmal ein Dank an Hajo ...
Gruß
Marcus
http://xltreff.de
Bild

Betrifft: AW: Löschen von Zeilen - überarbeitet
von: WernerB.
Geschrieben am: 24.04.2005 08:27:09
Hallo Markus,
wenn Du schon am überarbeiten bist:
Die Variable "loLetzte" hast Du richtiger Weise als "Long" deklariert.
Es ist aber inkonsequent, hier dann die Variable "i" als "Integer" zu deklarieren.
Eine Integer-Variable reicht m.W. nur bis 32.767 (im positiven Bereich).
Wenn "loLetzte" z.B. mit 40.000 belegt ist, wirst Du mit "i" als Integer Schiffbruch erleiden.
Wenn man mit Zeilennummern umgeht, sollte man grundsätzlich nur Long-Variablen verwenden.
Nichts für ungut.

Gruß
WernerB.
Bild

Betrifft: AW: Löschen von Zeilen - überarbeitet
von: Marcus Rose
Geschrieben am: 24.04.2005 08:36:30
Hallo Werner,
Tja, wo Du recht hast ... Nagut. Dim I as Long. Das werde ich jetzt aber nicht noch einmal hier einfügen ... Danke . Ich sollte doch etwas besser aufpassen ...
Gruß
Marcus
http://xltreff.de
Bild

Betrifft: AW: Löschen von Zeilen
von: GraFri
Geschrieben am: 24.04.2005 07:42:36
Hallo
Vielleicht hilft dir folgender Code weiter.


      
Option Explicit
Sub Lösche_nach_Geburtsjahr()
Dim gebJahr%, lezZeile%, n%, x%
' Eingabe für das Geburtsjahr
  gebJahr = InputBox("Bitte geben Sie das Geburtsjahr ein.", "Geburtsjahr")
' letzte Datenzeile der Geburtsjahr-Spalte ermitteln
  lezZeile = letzteZeile("Tabelle1", 4) ' 4 für Spalte D
  
' löschen
  For n = lezZeile To 2 Step -1
    
If Worksheets("Tabelle1").Cells(n, 4).Value = gebJahr Then
      Worksheets("Tabelle1").Rows(n).Delete
    
End If
  
Next n
' neue letzte Zeile ermitteln
  lezZeile = letzteZeile("Tabelle1", 4) ' 4 für Spalte D

' neu nummerieren
  x = 1
  
For n = 2 To lezZeile
      Worksheets("Tabelle1").Cells(n, 1) = x
      x = x + 1
  
Next n
End Sub
Public Function letzteZeile(vWS As VariantOptional x As Long = 1) As Long
Dim Y   As Long
Dim ws  As Worksheet
    
  
On Error GoTo PROC_ERR
    
  
Select Case UCase(TypeName(vWS))
    
Case "STRING"
      
Set ws = Worksheets(vWS)
    
Case "WORKSHEET"
      
Set ws = vWS
    
Case Else
      
GoTo PROC_ERR
  
End Select
    
  
With ws
    Y = .Rows.Count
    letzteZeile = .Cells(Y, x).End(xlUp).Row
  
End With
    
PROC_EXIT:
  
Exit Function
PROC_ERR:
  letzteZeile = -1
  
Resume PROC_EXIT
End Function
 

     Code eingefügt mit Syntaxhighlighter 3.0


Bei weiteren Fragen einfach melden.
mfg, GraFri
Bild

Betrifft: DANKSAGUNG
von: Joachim
Geschrieben am: 24.04.2005 10:45:35
Super genial vielen Dank für die Hilfe es funzt.
Ich habe einiges ausprobiert und bin am Schluss bei der VBA-Formel hängen geblieben:

Sub LoeschenVonZellenMit*()
Dim Zelle As Range
For Each Zelle In Range("X1:X1000")
    If Zelle = "*" Then Range("X" & Zelle.Row).ClearContents
Next Zelle
End Sub


Sub GanzeZellenLöschen()
Range("X:X").SpecialCells(xlCellTypeBlanks).EntireRow.Delete
End Sub

Schönen Sonntag an ALLE
Bild

Betrifft: Alternativ mit Autofilter
von: Boris
Geschrieben am: 24.04.2005 10:07:55
Hi,
...das dürfte in größeren Listen wesentlich flotter sein:
Option Explicit

Sub weg_damit()
Range("B1:D1").AutoFilter
Selection.AutoFilter field:=3, Criteria1:="1980"
Rows("2:10000").Delete
Range("B1:D1").AutoFilter
End Sub

Grüße Boris
 Bild

Beiträge aus den Excel-Beispielen zum Thema "Löschen von Zeilen"