Установить макрос VBA для Excel для запуска серии линейных уравнений, взяв переменную из нескольких строк?

У меня есть набор уравнений, которые я хотел бы повторить, взяв переменные из следующей строки вниз для каждого из столбцов, в которых находится каждая переменная. Я новичок, поэтому мой код, вероятно, не царапается:

Sub Iteration()

Dim al, ab, ae As Double
Dim as1, as2 As Double 
'etc

as1 = Range("CG7")
as2 = Range("CG8")
aA1 = Range("BQ7")
'etc

intCounter = 0
For intCounter = 1 To 10000

  Let x = ((aN1 * 1000) - (as1 * aA1) + (as2 * aA2)) / (al * fc * ae * ab)

  Let x2 = ((aN12 * 1000) - (as12 * aA12) + (as22 * aA22)) / (al2 * fc2 * ae2 * ab2)

Next

 Sheets("Sheet1").Range("CJ7").Value = x

End Sub

Я сделал это для нескольких переменных, которые я установил как диапазон относительно каждого значения переменной. А затем для следующей строки мне пришлось переделать все уравнение и снова установить переменные для следующей строки вниз. Есть ли способ установить переменные (возможно, с относительной ссылкой на ячейку?), Которые будут переходить к ячейке в следующей строке для следующего расчета? Учтите также, что имеется 36 строк для расчета и около 9 переменных!


person user1769265    schedule 23.10.2012    source источник


Ответы (1)


Если я вас правильно понял, то как насчет этого:

Sub Iteration()

Dim al, ab, ae As Double
Dim as1, as2 As Double 
'etc

intCounter = 0
For intCounter = 0 To 10000

    as1 = Range("CG7").Offset(intCounter)
    as2 = Range("CG8").Offset(intCounter)
    aA1 = Range("BQ7").Offset(intCounter)
   'etc

  Let x = ((aN1 * 1000) - (as1 * aA1) + (as2 * aA2)) / (al * fc * ae * ab)

  Let x2 = ((aN12 * 1000) - (as12 * aA12) + (as22 * aA22)) / (al2 * fc2 * ae2 * ab2)

Next

 Sheets("Sheet1").Range("CJ7").Value = x

End Sub
person Scott Holtzman    schedule 23.10.2012
comment
Это хорошо, если я хочу выполнить вычисления один раз, но я хотел бы выполнить вычисления для каждой строки, а затем вернуться к началу, чтобы снова выполнить все их, пока не будет получено сходящееся значение. - person user1769265; 24.10.2012
comment
@user1769265 user1769265 -› в таком случае, вы не можете просто изменить место, где вы размещаете смещение, и, возможно, обернуть цикл вокруг уже имеющегося цикла? - person Scott Holtzman; 24.10.2012
comment
да, поэтому я настроил первый intcounter для прохождения строк ячеек, которые я использую для расчета, я просто пытаюсь установить цикл, который остановится, когда окончательное значение будет повторено, хотя у меня есть некоторые проблемы, связывающие значение x для каждого случая с его повторным значением. Поэтому я не знаю, что поставить после команды «До тех пор». Я хотел бы проверить итерированное значение по сравнению с предыдущим значением x и прекратить расчет, когда отклонение меньше 0,001, например, для всех случаев x. - person user1769265; 24.10.2012