Цикл через каждую строку диапазона в Excel
Это одна из тех вещей, для которых я уверен, что есть встроенная функция (и мне, возможно, говорили об этом в прошлом), но я почесываю голову, чтобы вспомнить ее.
Как выполнить цикл по каждой строке многоколоночного диапазона с помощью Excel VBA? Все учебники, которые я искал, похоже, только упоминают работу через одномерный диапазон...
4 ответа:
что-то вроде этого:
Dim rng As Range Dim row As Range Dim cell As Range Set rng = Range("A1:C2") For Each row In rng.Rows For Each cell in row.Cells 'Do Something Next cell Next row
в циклах, я всегда предпочитаю использовать
Cells
класс, используя ссылочный метод R1C1, например:Cells(rr, col).Formula = ...
Это позволяет мне быстро и легко цикл на ряд клеток легко:
Dim r As Long Dim c As Long c = GetTargetColumn() ' Or you could just set this manually, like: c = 1 With Sheet1 ' <-- You should always qualify a range with a sheet! For r = 1 To 10 ' Or 1 To (Ubound(MyListOfStuff) + 1) ' Here we're looping over all the cells in rows 1 to 10, in Column "c" .Cells(r, c).Value = MyListOfStuff(r) '---- or ---- '...to easily copy from one place to another (even with an offset of rows and columns) .Cells(r, c).Value = Sheet2.Cells(r + 3, 17).Value Next r End With
просто наткнулся на это и подумал, что я предложу свое решение. Мне обычно нравится использовать встроенную функциональность назначения диапазона многодисковому массиву (я думаю, что это также программист JS во мне).
Я часто пишу такой код:
Sub arrayBuilder() myarray = Range("A1:D4") 'unlike most VBA Arrays, this array doesn't need to be declared and will be automatically dimensioned For i = 1 To UBound(myarray) For j = 1 To UBound(myarray, 2) Debug.Print (myarray(i, j)) Next j Next i End Sub
присвоение диапазонов переменным является очень мощным способом управления данными в VBA.