55 Stimmen

Durchlauf von bevölkerten Reihen

Also versuche ich, durch ein Arbeitsblatt in einem Excel-Arbeitsblatt mithilfe von VBA zu iterieren. Ich möchte jede Zeile durchgehen und dann jede Spalte durchgehen, und trotz Suchmaschinen finde ich keinen intuitiven Weg, dies zu tun.

Ich gehe davon aus, dass die erste Zelle einer Zeile ausgefüllt sein muss, wenn nicht, dann muss das das Ende sein. Ich kann das erzwingen

Mein aktueller Ansatz besteht darin, die Zeilen zu durchlaufen und dann zu versuchen, den Wert der ersten Zelle zu erhalten, aber ich kann es nicht herausfinden. Ich bin auf einige Fragen hier und anderswo gestoßen, die Bereiche und dergleichen verwenden, aber nichts, was mir hilft, Code zu schreiben.

Der aktuelle Ansatz ist:

Set sh = AktivesArbeitsblatt
RowCount = 0
Für jedes rw In sh.Rows
    'Wenn Row.Cells(1, 1).Value = "" Then Exit For
    RowCount = RowCount + 1
Nächstes rw
MsgBox (RowCount)

Wenn ich das jetzt ausführe, erhalte ich eine sehr große Zahl, was falsch ist, da die Tabelle nur etwa 25 Zeilen hat. Ich habe die erste Zeile auskommentiert, da sie nicht funktioniert hat.

Was kann ich in der ersten Zeile in der For-Schleife ändern, um korrekt abzubrechen, wenn es eine Zeile findet, in der die erste Zelle leer ist?

90voto

AjV Jsy Punkte 5481

Zum Nutzen aller, die nach Ähnlichem suchen, siehe Arbeitsblatt .UsedRange, z. B. ? ActiveSheet.UsedRange.Rows.Count und Schleifen wie For Each loopRow in Sheets(1).UsedRange.Rows: Print loopRow.Row: Next

77voto

Hambone Punkte 14185

Es scheint, als ob du gerade die Zeile und Spalte fest codiert hast; ansonsten, mit ein paar kleinen Anpassungen denke ich, dass du da bist:

Dim sh As Worksheet
Dim rw As Range
Dim RowCount As Integer

RowCount = 0

Set sh = ActiveSheet
For Each rw In sh.Rows

  If sh.Cells(rw.Row, 1).Value = "" Then
    Exit For
  End If

  RowCount = RowCount + 1

Next rw

MsgBox (RowCount)

26voto

Automate This Punkte 29698

Ich werde ein paar Annahmen in meiner Antwort machen. Ich gehe davon aus, dass Ihre Daten in A1 beginnen und keine leeren Zellen in der ersten Spalte jeder Zeile vorhanden sind, die Daten enthält.

Dieser Code wird:

  1. Die letzte Zeile in Spalte A finden, die Daten enthält
  2. Schleife durch jede Zeile
  3. Die letzte Spalte in der aktuellen Zeile mit Daten finden
  4. Schleife durch jede Zelle in der aktuellen Zeile bis zur gefundenen letzten Spalte.

Dies ist keine schnelle Methode, aber wird sich wie von Ihnen vorgeschlagen einzeln durch jeden iterieren.


Sub iterateThroughAll()
    ScreenUpdating = False
    Dim wks As Worksheet
    Set wks = ActiveSheet

    Dim rowRange As Range
    Dim colRange As Range

    Dim LastCol As Long
    Dim LastRow As Long
    LastRow = wks.Cells(wks.Rows.Count, "A").End(xlUp).Row

    Set rowRange = wks.Range("A1:A" & LastRow)

    'Schleife durch jede Zeile
    For Each rrow In rowRange
        'Letzte Spalte in aktueller Zeile finden
        LastCol = wks.Cells(rrow, wks.Columns.Count).End(xlToLeft).Column
        Set colRange = wks.Range(wks.Cells(rrow, 1), wks.Cells(rrow, LastCol))

        'Schleife durch alle Zellen in der Zeile bis zur letzten Spalte
        For Each cell In colRange
            'Etwas mit jeder Zelle machen
            Debug.Print (cell.Value)
        Next cell
    Next rrow
    ScreenUpdating = True
End Sub

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