Supportnet / Forum / Tabellenkalkulation
Excel - leere zeilen löschen
Frage
moin nochmal...
nächstes problem (für mich zumindest...):
kopiere via sverweis aus einer tabelle daten in ein anderes blatt... soweit klar... da der sverweis nicht bei jeder zelle etwas zu tun hat und einige zellen leer bleiben, möchte ich diese gerne "automatisch" löschen.
sprich: kann mir jemand sagen, wie ich auf "knopfdruck" (wohl eher mausklick) leere zeilen in excel löschen kann?
vielen dank im voraus...
gruß
torben
Antwort 1 von Ahnan
Hallo,
damit deine Formeln erhalten bleiben, könntest du den Autofilter verwenden. Dort "Nichtleere" auswählen. Oder z.B. mit einem Makro die Ursprungsliste in eine Hilfsspalte kopieren u. dort die Leerzellen löschen:
Option Explicit
Sub Leerzellen_weg()
Dim i As Integer
Range("B2:B65536").Value = ""
Range("A2").Select
For i = 1 To ActiveSheet.UsedRange.Rows.Count
If ActiveCell.Value <> "" Then _
Range("B65536").End(xlUp).Offset(1, 0).Value = _
ActiveCell.Value
ActiveCell.Offset(1, 0).Select
Next i
End Sub
Damit wird die Liste v. Spalte A (ab A2) nach Spalte B (ab B2) kopiert u. dort werden die Leerzellen gelöscht. Das Makro einer Schaltfläche zuordnen.
Oder mit Hilfsspalte u. Excelformel, siehe Link:
http://www.excelformeln.de/formeln.html?welcher=43
Sonstige Methoden, die direkt deine Formelliste nach Leerzellen suchen u. löschen, löschen eben auch deine Formeln.
MfG
damit deine Formeln erhalten bleiben, könntest du den Autofilter verwenden. Dort "Nichtleere" auswählen. Oder z.B. mit einem Makro die Ursprungsliste in eine Hilfsspalte kopieren u. dort die Leerzellen löschen:
Option Explicit
Sub Leerzellen_weg()
Dim i As Integer
Range("B2:B65536").Value = ""
Range("A2").Select
For i = 1 To ActiveSheet.UsedRange.Rows.Count
If ActiveCell.Value <> "" Then _
Range("B65536").End(xlUp).Offset(1, 0).Value = _
ActiveCell.Value
ActiveCell.Offset(1, 0).Select
Next i
End Sub
Damit wird die Liste v. Spalte A (ab A2) nach Spalte B (ab B2) kopiert u. dort werden die Leerzellen gelöscht. Das Makro einer Schaltfläche zuordnen.
Oder mit Hilfsspalte u. Excelformel, siehe Link:
http://www.excelformeln.de/formeln.html?welcher=43
Sonstige Methoden, die direkt deine Formelliste nach Leerzellen suchen u. löschen, löschen eben auch deine Formeln.
MfG
Antwort 2 von workaholic
Vielen Dank für die Antwort!
Gruß
Torben
Gruß
Torben
Antwort 3 von nighty
hi ahnan :))
hier noch ein beispiel was die laufzeit extrem verkuerzt
beispiel : bei null fundstellen
normale schleife
=ActiveSheet.UsedRange.Rows.Count
=durchläufe
dargestelltes beispiel mit schleife
=1
=durchlauf
gruss nighty
Sub such()
Dim suche1 As Range
Dim zaehler1 As Long
Application.ScreenUpdating = False
For zaehler1 = 1 To Sheets(1).UsedRange.SpecialCells(xlCellTypeLastCell).Row
Set suche1 = Sheets(1).Range("B" & zaehler1 & ":B" & Sheets(1).UsedRange.SpecialCells(xlCellTypeLastCell).Row).Find("", LookIn:=xlValues)
If Not suche1 Is Nothing Then
zaehler1 = suche1.Row
Sheets(1).Range(suche1.Row & ":" & suche1.Row).Delete Shift:=xlUp
End If
Next zaehler1
Application.ScreenUpdating = True
End Sub
hier noch ein beispiel was die laufzeit extrem verkuerzt
beispiel : bei null fundstellen
normale schleife
=ActiveSheet.UsedRange.Rows.Count
=durchläufe
dargestelltes beispiel mit schleife
=1
=durchlauf
gruss nighty
Sub such()
Dim suche1 As Range
Dim zaehler1 As Long
Application.ScreenUpdating = False
For zaehler1 = 1 To Sheets(1).UsedRange.SpecialCells(xlCellTypeLastCell).Row
Set suche1 = Sheets(1).Range("B" & zaehler1 & ":B" & Sheets(1).UsedRange.SpecialCells(xlCellTypeLastCell).Row).Find("", LookIn:=xlValues)
If Not suche1 Is Nothing Then
zaehler1 = suche1.Row
Sheets(1).Range(suche1.Row & ":" & suche1.Row).Delete Shift:=xlUp
End If
Next zaehler1
Application.ScreenUpdating = True
End Sub
Antwort 4 von Soraya
Hi nighty,
du hilfst mir echt aus der Klemme. Genau das hab ich gesucht.
Jetzt nur eine Frage:
was muss ich aendern, wenn das erst ab A100 durchlaufen soll?
Wie du merkst bin ich alles andere als eine Experet auf dem Gebiet von VB.
Danke schön für deine Hilfe.
MfG
Soraya
du hilfst mir echt aus der Klemme. Genau das hab ich gesucht.
Jetzt nur eine Frage:
was muss ich aendern, wenn das erst ab A100 durchlaufen soll?
Wie du merkst bin ich alles andere als eine Experet auf dem Gebiet von VB.
Danke schön für deine Hilfe.
MfG
Soraya
Antwort 5 von Ahnan
hi nighty:))
das ist ja nur ein Beispiel von einigen Möglichkeiten.
Ich habe mal dein Makro ausprobiert. Entweder bin ich zu doof oder der Durchlauf dauert ewig, wobei ich nach einer Minute den Code unterbreche.
Gruss
das ist ja nur ein Beispiel von einigen Möglichkeiten.
Ich habe mal dein Makro ausprobiert. Entweder bin ich zu doof oder der Durchlauf dauert ewig, wobei ich nach einer Minute den Code unterbreche.
Gruss
Antwort 6 von nighty
hi ahnan :)
man sollte nichts ungetestet reinstellen,korrigiert :)))
gruss nighty
Sub such()
Dim suche1 As Range
Dim zaehler1 As Long
Application.ScreenUpdating = False
For zaehler1 = 1 To Sheets(1).UsedRange.SpecialCells(xlCellTypeLastCell).Row
zeile = Sheets(1).UsedRange.SpecialCells(xlCellTypeLastCell).Row
Set suche1 = Sheets(1).Range("B" & zaehler1 & ":B" & zeile).Find("", LookIn:=xlValues)
If Not suche1 Is Nothing Then
zaehler1 = suche1.Row - 1
Sheets(1).Range(suche1.Row & ":" & suche1.Row).Delete Shift:=xlUp
Else
Exit For
End If
Next zaehler1
Application.ScreenUpdating = True
End Sub
man sollte nichts ungetestet reinstellen,korrigiert :)))
gruss nighty
Sub such()
Dim suche1 As Range
Dim zaehler1 As Long
Application.ScreenUpdating = False
For zaehler1 = 1 To Sheets(1).UsedRange.SpecialCells(xlCellTypeLastCell).Row
zeile = Sheets(1).UsedRange.SpecialCells(xlCellTypeLastCell).Row
Set suche1 = Sheets(1).Range("B" & zaehler1 & ":B" & zeile).Find("", LookIn:=xlValues)
If Not suche1 Is Nothing Then
zaehler1 = suche1.Row - 1
Sheets(1).Range(suche1.Row & ":" & suche1.Row).Delete Shift:=xlUp
Else
Exit For
End If
Next zaehler1
Application.ScreenUpdating = True
End Sub
Antwort 7 von nighty
hi soraya :)
dann so :))
gruss nighty
Sub such()
Dim suche1 As Range
Dim zaehler1 As Long
Application.ScreenUpdating = False
For zaehler1 = 1 To Sheets(1).UsedRange.SpecialCells(xlCellTypeLastCell).Row
zeile = Sheets(1).UsedRange.SpecialCells(xlCellTypeLastCell).Row
Rem beginnend A100 - B beschriebenes zeilenende
Set suche1 = Sheets(1).Range("A100" & ":B" & zeile).Find("", LookIn:=xlValues)
If Not suche1 Is Nothing Then
zaehler1 = suche1.Row - 1
Sheets(1).Range(suche1.Row & ":" & suche1.Row).Delete Shift:=xlUp
Else
Exit For
End If
Next zaehler1
Application.ScreenUpdating = True
End Sub
dann so :))
gruss nighty
Sub such()
Dim suche1 As Range
Dim zaehler1 As Long
Application.ScreenUpdating = False
For zaehler1 = 1 To Sheets(1).UsedRange.SpecialCells(xlCellTypeLastCell).Row
zeile = Sheets(1).UsedRange.SpecialCells(xlCellTypeLastCell).Row
Rem beginnend A100 - B beschriebenes zeilenende
Set suche1 = Sheets(1).Range("A100" & ":B" & zeile).Find("", LookIn:=xlValues)
If Not suche1 Is Nothing Then
zaehler1 = suche1.Row - 1
Sheets(1).Range(suche1.Row & ":" & suche1.Row).Delete Shift:=xlUp
Else
Exit For
End If
Next zaehler1
Application.ScreenUpdating = True
End Sub
Antwort 8 von Ahnan
Hallo nighty,
mir ist da noch etwas bei deinem Makro aufgefallen: Sind z.B. mehrere Leerzellen untereinander, also nicht nur Eine u. dann wieder Text, dann bekomme ich diese nicht in einem Makrodurchlauf "weg". Es bleiben immer welche erhalten u. ich muss u.U. mehrmals das Makro durchlaufen lassen, bis alle Leerzellen "weg" sind.
Nur so als Hinweis, falls sich dein Makro jemand kopiert.
MfG
mir ist da noch etwas bei deinem Makro aufgefallen: Sind z.B. mehrere Leerzellen untereinander, also nicht nur Eine u. dann wieder Text, dann bekomme ich diese nicht in einem Makrodurchlauf "weg". Es bleiben immer welche erhalten u. ich muss u.U. mehrmals das Makro durchlaufen lassen, bis alle Leerzellen "weg" sind.
Nur so als Hinweis, falls sich dein Makro jemand kopiert.
MfG
Antwort 9 von nighty
hi ahnan :)
korrigiert :))
gruss nighty
Sub such()
Dim suche1 As Range
Dim zaehler1 As Long
Application.ScreenUpdating = False
For zaehler1 = 2 To Sheets(1).UsedRange.SpecialCells(xlCellTypeLastCell).Row
zeile = Sheets(1).UsedRange.SpecialCells(xlCellTypeLastCell).Row
Set suche1 = Sheets(1).Range("B" & zaehler1 & ":B" & zeile).Find("", LookIn:=xlValues)
If Not suche1 Is Nothing Then
zaehler1 = suche1.Row - 2
If zaehler1 < 1 Then zaehler1 = 1
Sheets(1).Range(suche1.Row & ":" & suche1.Row).Delete Shift:=xlUp
Else
Exit For
End If
Next zaehler1
Application.ScreenUpdating = True
End Sub
korrigiert :))
gruss nighty
Sub such()
Dim suche1 As Range
Dim zaehler1 As Long
Application.ScreenUpdating = False
For zaehler1 = 2 To Sheets(1).UsedRange.SpecialCells(xlCellTypeLastCell).Row
zeile = Sheets(1).UsedRange.SpecialCells(xlCellTypeLastCell).Row
Set suche1 = Sheets(1).Range("B" & zaehler1 & ":B" & zeile).Find("", LookIn:=xlValues)
If Not suche1 Is Nothing Then
zaehler1 = suche1.Row - 2
If zaehler1 < 1 Then zaehler1 = 1
Sheets(1).Range(suche1.Row & ":" & suche1.Row).Delete Shift:=xlUp
Else
Exit For
End If
Next zaehler1
Application.ScreenUpdating = True
End Sub
Antwort 10 von Soraya
Hi nighty
ich hab das jetzt ein bisserl angepasst - allerdings läuft es nicht durch, weil ich die variable "zeile" nicht angepasst habe. Hab schon versucht da was hinzuklauern und hab auch schon "lastCell" durch die entsprechende Zeile ersetzt, aber das hilft alles nicht.
Ich weiß: "Frauen und Technik" aber bei VB stell ich mich wirklich unglaublich blöde an. Obwohl ich mit jedem Versuch ein bisserl mehr kapiere.
ich danke dir/euch jedenfalls für deine/eure Hilfe.
LG
Soraya
Sub ausblenden()
Dim suche1 As Range
Dim zaehler1 As Long
Application.ScreenUpdating = False
For zaehler1 = 2 To Sheets(2).UsedRange.SpecialCells(xlCellTypeLastCell).Row
zeile = Sheets(2).UsedRange.SpecialCells(xlCellTypeLastCell).Row
Rem beginnend A113 - A150
Set suche1 = Sheets(2).Range("A113" & ":A150").Find("", LookIn:=xlValues)
If Not suche1 Is Nothing Then
zaehler1 = suche1.Row - 2
If zaehler1 < 1 Then zaehler1 = 1
Sheets(1).Range(suche1.Row & ":" & suche1.Row).Delete Shift:=xlUp
Else
Exit For
End If
Next zaehler1
Application.ScreenUpdating = True
End Sub
ich hab das jetzt ein bisserl angepasst - allerdings läuft es nicht durch, weil ich die variable "zeile" nicht angepasst habe. Hab schon versucht da was hinzuklauern und hab auch schon "lastCell" durch die entsprechende Zeile ersetzt, aber das hilft alles nicht.
Ich weiß: "Frauen und Technik" aber bei VB stell ich mich wirklich unglaublich blöde an. Obwohl ich mit jedem Versuch ein bisserl mehr kapiere.
ich danke dir/euch jedenfalls für deine/eure Hilfe.
LG
Soraya
Sub ausblenden()
Dim suche1 As Range
Dim zaehler1 As Long
Application.ScreenUpdating = False
For zaehler1 = 2 To Sheets(2).UsedRange.SpecialCells(xlCellTypeLastCell).Row
zeile = Sheets(2).UsedRange.SpecialCells(xlCellTypeLastCell).Row
Rem beginnend A113 - A150
Set suche1 = Sheets(2).Range("A113" & ":A150").Find("", LookIn:=xlValues)
If Not suche1 Is Nothing Then
zaehler1 = suche1.Row - 2
If zaehler1 < 1 Then zaehler1 = 1
Sheets(1).Range(suche1.Row & ":" & suche1.Row).Delete Shift:=xlUp
Else
Exit For
End If
Next zaehler1
Application.ScreenUpdating = True
End Sub
Antwort 11 von Ahnan
Hallo,
ich bin zwar nicht nighty, aber da ich mich ebenfalls mit diesem Problem beschäftigt habe, diesen Tipp:
Dim zeile As Long
oben einfügen, bei der Variablendeklaration.
MfG (u. Gruss an nighty)
ich bin zwar nicht nighty, aber da ich mich ebenfalls mit diesem Problem beschäftigt habe, diesen Tipp:
Dim zeile As Long
oben einfügen, bei der Variablendeklaration.
MfG (u. Gruss an nighty)
Antwort 12 von Soraya
Besten Dank. Jetzt läuft es durch. Aber der Spass dauert ja 3 Stunden - da ha ich die Dinger ja manuell 5x so schnell gelöscht.
Trotzdem danke schön für eure Hilfe.
LG
Soraya
Trotzdem danke schön für eure Hilfe.
LG
Soraya
Antwort 13 von nighty
hi soraya :)
bei obigen war wohl abgelenkt :(
dann vielleicht so :)
gruss nighty
Option Explicit
Sub makro01()
Dim suche As Range
Dim zaehler As Long
zaehler = 112
Do
Set suche = Sheets(1).Range("A" & (zaehler) & ":A150").Find("", LookIn:=xlValues)
If Not suche Is Nothing Then
Sheets(1).Range(suche.Row & ":" & suche.Row).Clear
If suche.Row >= 150 Then Exit Do
zaehler = suche.Row
Else
Exit Do
End If
Loop
End Sub
bei obigen war wohl abgelenkt :(
dann vielleicht so :)
gruss nighty
Option Explicit
Sub makro01()
Dim suche As Range
Dim zaehler As Long
zaehler = 112
Do
Set suche = Sheets(1).Range("A" & (zaehler) & ":A150").Find("", LookIn:=xlValues)
If Not suche Is Nothing Then
Sheets(1).Range(suche.Row & ":" & suche.Row).Clear
If suche.Row >= 150 Then Exit Do
zaehler = suche.Row
Else
Exit Do
End If
Loop
End Sub
Antwort 14 von Soraya
Hi nighty,
das ist ja super lieb von dir, dass du dir soviel Mühe mit meinem Problem gibst. Echt ein RIESEN Danke schön.
Aber leider hat es nicht funktioniert. Die Sanduhr läuft und läuft und läuft - da ist der Duracell Hase schon lange müde, da läuft die Sanduhr immer noch ;-)
Kann man wohl nix machen. Trotzdem Danke.
Ganz liebe Grüße
Soraya
das ist ja super lieb von dir, dass du dir soviel Mühe mit meinem Problem gibst. Echt ein RIESEN Danke schön.
Aber leider hat es nicht funktioniert. Die Sanduhr läuft und läuft und läuft - da ist der Duracell Hase schon lange müde, da läuft die Sanduhr immer noch ;-)
Kann man wohl nix machen. Trotzdem Danke.
Ganz liebe Grüße
Soraya

