Страницы: 1
RSS
Как отследить предыдущее значение переменной в цикле Do While
 
Добрый день!
Уважаемые участники форума, в макросе Эксель использую цикл Do While с проверяемым условием: Do While i > 1, на определенном этапе цикла нужно знать предыдущее значение i (шаг назад в цикле), есть ли какой то оператор для этого?  
Изменено: DopplerEffect - 12.12.2017 14:49:17
 
Запоминайте значение в переменной
 
Код
i=i-1
ну или какой у вас там шаг.
Мастерство программиста не в том, чтобы писать программы, работающие без ошибок.
А в том, чтобы писать программы, работающие при любом количестве ошибок.
 
Я вообще не понял что нужно... Но ведь всегда можно ввести ещё одну переменную, или какие-то проблемы с этим?
 
С этим как раз проблемы, т.к. переменная изменяется в цикле и после ее изменения появляется необходимость использования предыдущего значения. Ладно попробую переписать чуть код что бы можно было запоминать.  
 
Вы не можете создать дополнительную переменную для хранения значения?
 
DopplerEffect, в чём проблема-то?
Код
Dim tmp As Integer, I As Integer

Do While I < 10
  tmp = I 
  I = I + 1
Loop
MsgBox tmp
 
Цитата
Irregular Expression написал:
DopplerEffect , в чём проблема-то?Код ? 1234567Dim tmp As Integer, I As Integer Do While I < 10  tmp = I   I = I + 1LoopMsgBox tmp
Ок. А если нужно будет два шага назад знать значение переменной?  
 
Бред, конечно
Код
Sub StepI()
Dim tmp(), I&, iStep&
I = 1
Do While I < 10
    ReDim Preserve tmp(I)
    tmp(I) = I
    I = I + 1
Loop
iStep = Application.InputBox("Введите индекс шага, значение которого Вас интересует:", , 1, Type:=1)
If iStep >= LBound(tmp) And iStep <= UBound(tmp) Then
    MsgBox "Значение переменной 'I' на " & iStep & " шаге равно: " & tmp(iStep)
Else
    Exit Sub
End If
End Sub
Вы лучше опишите ЗАДАЧУ, которую пытаетесь решить таким СПОСОБОМ
Согласие есть продукт при полном непротивлении сторон
 
Цитата
DopplerEffect написал:
А если нужно будет два шага назад знать значение переменной?
Можно хранить в переменных, можно в коллекции. В последнем случае можно хранить сколько угодно шагов.
Код
Sub TimeMachine1()
Dim i, p, pp
  i = 100
  Do While i > 1
    Debug.Print "тек"; i;
    If p > 0 Then Debug.Print "пред"; p;
    If pp > 0 Then Debug.Print "предПред"; pp;
    Debug.Print
    pp = p
    p = i
    i = i - Int(Rnd * 20)
  Loop
End Sub

Sub TimeMachine2()
Dim i, cl As New Collection
  i = 100
  Do While i > 1
    Debug.Print "тек"; i;
    If cl.Count > 0 Then Debug.Print "пред"; cl(1);
    If cl.Count > 1 Then Debug.Print "предПред"; cl(2);
    Debug.Print
    If cl.Count > 0 Then cl.Add i, Before:=1 Else cl.Add i
    If cl.Count > 2 Then cl.Remove 3 'необязательно
    i = i - Int(Rnd * 20)
  Loop
End Sub

Страницы: 1
Наверх