Supportnet Computer
Planet of Tech

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

Antwort 2 von workaholic

Vielen Dank für die Antwort!

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

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

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

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

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

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

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

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

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)

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

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

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

Ich möchte kostenlos eine Frage an die Mitglieder stellen:


Ähnliche Themen:


Suche in allen vorhandenen Beiträgen: