Итерирование через заполненные строки в Excel с помощью VBA

Поэтому я пытаюсь выполнить итерацию листа в электронной таблице Excel с помощью VBA. Я хочу перебирать каждую строку, а затем через каждый столбец, и, несмотря на поиск в Интернете, я не могу найти интуитивный способ сделать это.

Я предполагаю, что первая ячейка строки должна быть заполнена, если ее нет, то это должен быть конец. Я могу обеспечить соблюдение этого

Мой текущий подход состоит в том, чтобы перебирать строки, а затем попытаться получить значение первой ячейки, но я не могу понять это. Я задал вопросы здесь и в других местах, используя диапазоны и т.д., Но ничего не помогает мне написать код.

Текущий подход:

Set sh = ActiveSheet
RowCount = 0
For Each rw In sh.Rows
    'If Row.Cells(1, 1).Value = "" Then Exit For
    RowCount = RowCount + 1
Next rw
MsgBox (RowCount)

Теперь, когда я запускаю это, я получаю огромное количество, что неверно, поскольку таблица содержит только около 25 строк. Я прокомментировал первую строку, поскольку она не работала.

Что я могу изменить в первой строке в For Loop, чтобы правильно сломать, когда найдет строку, где первая ячейка пуста?

Ответ 1

Похоже, вы просто жестко закодировали строку и столбец; в противном случае, несколько небольших настроек, и я думаю, что вы там:

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)

Ответ 2

В интересах любого, кто ищет аналогичные, см. .UsedRange лист .UsedRange,
например ? ActiveSheet.UsedRange.Rows.Count ? ActiveSheet.UsedRange.Rows.Count
и циклы, такие как
For Each loopRow in Sheets(1).UsedRange.Rows: Print loopRow.Row: Next

Ответ 3

Я собираюсь сделать пару предположений в своем ответе. Я предполагаю, что ваши данные начинаются в A1, и в первом столбце каждой строки, содержащей данные, нет пустых ячеек.

Этот код будет:

  1. Найдите последнюю строку в столбце A с данными
  2. Цикл через каждую строку
  3. Найти последний столбец в текущей строке с данными
  4. Прокрутите каждую ячейку в текущей строке до последнего найденного столбца.

Это не быстрый метод, но будет проходить через каждый из них по отдельности, как вы предполагали, это ваше намерение.


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)

    'Loop through each row
    For Each rrow In rowRange
        'Find Last column in current row
        LastCol = wks.Cells(rrow, wks.Columns.Count).End(xlToLeft).Column
        Set colRange = wks.Range(wks.Cells(rrow, 1), wks.Cells(rrow, LastCol))

        'Loop through all cells in row up to last col
        For Each cell In colRange
            'Do something to each cell
            Debug.Print (cell.Value)
        Next cell
    Next rrow
    ScreenUpdating = True
End Sub