Supportnet Computer
Planet of Tech

Supportnet / Forum / Tabellenkalkulation

Löschen von Zeilen anhand von leeren Feldern





Frage

Hallo, ich habe ein Problem, dass sich wie folgt zusammensetzt. habe eine excel tabelle In diser excel tabelle sind Daten enthalten von A-F. In jeder Zeile in Spalte A sind daten enthalten, in der Spalte I hingegen nicht. Ich möchte jetzt, dass alle Zeilen, bei denen unter Spalte I keine Daten gespeichert sind, gelöscht werden. Wie kann ich das realisieren? Hoffe ich versteht mein Problem. Gruß Christian

Antwort 1 von martl

Hallo Christian,

also mit VBA lässt sich das wie folgt lösen: Bitte den Code in die Entwicklungsumgebung von Excel wechseln (mit ALT+F11) und dann in die jeweilige Tabelle einfügen.

Public Sub löschen()
Dim löschen%
For löschen = 1 To Cells(Rows.Count, 1).End(xlUp).Row Step 1
If Cells(löschen, 6).Value = "" Then
Rows(löschen).Select
With Selection.EntireRow.Delete
End With
End If
Next löschen
End Sub

Alternativ könntest Du nen Autofilter setzen und in der Spalte F nach <Leeren> suchen und anzeigen lassen, dann die Zeieln markieren und löschen.

Vielleicht hab ich schon mal weiterhelfen können, ansonsten einfach nochmal melden.

Viele Grüße
martl

Antwort 2 von Christian01

Hi Martl,

ich habe deinen code mal ausprobiert. Allerdings hat das makro, was daraufhin verfügbar ist nicht funktioniert. er hat mir alle zeilen gelöscht.

Ich habe jetzt einen anderen quellcode grade eben gefunden.

Option Explicit
Const Titel = "Zeilen Löschen mit Wert"
Const Msg = "Bitte geben Sie den Wert an, nachdem gesucht und gelöscht werden soll."

Sub DelFoundLines()
Dim i As Long ´ Zeilenzähler
Dim tofind As Variant ´ Hiernach wird gesucht
Dim found As Range ´ Eine Fundstelle oder Nothing
´tofind = InputBox(prompt:=Msg, Title:=Titel)
tofind = " "
If tofind = "" Then Exit Sub
Application.ScreenUpdating = False
For i = ActiveSheet.Cells.SpecialCells(xlCellTypeLastCell).Row To 1 Step -1
Set found = Rows(i).Find(what:=tofind, LookIn:=xlValues, lookat:=xlWhole)
If Not found Is Nothing Then Rows(i).Delete
Next
Application.ScreenUpdating = True
End Sub


Das klappt auch soweit schon. Nur wie kann ich nach einem leeren feld suchen?
habe es mit " " probiert, da macht der code oben gar nichts. wenn ich hingegen die leeren felder mit einem eindeutigen wert fülle z.B x123 und dann nach x123 suche, dann löscht er mir alle zeilen, in denen x123 steht.
Soweit so gut. Nur ist das nicht beschränkt auf eine Spalte.
Wie kann ich zusätzlich das noch auf Zeile i beschränken?

Hoffe du oder jmd anders kann mir erneut helfen.

Danke nochmal und gruß

Christian

Antwort 3 von martl

Hallo Christian,

also das versteh ich nicht, bei mir löscht er nur die Zeilen komplett, die in der Spalte "F" leer sind. oder soll er nur die Werte aus der jew. Zeile entfernen und die leere Zeile stehen lassen? dann müsste das so aussehen:

Public Sub löschen()
Dim löschen%
For löschen = 1 To Cells(Rows.Count, 1).End(xlUp).Row Step 1 ´Zähler in Spalte A
If Cells(löschen, 6).Value = "" Then ´Wenn Wert in Zeile der Spalte 6 -> F leer ist,
Rows(löschen).Select ´ Zellen selektieren
With Selection.ClearContents ´ mit der Selektion Inhalte löschen
End With ´ Selektion beenden
End If ´ Abfrage beenden
Next löschen ´Schleife beenden
End Sub

Handelt es sich bei der zu suchenden Zelle um einen Text dann versuchs mal mit: If Cells(löschen, 6).Text = ""

Wg. dem andern Code werd ich mich nochmal melden.

Gruß
Martl

Antwort 4 von Christian01

Hallo martl,


ich habe deinen code noch mal probiert.

Beim ersten ausführen läuft er noch nicht richtig. Da löscht er nur einen datensatz.
Nach dem zweiten ausführen hin gegen klappt alles einwandfrei.

Woran es liegt, dass er das erst nach dem zweiten versuch macht weiss ich nicht.

Danke Dir auf jeden Fall.


Gruß

Christian

Antwort 5 von martl

Hallo Christian,

freut mich, wenn ich Dir da helfen konnte. Also bei dem Code bin ich davon ausgegangen, dass die zu überprüfende Tabelle in A1 beginnt. Fängt Deine Tabelle auch an dieser Stelle an ? Wenn z.B. von a1 bis a2 noch leere Zellen sind, funktioniert der Code nicht richtig und es müsste an folgender Zeile z.B. für Daten ab A3 eine Anpassung vorgenommen werden:

For löschen = 3 To Cells(Rows.Count, 1).End(xlUp).Row Step 1

Viele Grüße
martl

Antwort 6 von ypsilon

hi,
beim löschen von zeilen IMMER von unten nach oben
also:
For löschen = Cells(Rows.Count, 1).End(xlUp).Row to 1 Step -1
eigentlich logisch ;-)
und hört auf mit eurem select
Rows(löschen).Delete
funktioniert direkt
die variable "löschen" als integer zu deklarieren geht schief bei mehr als 32767 zeilen also gleich als double
die variable sollte loeschen genannt werden sonst gibts fehler in anderssprachigen excel-versionen

Public Sub leere_loeschen()
Dim loeschen As Double
For loeschen = Cells(Rows.Count, 1).End(xlUp).Row To 1 Step -1
If Cells(loeschen, 6).Value = "" Then
Rows(loeschen).Delete
End If
Next loeschen
End Sub

cu Micha

Antwort 7 von martl

Hallo Micha,

freu mich, dass Du mich auf diese Probleme aufmerksam gemacht hast. Hab schon wieder was dazugelernt. Danke!

Gruß
martl

Antwort 8 von want2cu

Hallo Christian,

das Problem ist ja schon mit VBA gelöst worden.

Ich möchte als ergänzenden Alternative noch eine andere und m.E. vielleicht noch einfachere Lösung vorstellen:
Die Daten mittels Autofilter (in Spalte A dann einfach "leere" auswählen und dann die Zeilen löschen. - fertig

CU
want2cu

Antwort 9 von Christian01

Hallo,

Vielen Dank für eure Lösungsvorschläge bzw. Verbesserungen.
Ihr habt mir sehr geholfen.

@want2cu
Das mit dem Autofilter hatte ichs chon in betracht gezogen, nur muss dabei vom Benutzer ein wenig mehr gemacht werden :-)


Danke nochmal an alle


Gruß

Christian

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


Ähnliche Themen:


Suche in allen vorhandenen Beiträgen: