Aussortieren von Leeren Zeilen

  • VB.NET

Es gibt 4 Antworten in diesem Thema. Der letzte Beitrag () ist von GreenBayPacker.

    Aussortieren von Leeren Zeilen

    Hallo Leute,

    folgendes Problem: Ich habe 10 Zeilen Excel Tabelle, von denen nur etwa 3 belegt sind mit Werten. Ich möchte diese 3 mit Werten belegten nach Oben schieben, und Leere Zeilen nach unten verschieben (nicht löschen, werden gebraucht). Ich muss erlich sagen, ich verzweifle an diesem banalen Problem. Hat jmd eine Idee? Hab mir auch schon mal gedanken gemacht.. Aber mein Code funktioniert nicht so wirklich:

    VB.NET-Quellcode

    1. Dim iNextRow As Integer
    2. Dim booEmptyRow As Boolean
    3. For intZaehler = 4 To lastCell
    4. If Cells(intZaehler, 1).Value <> Empty Then
    5. iNextRow = (intZaehler + 1)
    6. Do
    7. If Cells(iNextRow, 1).Value <> Empty Then
    8. iNextRow = iNextRow + 1
    9. booEmptyRow = True
    10. Else:
    11. Sheets("Bearbeitung").Rows(iNextRow).Cut
    12. Sheets("Bearbeitung").Rows(intZaehler).Insert
    13. booEmptyRow = False
    14. End If
    15. If iNextRow = lastCell Then
    16. booEmptyRow = False
    17. End If
    18. Loop While booEmptyRow = True
    19. End If
    20. Next intZaehler



    Ich komm eher aus der JAVA Ecke, bitte verzeiht mir also Syntax-Fehler (und sagt Sie mir ;)
    Bin über jegliche Hilfe dankbar!
    Lg GreenBayPacker
    Hi.

    Wenn du wirklich nur 10 Zellen bearbeitest, solltest du dich nicht mit Copy&Paste abmühen. Folgendes macht erst Sinn, wenn dynamische (bzw. wechselnde und / oder größere) Bereiche bearbeitet werden müssen:
    - Suche die erste freie Zelle und speichere deren Position
    - Suche von dieser Position ausgehend die erste belegte Zelle
    - Schiebe den Inhalt der Zelle an den freien Bereich
    - Erhöhe den Wert der Variable "freie Zelle" um 1
    - Gehe zu Punkt 2

    Wie gesagt - diese Methode ist umständlich zu schreiben und lohnt sich erst, wenn es um große Bereiche geht. Du benötigst sozusagen einen einfachen Sortieralgorithmus, der leere Zellen ans Ende schiebt. Viel einfacher wäre folgendes:
    - Erstelle ein Array mit ausreichender Länge
    - Kopiere alle Werte aus belegten Zellen hinein, ignoriere dabei leere Zellen
    - Lösche alle Werte aus den Zellen
    - Kopiere das Array zusammenhängend in die Zellen

    Das ist ineffizient - bei 10 Zellen aber vernachlässigbar.

    Mir ist gerade aufgefallen, dass es um Zeilen (nicht um Zellen) geht - die Array-Methode sollte aber trotzdem funktionieren.
    Gruß
    hal2000

    VB.NET-Quellcode

    1. Sub MoveEmptyRows()
    2. FirstRow = 4
    3. LastRow = 13
    4. For i = FirstRow To LastRow
    5. If IsEmpty(Cells(FirstRow, 1)) Then
    6. Rows(FirstRow).Cut
    7. Rows(LastRow + 1).Insert Shift:=xlDown
    8. Else
    9. FirstRow = FirstRow + 1
    10. End If
    11. Next
    12. End Sub
    --
    If Not Program.isWorking Then Code.Debug Else Code.DoNotTouch
    --

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „petaod“ ()