Изменить цикл значения ячейки в VBA - PullRequest
0 голосов
/ 24 февраля 2019

Я хочу, чтобы эта часть кода выполнялась, если значение ячейки H83 больше 22, тогда я хочу, чтобы код увеличивал значение ячейки R14, которое составляет 0,7 с шагом 0,01, пока либо R14 не достигнет 0,75, либопока H83 не меньше 22. Я пробовал:

For j = 0.69 To 0.74
w = j + 0.01
    If Range("h83") > 22 Then
    Range("r14").Value = w
        If 21 < Range("h83") < 23 Then Exit For
    End If
Next j

Это не работает, и сейчас у меня есть, поэтому он увеличивает его на 0,01 только один раз (часть в звездочках), полный код:

Sub C_CreateTestResultTableV2()

Application.ScreenUpdating = True 'helps the code run faster


Dim vInputs, vResults()
Dim c As Integer, i As Integer

'create INPUTS
c = Range("b5").End(xlToRight).Column
vInputs = Range("b5", Cells(9, c))
    'determine last value in the column
    c = UBound(vInputs, 2)

'create RESULTS
ReDim vResults(1 To 4, 1 To c)

For i = 1 To c

'checks to see if t_air_in > 22
If vInputs(1, i) > 22 And vInputs(3, i) < 70 Then
    'set values
    Range("j18") = vInputs(1, i)
    Range("n14") = vInputs(3, i)
    Range("r16") = vInputs(5, i)

    'checks to see if t_air_out = 22 and changes t_wat_in and m_wat_in accordingly
    If Range("h83") > 22 Then
    Range("r16").Value = Range("r16").Value - 3
    End If

    *If Range("h83") > 22 Then
    Range("r14").Value = Range("r14").Value + 0.01
    End If*

    'copy output values into RESULTS
    vResults(1, i) = Range("h83")
    vResults(2, i) = Range("k83")
    vResults(3, i) = Range("z14")
    vResults(4, i) = Range("r15")

End If

    'resets values
    Range("r16").Value = 13
    Range("r14").Value = 0.7

Next i

Range("b96").Resize(4, c) = vResults

Application.ScreenUpdating = True

End Sub

1 Ответ

0 голосов
/ 24 февраля 2019

Если вы хотите, чтобы что-то происходило до тех пор, пока не будет выполнено определенное условие, но вы точно не знаете, когда это произойдет, вам нужен цикл Do-Loop:

Do While Range("H83").Value < 23
 Range("R14").Value = Range("R14").value + 0.01
 Range("H83").value = Range("H83").value + x 'If you don't do something with Range("H83"), the loop will go on forever
Loop

Редактировать: От того, кто это сделалошибка более чем готов признать: если вы создаете цикл do, убедитесь, что вы не создаете бесконечный цикл, потому что велика вероятность того, что VBA больше не будет отвечать.

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