Live-Forum - Die aktuellen Beiträge
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Zeile mit optisch leerer Zelle löschen

Zeile mit optisch leerer Zelle löschen
13.03.2009 11:21:32
Werner
VBA-Level: befriedigend
Hallo Freunde,
eine Tabelle (Worksheet) hat mehrere Spalten, beginnend ab Spalte A. Spalte A enthält Stringwerte.
Einige der Zellen in Spalte A sind optisch leer.
Nun sollen alle diejenigen Zeilen, bei denen die Zellen in Spalte A optisch leer sind, gelöscht werden.
Hört sich einfach an, ist es aber nicht ganz. Denn man weiß ja nicht genau, was sich hinter optisch
leeren Zellen alles verbergen kann (nicht initialisierte Zellen, Leerzellen, Zellen mit gelöschtem Inhalt usw.)
Frage an die Experten: Gibt es für diese Aktion einen Standardmakro oder etwas ähnliches?
Grüße! Werner R.

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

Betreff
Datum
Anwender
Anzeige
AW: Zeile mit optisch leerer Zelle löschen
13.03.2009 11:32:13
Tino
Hallo,
teste mal diese Version.
Sub Makro1()
Dim Zellen As Range
Dim A As Long

    For A = 1 To Cells(Rows.Count, 1).End(xlUp).Row
     If Trim$(Cells(A, 1).Text) = "" Then
      If Zellen Is Nothing Then
       Set Zellen = Cells(A, 1)
      Else
       Set Zellen = Union(Zellen, Cells(A, 1))
      End If
     End If
    Next A
    Zellen.EntireRow.Delete

End Sub


Gruß Tino

Anzeige
Zwischenantwort
13.03.2009 11:43:48
Werner
Hallo Tino,
vielen Dank f. deine prompte Antwort!!
Erbitte mir 1 Tag Zeit, damit ich diesen Makro in meinen Makro, der das Problem enthält, einbauen und testen kann (wir haben hier schon Abend!).
Beste Grüße! Werner R.
P.S.: In unserem Thread über das AddIn vor einigen Tagen habe ich ganz unten noch eine Abschlussnotiz
hinterlassen. Es hat dann nach Umbenennen des Addins und Anwendung deines Makros doch noch
geklappt! (bitte ggf. dort nachlesen)
noch effektiver...
13.03.2009 11:41:22
Tino
Hallo,
...ist es mit der Funktion Säubern zu arbeiten.
Weil Trim keine Zeilenumbrüche löschen kann.
Habe jetzt beides eingebaut.
Sub Makro1()
Dim Zellen As Range
Dim A As Long

With Application.WorksheetFunction
    For A = 1 To Cells(Rows.Count, 1).End(xlUp).Row
     If Trim$(Cells(A, 1).Text) = "" Or .Clean(Cells(A, 1).Text) = "" Then
      If Zellen Is Nothing Then
       Set Zellen = Cells(A, 1)
      Else
       Set Zellen = Union(Zellen, Cells(A, 1))
      End If
     End If
    Next A
End With

Zellen.EntireRow.Delete

End Sub


Gruß Tino

Anzeige
Dank!
13.03.2009 11:55:40
Werner
Hallo Tino,
vielen Dank auch f. diesen zweiten Makro!
Das Zeichen nach "Trim" ist offenbar das Dollarzeichen (wenn ja, brauchst du nicht zu antworten).
Ich schreibe den Makro ab und melde morgen zurück, ob es geklappt hat. Grüße! Werner R.
AW: Dank!
13.03.2009 12:06:02
Tino
Hallo,
Du meinst bestimmt weil ich im Code Trim$ verwende.
Nein das hat nichts damit zu tun.
Es gibt immer zwei von diesen
Trim und Trim$
Left und Left$
usw.
Die Version mit dem Dollarzeichen verwendet man, wenn man als Rückgabe einen String erwartet.
Erwartet man eine Zahl oder man weis nicht was zurückgegeben wird (Variant),
verwendet man die Version ohne Dollarzeichen.
Weil ich einen Stringvergleich mache, verwende ich die Version mit Dollarzeichen.
Gruß Tino
Anzeige
AW: Dank!
13.03.2009 12:28:27
Werner
Hallo Tino,
habe ich verstanden! Herzl. Dank! Diese Feinheiten bekommt man wohl nur durch Erfahrung mit. Bisher
waren mir nur Trim, LTrim und RTrim bekannt.
Grüße Werner R.
Abschlussnotiz
14.03.2009 09:30:28
Werner
Hallo Tino,
heute habe ich deinen Makro in mein Programm eingebaut und er hat so funktioniert wie erwartet. Nur wenn ich damit eine Liste ohne Leerstellen in der Spalte links handeln wollte, ist er abgestürzt, weil Excel dann die
Variable "Zellen" nicht erkennt (weil sie dann ja nicht initialisiert wird). Dieser Problem habe ich durch den
Einbau einer Booleschen Variablen mit Namen "ZellenJa" nach dem ersten "If" abgeholfen. Diese Variable wird auf True
gesetzt, wenn diese If-Abfrage zutrifft. Die vorletzte Zeile habe ich dann wie folgt geaendert:
If ZellenJa = True Then
Zellen.EntireRow.Delete
End If
Damit ist mein Problem also gelöst, Zeilen ohne Leerzellen ganz links bleiben unveraendert. Nochmals vielen Dank! Dein Makro zeigt auch sehr schön, wie man
die Funktion "Clean" auch zum Reinigen von Leerzellen einsetzen kann und was alles in der Anweisung
"Union" steckt.
Grüße Werner R.
Anzeige
AW: Abschlussnotiz
14.03.2009 09:43:08
Tino
Hallo,
ok. dies ist nicht berücksichtigt, dass es solche Zellen nicht gibt.
Aber dies kann man einfach so abfangen, man prüft ob die Objektvariable initialisiert wurde.
Sub Makro1()
Dim Zellen As Range
Dim A As Long

With Application.WorksheetFunction
    For A = 1 To Cells(Rows.Count, 1).End(xlUp).Row
     If Trim$(Cells(A, 1).Text) = "" Or .Clean(Cells(A, 1).Text) = "" Then
      If Zellen Is Nothing Then
       Set Zellen = Cells(A, 1)
      Else
       Set Zellen = Union(Zellen, Cells(A, 1))
      End If
     End If
    Next A
End With

If Not Zellen Is Nothing Then
 Zellen.EntireRow.Delete
End If

End Sub


Gruß Tino

Anzeige
AW: Abschlussnotiz
14.03.2009 10:29:03
Werner
Hallo Tino,
so ähnlich habe ich es auch gemacht, jedenfalls läuft es jetzt, das ist die Hauptsache.
Grüße Werner R.

305 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige