2009-09-22 2 views
80

Это одна из тех вещей, которые, я уверен, есть встроенная функция (и мне, возможно, это уже рассказывалось в прошлом), но я почесываю свой голова, чтобы запомнить это.Цикл через каждый ряд диапазона в Excel

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

ответ

114
Dim a As Range, b As Range 

Set a = Selection 

For Each b In a.Rows 
    MsgBox b.Address 
Next 
117

Что-то вроде этого:

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 
4

В Loops, я всегда предпочитаю использовать 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 
4

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

+0

Мне нравится этот путь лучше всего! – athos

+0

Два основных преимущества: 1) метод массива ** всегда быстрее **, чем цикл через диапазон, 2) он прост, и вы можете использовать его в ** в обоих направлениях ** и записать массив обратно после некоторые вычисления: «Диапазон (« A1: D4 ») = myarray'. ** Примечание: ** «Dim myarray» в качестве варианта; обратите внимание на то, что по умолчанию это * 1based * 2dim –