#excel #vba #for-loop
Вопрос:
Как я могу сделать цикл for, чтобы повторить этот код между N5 и N11
Dim rw As Long
If Range("K6") = True Then 'Holiday Check
rw = [RandBetween(6,25)]
Range("N5") = Cells(rw, 21)
ElseIf Range("I6") = True Then 'Weekend Check
rw = [RandBetween(5,28)]
Range("N5") = Cells(rw, 20)
Else 'Else Weekday
rw = [RandBetween(5,65)]
Range("N5") = Cells(rw, 19)
End If
Заранее благодарю вас 🙂
Ответ №1:
Вы можете ознакомиться с документацией для…Далее и для каждого…Следующие циклы, в которых объясняется, как работает синтаксис для каждого из циклов.
Для достижения своей цели вы можете рассмотреть следующие вопросы:
- Используйте переменную либо для ссылки на ячейку, либо для номера строки
- Увеличивайте эту переменную с каждым шагом вашего цикла
- Замените жестко закодированную ссылку на диапазон ссылкой на переменную номера ячейки или строки.
Я продемонстрирую этот For Each...Next
метод.
Что-то вроде этого:
Private Sub UsingAForLoop()
Dim TargetCell As Range
For Each TargetCell In Range("N5:N11")
If Range("K6") = True Then 'Holiday Check
rw = [RandBetween(6,25)]
TargetCell = Cells(rw, 21)
ElseIf Range("I6") = True Then 'Weekend Check
rw = [RandBetween(5,28)]
TargetCell = Cells(rw, 20)
Else 'Else Weekday
rw = [RandBetween(5,65)]
TargetCell = Cells(rw, 19)
End If
Next TargetCell
End Sub
Этот пример проходит по каждой ячейке диапазона Range("N5:N11")
и каждый раз следует вашей логике if. Когда условие будет выполнено, TargetCell
для этой итерации будут заполнены данные по вашей Cells()
ссылке.
Если вам нужно изменить другие ссылки как часть ваших IF...Then
утверждений, вы можете следовать той же логике.
Ответ №2:
Dim rw As Long
For I = 5 To 11
If Range("K6") = True Then 'Holiday Check
rw = [RandBetween(6,25)]
Range("N" amp; I) = Cells(rw, 21)
ElseIf Range("I6") = True Then 'Weekend Check
rw = [RandBetween(5,28)]
Range("N" amp; I) = Cells(rw, 20)
Else 'Else Weekday
rw = [RandBetween(5,65)]
Range("N" amp; I) = Cells(rw, 19)
End If
Next I