Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
496to500
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
496to500
496to500
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

Leere Zeilen löschen

Leere Zeilen löschen
08.10.2004 22:15:55
Barbara
Wie kann man mit VBA alle Zeilen löschen, die in allen Zellen der Spalte D:M leer sind?
Der Bereich soll von Zelle 1 bis zur letzten beschriebenen in Spalte A sein.
BITTE!
Danke, B.

27
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Leere Zeilen löschen
ransi
hallo barbara
löscht aber auch zeilen in denen zellen sind die über formeln mit wert ="" gefüllt sind.
Public

Sub weg()
Dim bereich As Range
Dim l As Long
For l = Range("a65536").End(xlUp).Row To 1 Step -1
Set bereich = Range(Cells(l, 4), Cells(l, 13))
If WorksheetFunction.CountIf(bereich, "") = 10 Then Cells(l, 4).EntireRow.Delete
Next
End Sub

ransi
AW: Leere Zeilen löschen
K.Rola
Hallo,
das kannst du damit erledigen:
Option Explicit
Sub Zeilen_weg()
Dim z As Long, lz As Long, c As Range
Set c = Cells(Rows.Count, 1): lz = c.Row
If IsEmpty(c) Then lz = c.End(-4162).Row
For z = lz To 1 Step -1
If Application.CountA(Range(Cells(z, 4), Cells(z, 13))) = 0 Then
Rows(z).Delete
End If
Next
End Sub

Gruß K.Rola
Anzeige
c.End(-4162).row ?
ransi
hallo k.rola
kannst du mir das erklären?
ransi
AW: c.End(-4162).row ?
K.Rola
Hallo,
gern, das ist der Wert für xlUp. In diesem Fall spielts keine Rolle aber bei größeren
Projekten ist die Codeausführung mit den Long-Werten deutlich schneller als mit den
Textkonstanten. Außerdem kann man bei Code mit Late Binding die Konstanten ohnehin nicht verwenden.
Gruß K.Rola
AW: c.End(-4162).row ?
Reinhard
Hi ransi,
seit einiger zeit schreibt K.Rola oft Ziffern.
Die Begründung ist, sie sind schneller als xlup usw.
Letzlich dann sehr wichtig bei großen Schleifen u.ä.
Gruß
Reinhard
AW: c.End(-4162).row ?
K.Rola
Hallo,
in meinen Projekten verwende ich nur die Zahlenwerte, Begründung siehe Ransi.
Gruß K.Rola
Anzeige
AW: c.End(-4162).row ?
Reinhard
Hallo K.Rola,
gut, Late Binding würde ich als Feierabenbier übersetzen :-)
(Binding ist/war ne Brauerei hier)
Okay, das kann ich nachlesen was das ist, denke bei der Kompilierung oder so, aber wie gesagt krieg ich so raus.
Was ich nicht verstehe ist, wenn ich hier versuche zu helfen, so ist die Umsetzung meiner Ideen sehr schnell, nur so 1-5% der Zeit, der Rest geht drauf, den Namen der vba-Funktion zu finden die das macht was ich will, die richtige referenzierung und dann Fehlersuche.
Dabei sind doch sprechende Namen hilfreicher als Zahlenwerte.
Deshalb verstehe ich nicht warum du nicht den Code mit sprechenden namen austestest und dann wenn alles sitzt, per Makro alle xlup durch -1234 ussw zu ersetzen?
Gruß
Reinhard
Anzeige
AW: c.End(-4162).row ?
K.Rola
Hallo,
Late Binding bedeutet späte Bindung, das wird dann gebraucht, wenn ein Verweis auf die Bibliothek nicht gesetzt werden kann oder z.B. bei WSH oder VBS, das sind Late Binding
Dialekte von VB. In diesen Fällen können die Konstanten, wie xlDown usw. nicht verwendet
werden, da sie der Sprache nicht bekannt sind.
Da ich viel damit programmiere, sind mir die gängigsten Werte bekannt.
Gruß K.Rola
wieder was gelernt :-) o.w.T.
Reinhard
AW: wieder was gelernt :-) o.w.T.
K.Rola
Hallo,
etwas weiter unten ist eine Antwort von mir, wo Late Binding angesagt ist.
https://www.herber.de/forum/messages/497621.html
Gruß K.Rola
Anzeige
AW: wieder was gelernt :-) o.w.T.
Reinhard
Hallo K.Rola,
ist ja höllisch gefährlich, Excel startet mit Makros ohne vorige MakroAbfrage, naja vbs ist immer gefährlich, deshalb soll man ja wsh o.ä abschalten in Win.
Gruß
Reinhard
AW: c.End(-4162).row ?
09.10.2004 07:05:29
Nepumuk
Hallo Reinhard,
die Zahlenwerte der Konstanten bekommst du ganz einfach. Gib im Direktfenster mal
?xlup
ein und drücke auf Enter.
Gruß
Nepumuk
AW: c.End(-4162).row ?
th.heinrich
hi Nepumuk,
wenn ich ?xlup eingebe erscheint Print xlup
excel 97 SR-1
gruss thomas
AW: c.End(-4162).row ?
Reinhard
Hi Thomas,
bei mir, xl2000 funktioniert es. Nimm halt:

Sub tt()
MsgBox xlUp * 1
MsgBox xlDown * 1
End Sub

