Итерирование через заполненные строки в 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, и в первом столбце каждой строки, содержащей данные, нет пустых ячеек.
Этот код будет:
- Найдите последнюю строку в столбце A с данными
- Цикл через каждую строку
- Найти последний столбец в текущей строке с данными
- Прокрутите каждую ячейку в текущей строке до последнего найденного столбца.
Это не быстрый метод, но будет проходить через каждый из них по отдельности, как вы предполагали, это ваше намерение.
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