Anzeige
Archiv - Navigation
600to604
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
600to604
600to604
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

Löschen von Zeilen

Löschen von Zeilen
24.04.2005 06:01:01
Zeilen
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

9
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Löschen von Zeilen
24.04.2005 07:32:23
Zeilen
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 


Gruß
Marcus
http://xltreff.de
Anzeige
AW: Löschen von Zeilen
24.04.2005 08:02:18
Zeilen
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.
Anzeige
AW: Löschen von Zeilen
24.04.2005 08:11:03
Zeilen
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
AW: Löschen von Zeilen - überarbeitet
24.04.2005 08:17:37
Zeilen
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 


Noch einmal ein Dank an Hajo ...
Gruß
Marcus
http://xltreff.de
Anzeige
AW: Löschen von Zeilen - überarbeitet
24.04.2005 08:27:09
Zeilen
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.
AW: Löschen von Zeilen - überarbeitet
24.04.2005 08:36:30
Zeilen
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
Anzeige
AW: Löschen von Zeilen
24.04.2005 07:42:36
Zeilen
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
 


Bei weiteren Fragen einfach melden.
mfg, GraFri
Anzeige
DANKSAGUNG
24.04.2005 10:45:35
Joachim
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
Alternativ mit Autofilter
24.04.2005 10:07:55
Boris
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
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige