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

Forumthread: Zellen mit Werten nach oben verschieben

Zellen mit Werten nach oben verschieben
15.08.2005 02:43:06
blizzky
Hallo,
Folgendes Problem: Ich habe eine lange Spalte (ca 1800 Zeilen), in der sich mehrere leere Zellen befinden und nur einiege mit Werten.
Ich möchte erreichen, dass die leeren Zellen gelöscht werden und die mit den Werten sich nach oben verschieben.
Hab folgendes probiert:
dim r as range
set range("bereich")
dim i as integer
for i = 1 to r.rows.count
if r(i,1) = 0 then
r(i,1).delete
else
end if
next i
Es dauert aber ewig und ich muss das Makro mind 6-7 ausführen, bis alle Einträge "oben" sind.
Was ist falsch?
Anzeige

6
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Zellen mit Werten nach oben verschieben
15.08.2005 02:46:43
MartinP2
Hallo,
Warum machst du es nicht über Daten-Sortieren?
Grüße
Martin
AW: Zellen mit Werten nach oben verschieben
15.08.2005 03:01:34
blizzky
Hi,
Die Werte sollten ihre Reihenfolge nicht verlieren!
grüße
AW: Zellen mit Werten nach oben verschieben
15.08.2005 06:12:32
Hajo_Zi
Hallo Hans-Bärbel,
drehe Deine Schleife um lasse Sie von hinten nach vorne laufen, dann ist Problem 2 gelöst.
Bitte keine Mail, Probleme sollten im Forum gelöst werden.
Microsoft MVP für Excel
Das Forum lebt auch von den Rückmeldungen.
Betriebssystem XP Home SP2 und Excel Version 2003 SP1.


Anzeige
AW: Zellen mit Werten nach oben verschieben
15.08.2005 07:11:00
Erich
Hallo Stefan,
wenn häufiger mehrere leere Zellen untereinander vorkommen, gehts so schneller:

Sub LoeschenWenn()
Dim rg As Range, zz As Long, ru As Range
Set rg = Range("bereich")
For zz = rg.Rows.Count To 1 Step -1
If rg(zz, 1) = 0 Then
Set ru = rg(zz, 1)
Do While zz > 1 And rg(zz - 1, 1) = 0
zz = zz - 1
Set ru = Union(ru, rg(zz, 1))
Loop
ru.Delete xlShiftUp           ' wenn nur in Spalte 1 zu löschen ist
' ru.EntireRow.Delete xlShiftUp ' wenn ganze Zeilen zu löschen sind
End If
Next zz
End Sub

Die Idee, mit Unions zu arbeiten, habe ich aus einem Beitrag von Hajo Anfang August hier im Forum.
Das Makro löscht nicht nur leere Zellen, auch Zellen, in denen die Zahl 0 steht. Ist das beabsichtigt? Wenn nein, müsstest du noch r(i,1)=0 ersetzen durch isempty(r(i,1)) (kommt 2 mal vor).
i hattest du als integer, solte long sein (sonst gibts bei großen Zeilennummern Fehler).
Rückmeldung wäre nett! - Grüße von Erich aus Kamp-Lintfort
Anzeige
AW: Zellen mit Werten nach oben verschieben
16.08.2005 01:38:29
Stefan
Hi Erich,
Du hast das Problem richtig erkannt- es sollen sowohl Zeilen ohne Werte als auch solche mit Nullen gelöscht werden.
Ich bin sicher das Makro funktioniert bestens, ich teste es wenn ich etwas freie Zeit habe. Ich bin schon zum nächsten Problem übergegangen...
Vielen Dank für deinen schnellen Einsatz!
Viele Grüße:
Stefan
Anzeige
AW: Zellen mit Werten nach oben verschieben
16.08.2005 02:04:43
Stefan
Jep,
funktioniert bestens!!
Thanks Erich!
Viele Grüße:
Stefan
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige
Anzeige
Anzeige
Anzeige

Infobox / Tutorial

Zellen nach oben verschieben in Excel


Schritt-für-Schritt-Anleitung

