Geht es geschmeidiger?

Informationen und Beispiele zu den hier genannten Dialog-Elementen:
MsgBox
Bild

Betrifft: Geht es geschmeidiger?
von: PQuest:-)
Geschrieben am: 14.11.2015 18:52:59

Hallo,
mit dem u.a. Code lösche ich in einer Tabelle alle Leerzeilen. Ich weiss nicht wieviele Zeilen bzw. Spalten die Tabelle enthält. Darum ermittel ich erst die letzte Zeile bzw. Spalte. Dann werden die Zellen zeilenweise auf Inhalt kontrolliert. Hat die Zelle Inhalt, wird sofort die Zeile gewechselt und die Löschvariable DelRow auf False gesetzt. Ist kein Inhalt vorhanden, wird die Löschvariable auf True gesetzt und die nächste Zelle der Zeile geprüft usw.
Ist die Zeile leer (DelRow=True), wird die Zeile gelöscht und die Gesamtzahl der Zeilen und die der aktuell zu prüfenden Zeile um 1 verringert um der Löschung Rechnung zu tragen.
Damit sich das ganze nicht in einer Endloschleife verhakt, gibt es noch die IF iRow=lngLastRow Abfrage.

Private Sub DelEmptyRow()
Dim ws As Worksheet
Dim lngLastRow As Long, lngLastCol As Long, iRow As Long, iCol As Long
Dim DelRow As Boolean
Set ws = Worksheets("Roh")
DelRow = False
    
    lngLastRow = ws.UsedRange.SpecialCells(xlCellTypeLastCell).Row
    lngLastCol = ws.UsedRange.SpecialCells(xlCellTypeLastCell).Column
    For iRow = 1 To lngLastRow
        For iCol = 1 To lngLastCol
            If Not (IsEmpty(Cells(iRow, iCol))) Then
                DelRow = False
                Exit For
            Else
                DelRow = True
            End If
        Next
        If DelRow = True Then
            Rows(iRow).Delete
            lngLastRow = lngLastRow - 1
            If iRow = lngLastRow Then
                Exit For
            Else
                iRow = iRow - 1
                DelRow = False
            End If
        End If
    Next
End Sub
Es funktioniert alles, wie es soll. Meine Frage lautet schlicht und ergreifend, ob man das Ganze kürzer oder eleganter machen kann.
Wer sich über diese Frage wundert, dem sei gesagt, dass ich einfach nur meine Kenntnisse verbessern möchte und durch Fragen wird man schlauer :-)
Danke,
PQuest:-)

Bild

Betrifft: mit CountA prüfen ob Zeile leer ist ...owT
von: Matthias L
Geschrieben am: 14.11.2015 19:14:36


Bild

Betrifft: AW: Geht es geschmeidiger?
von: Daniel
Geschrieben am: 14.11.2015 19:23:21
HI
löschen von Zeilen am geschmeidigsten mit Duplikate-Entfernen:

With ActiveSheet.Usedrange
    With .Columns(.columns.count + 1)
        .FormulaR1C1="=IF(CountA(RC1:RC[-1])=0,0,Row())"
        .Cells(1, 1).Value = 0
        .EntireRow.RemoveDuplicates .column, xlno
        .ClearContents
    end With
End With
Gruss Daniel


Bild

Betrifft: hier nochmal genauer ...
von: Matthias L
Geschrieben am: 14.11.2015 19:26:38
Hallo
Hier mal noch ein Bsp.Code

Dim x
For x = Tabelle1.UsedRange.SpecialCells(xlCellTypeLastCell).Row To 1 Step -1
 If Application.WorksheetFunction.CountA(Rows(x)) = 0 Then
    MsgBox "Zeile " & x & " ist leer"
 Else
    MsgBox "Zeile " & x & " ist nicht leer"
 End If
Next
Statt der Box kannst Du ja auch löschen.
Gruß Matthias

Bild

Betrifft: Besten Dank...
von: PQuest:-)
Geschrieben am: 14.11.2015 20:09:07
da sieht man mal wieder, wo eine eingeschränkte Sichtweise hinführt...zu x Zeilen Code, wo nur x/10 Zeilen nötig wären ;-)

 Bild

Beiträge aus den Excel-Beispielen zum Thema "Neuberechnung anstoßen"