Vba для цикла для повторения вывода кода для ярости ячейки

#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