Gruß
Reinhard
Anzeige
AW: c.End(-4162).row ?
th.heinrich
hi Reinhard,
das was Nepumuk schrieb
"die Zahlenwerte der Konstanten bekommst du ganz einfach. Gib im Direktfenster mal
?xlup"
meine antwort
"wenn ich ?xlup eingebe erscheint Print xlup" also KEIN ZAHLENWERT
bekomme ich mit Deiner antwort leider nicht unter einen hut.
gruss thomas
AW: c.End(-4162).row ?
Ulf
Gibs halt im Objektkatalog ein und klick auf das Fernglas. In der Statusleiste
wird der Wert angezeigt, dez. und hex.
Ulf
thx Ulf ot.
th.heinrich
AW: c.End(-4162).row ?
Reinhard
Hallo Thomas,
ich wollte dir nur als Information mitteilen, dass es mit meiner Version xl2000 so wie von Nepumuk gesagt funktioniert. Kenne ja deine Version nicht.
Und das Makro sollte nur ein Ansatz sein, wie du die Werte ermitteln kannst.
Gruß
Reinhard
Anzeige
sorry Reinhard
th.heinrich
das habe ich nicht geschnallt (bayerischer ausdruck) fuer kapieren.
meine excel version 97 SR-1
der hinweis von Ulf hat gefunzzt.
bleibt nur die frage, ob ich, bei meinem level, dies auch verwenden kann.
gruss thomas
AW: Leere Zeilen löschen
08.10.2004 23:14:42
Barbara
Hallo,
ich wollte ja nur eine einfache schnelle Lösung.
Ich habe mir Reinhards Vorschlag zu Gemüte geführt udn es hat funktioniert.
Nun komme ich zurück und sehe, dass sich da noch was eingefunden hat.
Danke Euch Allen.
K.Rolas Lösung habe ich auch nicht ganz verstanden.
Was bedeuten diese beiden Zeilen?
Set c = Cells(Rows.Count, 1): lz = c.Row
If IsEmpty(c) Then lz = c.End(-4162).Row
Welchen Wert nimmt c.Row nach der ersten Zeile ein, und welchen nach der zweiten? Was ist -4162?
Wäre doch zu schade, wenn ich mir diese Möglichkeit, was Neues zu lernen durch die Lappen gehen lassen würde.
Dieses Forum ist echt super. Neues Problem folgt sogleich in einer neuen Anfrage.
LG, Barbara.
Anzeige
O.T. zuviel Blumen :-)
Reinhard
Hi Barbara,
du meintest sicher ransi*g
Gruß
Reinhard
AW: Leere Zeilen löschen
K.Rola
Hallo,
Set c = Cells(Rows.Count, 1) Es wird eine Objektvariable auf die letzte Zelle in Spalte A
gesetzt.
lz = c.Row ist die Zeile der Zelle
If IsEmpty(c) Then wenn diese zelle leer ist dann ist die Zeile der letzten Zelle
lz = c.End(-4162).Row
Das Ganze hat nur den Sinn, alle Fehlerquellen auszuschließen. Wenn, warum auch immer,
A65536 nicht leer ist, führt [a65536].end(xlUp).Row logischerweise zu einem falschen Ergebnis. Vielleicht hat ja Excel in der nächsten Version mehr als 65536 Zeilen, dann
stimmt cells(Rows.Count,1) immernoch, während 65536 ein falsches Ergebnis liefert.
-4162 ist der eigentliche Wert von xlUp
Gruß K.Rola
Anzeige
AW: Leere Zeilen löschen
09.10.2004 09:36:52
Rolf
Hallo Nachteulen, insbesondere die auch von mir sehr geschätzte K.Rola,
es gibt auch eine weniger komplizierte Variante

Sub leerzeilenweg()                         'löscht Leerzeilen im genutzten Bereich
Dim b, r As Range
Set b = ActiveSheet.UsedRange
Set r = b.Rows(b.Rows.Count)
Do
Set r = r.Offset(-1)
If Application.CountA(r.Offset(1)) = 0 Then
r.Offset(1).Delete
Else
If boxRC = 6 Then ActiveWorkbook.Save
Exit Sub
End If
Loop Until r.Row = b.Row
End Sub


Function boxRC()                            'Rückgabewert der MSGBOX (6=ja;7=nein;2=abbrechen)
boxRC = MsgBox("Datei jetzt sichern?", vbYesNoCancel)
End Function

Herzliche Grüße
Rolf Beißner
Anzeige
AW: Leere Zeilen löschen
K.Rola
Hallo,
also das letzte, worauf ich mich verlasse, ist UsedRange. Der weicht, je nachdem, was zuvor an Aktivitäten gelaufen ist, schon mal erheblich vom real genutzten Bereich ab.
UsedRange umfasst außerdem auch Objekte, wie Kommentare und Grafiken, die ja nicht
zwangsläufig immer über der letzten benutzten Zelle liegen müssen.
Ich finde daher den Aufwand, die letzte benutzte Zelle zu finden, nicht zu hoch.
Gruß K.Rola
AW: Leere Zeilen löschen
09.10.2004 13:54:29
Rolf
Selber Hallo,
ich will ja nicht rechthaberisch sein,
aber was macht's, wenn ein paar Leerzeilen
zuviel gelöscht werden?
Herzliche Grüße
Rolf
AW: Leere Zeilen löschen
K.Rola
Hallo,
kommt darauf an, wieviele es sind.
Als Progammierer kann ich halt nicht anders als so exakt, wie es meine Kenntnisse zulassen.
Gruß K.Rola
AW: Leere Zeilen löschen
09.10.2004 16:34:29
Rolf
Hallo K.Rola,
je mehr ungenutzte Zeilen weg sind,
desto performanter läuft's anschließend.
Vermutlich wundern sich im Forum genau diejenigen,
die allzu verschwenderisch mit ihrer UsedRange umgehen,
darüber, dass ihre Anwendung nicht vorwärts kommt.
Das muss man/frau nicht noch programmtechnisch unterstützen.
Ansonsten hast du völlig Recht.
Herzliche Grüße
Rolf

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige