4 Stimmen

Leere Zeilen in Excel-Spalten überspringen

Wie kann ich in einem Szenario, in dem der Benutzer eine ganze Spalte in Excel auswählt und ich auf Zellen innerhalb der Spalte einwirken muss, leere Zeilen effizient ignorieren? Eine ganze Spalte hat über 1 Million Zellen! Bitte um Hilfe!

Das Angebot stammt von

var range = Application.ActiveWindow.RangeSelection;

Letztendlich möchte ich etwas tun, das

    for (int i = 0; i < range.Rows.Count; i++)

wobei Rows.Count die nicht leere Zeilenzahl sein sollte... vielleicht gibt es eine Möglichkeit, die letzte Zelle mit etwas darin zu finden?

4voto

brettdj Punkte 53619

Mehrere Optionen, je nachdem, ob Sie Leerzeichen in Ihrem Bereich haben (Methode 1) oder ob Sie einfach nur die zuletzt verwendete Zelle suchen wollen (Methode 3)

Diese Optionen werden am Beispiel der Spalte A des Aktivitätsblatts dargestellt

1. SpezielleZellen

Wenn die leeren Zellen wirklich leer sind, können Sie mit SpecialCells um mit den Formelzellen zu arbeiten (die mit = ) und/oder konstante Zellen

   Sub GetNonEmtpy()
    Dim rng1 As Range
    Dim rng2 As Range
    On Error Resume Next
    Set rng1 = Columns("A").SpecialCells(xlConstants)
    Set rng2 = Columns("A").SpecialCells(xlFormulas)
    On Error GoTo 0
    If Not rng1 Is Nothing Then MsgBox "Constants in " & rng1.Address(0, 0)
    If Not rng2 Is Nothing Then MsgBox "formula in " & rng2.Address(0, 0)
    'then work with these ranges
End Sub

2. Nachschlagen in der letzten Zelle

Sub LastCellLookup()
    Dim rng1 As Range
    Set rng1 = Cells(Rows.Count, "A").End(xlUp)
    If rng1.Row <> 1 Then
        MsgBox "last cell is " & rng1.Address(0, 0)
    Else
    'check first cell is not empty
        If Len(rng1.Value) > 0 Then
            MsgBox "last cell is " & rng1.Address(0, 0)
        Else
            MsgBox "row is blank"
        End If
    End If
End Sub

3. Finden Sie

Sub LastCellFind()
    Dim rng1 As Range
    Set rng1 = Columns("A").Find("*", [a1], xlValues, , xlByRows, xlPrevious)
    If Not rng1 Is Nothing Then MsgBox "Last cell is " & rng1.Address(0, 0)
End Sub

3voto

ikh Punkte 2237

Es klingt für mich, als ob Sie eine gute Idee, was die Obergrenze für die Anzahl der Zeilen ist, so dass Sie nicht am Ende Schleife den ganzen Weg an das Ende der Arbeitsmappe.

Wenn das der Fall ist, dann suchen Sie vielleicht nach Worksheet.UsedRange die den Bereich aller Zellen enthält, die jemals verwendet wurden (einschließlich Zellen, in die ein Wert eingegeben und dann gelöscht wurde).

Zum Beispiel,

Dim MaxUsedRow As Integer
MaxUsedRows = ActiveSheet.UsedRange.Row + ActiveSheet.UsedRange.Rows.Count - 1
MsgBox MaxUsedRows

zeigt den Index der zuletzt verwendeten Zeile in der gesamten Arbeitsmappe an.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X