Um leere Zellen in einer Excel-Tabelle zu löschen und die Zellen mit Werten nach oben zu verschieben, kannst Du folgende Schritte ausführen:

  1. Daten auswählen: Markiere den Bereich, in dem Du die leeren Zellen löschen möchtest.

  2. VBA-Editor öffnen: Drücke ALT + F11, um den VBA-Editor zu öffnen.

  3. Neues Modul erstellen: Klicke im Menü auf Einfügen und dann auf Modul.

  4. VBA-Code einfügen: Kopiere den folgenden Code in das Modul:

    Sub LoeschenWenn()
       Dim rg As Range, zz As Long, ru As Range
       Set rg = Selection ' Wähle den markierten Bereich
       For zz = rg.Rows.Count To 1 Step -1
           If rg(zz, 1) = 0 Then
               Set ru = rg(zz, 1)
               Do While zz > 1 And rg(zz - 1, 1) = 0
                   zz = zz - 1
                   Set ru = Union(ru, rg(zz, 1))
               Loop
               ru.Delete xlShiftUp
           End If
       Next zz
    End Sub
  5. Makro ausführen: Schließe den VBA-Editor und führe das Makro über Entwicklertools > Makros aus.

Diese Methode ist besonders effektiv, wenn Du viele leere Zellen in deiner Tabelle hast.


Häufige Fehler und Lösungen

  • Problem: Das Makro läuft sehr lange oder löscht nicht alle leeren Zellen.

    • Lösung: Stelle sicher, dass Du die Schleife von hinten nach vorne laufen lässt, wie im obigen Beispiel gezeigt.
  • Problem: Es werden auch Zellen mit dem Wert 0 gelöscht.

    • Lösung: Wenn das nicht gewünscht ist, ändere If rg(zz, 1) = 0 Then in If IsEmpty(rg(zz, 1)) Then.

Alternative Methoden

  1. Daten sortieren: Du kannst auch die Funktion "Daten sortieren" verwenden, um leere Zellen nach unten zu verschieben und die Zellen mit Werten nach oben zu bringen. Wähle dazu den gesamten Bereich aus und gehe zu Daten > Sortieren.

  2. Filter verwenden: Setze einen Autofilter auf deine Daten und filtere nach Nicht-Leeren. Kopiere die gefilterten Werte in einen neuen Bereich.

  3. Formeln: Du kannst auch Formeln verwenden, um die Zellen nach oben zu verschieben, indem Du die Funktion VERGLEICH und INDEX nutzt, um nur die Werte herauszufiltern.


Praktische Beispiele

Angenommen, Du hast folgende Daten in Spalte A:

A1: 10
A2: (leer)
A3: 20
A4: (leer)
A5: 30

Nach dem Ausführen des Makros wirst Du folgendes Ergebnis in Spalte A haben:

A1: 10
A2: 20
A3: 30

Die leeren Zellen wurden erfolgreich gelöscht und die Werte nach oben verschoben.


Tipps für Profis

  • Makros optimieren: Wenn Du regelmäßig mit großen Datenmengen arbeitest, überlege, deine Makros zu optimieren, um die Leistung zu verbessern.
  • Daten sichern: Erstelle immer eine Sicherungskopie deiner Daten, bevor Du Makros ausführst, um Datenverluste zu vermeiden.
  • Excel VBA lernen: Investiere Zeit in das Lernen von Excel VBA, um komplexere Automatisierungen und Anpassungen vornehmen zu können.

FAQ: Häufige Fragen

1. Wie kann ich auch leere Zeilen löschen und die Tabelle nach oben verschieben? Du kannst das gleiche Makro verwenden, indem Du die Zeilen anstelle der Zellen löschst. Ändere einfach ru.Delete xlShiftUp zu ru.EntireRow.Delete xlShiftUp.

2. Funktioniert das auch in neueren Excel-Versionen? Ja, das Beispiel funktioniert in den meisten Excel-Versionen, einschließlich Excel 365 und Excel 2019. Achte darauf, dass die VBA-Umgebung in Deiner Version aktiviert ist.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige