Чтобы циклы выполняли Шаг 3 только после вставки значения в 6 рядов ячеек - PullRequest
0 голосов
/ 05 августа 2020

Следующий код, который у меня есть. Вставит код значения «01» в ячейку, а затем будет непрерывно пропускать 4 строки, пока не будет достигнут конец счетчика для l oop. Я хочу запустить аналогичный l oop для «02», но вместо «Step» (пропустить) 4 строки, я бы хотел, чтобы он вставлял значение в 6 последовательных строк в одном столбце, а затем непрерывно пропускал 3 строки, пока доходит до конца счета. Я 2 недели новичок в vba, поэтому надеюсь, что объясняю это правильно.

Dim i As Long

If Sheet3.Range("C22").Value = "01" Then

    For i = 3 To 202 Step 4
        ActiveWorkbook.Sheets("CrewEntries").Cells(i, 6).Value = _
                  ActiveWorkbook.Sheets("MonData").Cells(22, 5).Value
    Next i

ElseIf Sheet3.Range("C22").Value = "02" Then
    For i = 3 To 152
        ActiveWorkbook.Sheets("CrewEntries").Cells(i, 6).Value = _
                  ActiveWorkbook.Sheets("MonData").Cells(22, 5).Value
    Next i

End If

Ответы [ 3 ]

0 голосов
/ 06 августа 2020

Для такого рода вопросов я бы посоветовал while-l oop, как в этом фрагменте псевдокода:

dim condition as boolean
dim loop_step, interesting_value as integer

condition = true
loop_step = 1 'just in order to be sure that it never is 0, this might create an infinite loop
interesting_value = 0 ' or some other initialisation value

while condition do 
  if <some_first_condition> 
  then
    do_first_thing(interesting_value, ...) 
    loop_step = 3
  else
    do_second_thing(interesting_value, ...)
    loop_step = 6
  end if

  interesting_value = interesting_value + loop_step  

  if <some_other_condition> then condition = false

Wend
0 голосов
/ 06 августа 2020
Sub EarningCode()

Dim CpID As String

Dim i As Long

Dim p As Long

CpID = ActiveWorkbook.Sheets("MonData").Cells(22, 3).Value

For i = 3 To 452

If p = 9 Then

    p = 1

Else

p = p + 1


End If

If p < 7 Then

     ThisWorkbook.Worksheets("CrewEntries").Cells(i, 4).Value = "02"

End If

Next i

End Sub
0 голосов
/ 06 августа 2020

Может быть так:

Dim i As Long, v

v = ActiveWorkbook.Sheets("MonData").Cells(22, 5).Value

If Sheet3.Range("C22").Value = "01" Then

    For i = 3 To 202 Step 4
        ActiveWorkbook.Sheets("CrewEntries").Cells(i, 6).Value = v
    Next i

ElseIf Sheet3.Range("C22").Value = "02" Then
    
    For i = 3 To 152 Step 9 '6 filled + 3 empty = 9
        ActiveWorkbook.Sheets("CrewEntries").Cells(i, 6).Value = v
    Next i

End If
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...