Использование смещения для копирования формулы вниз по столбцу - PullRequest
0 голосов
/ 06 января 2020

ScreenShot

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

Я пытаюсь достичь результата с помощью функции смещения, но не получаю желаемого результата.

Sub ResultAchievedIsNotAsRequired()

Dim variableA As Long
variableA = Worksheets("DATA").Range("D7").Value

Dim LeftRow As Long
LeftRow = ActiveCell.Offset(0, -1).Value

Dim Upperrow As Long
Upperrow = ActiveCell.Offset(-1, 0).Value

Dim q As Long
Worksheet("MyCalculation").Range("B4").Select

For q = 4 To 50
    Selection.Value = (ActiveCell.Offset(0, -1).Value * (2 / (VariableA + 1)) + ActiveCell.Offset(-1, 0).Value * (1 - (2 / (VariableA + 1))))
    ActiveCell.Offset(1, 0).Activate
Next

End Sub

=== =
Мне очень жаль, что мое inte rnet соединение отключилось на пару дней.
Я должен был бы сформулировать вопрос немного точнее.

  • Ячейка B3 должна иметь значение = = среднее от A1 до A3.
  • Ячейка B4 должна вычислить: (значение ячейки A4 * (2 / (8 + 1)) + значение ячейки B3 * (1-2 / (8 + 1) )))
  • Ячейка B5 должна вычислить: (значение ячейки A5 * (2 / (8 + 1)) + значение ячейки B4 * (1-2 / (8 + 1)))
  • Ячейка B6 должна вычислять: (значение ячейки A6 * (2 / (8 + 1)) + значение ячейки B5 * (1-2 / (8 + 1)))
  • и т. Д. …. Вниз по столбцу

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

Я вставляю формулу в текстовом формате, как рекомендовано. Под «желаемым результатом» я имею в виду числа, рассчитанные VBA. не такие, как рассчитывается по формуле. Расчеты VBA неверны.

Приведенное выше изображение было только показательным для аналогичного случая.

После небольшого приближения у меня возникают мысли, может ли использование массива с Redim preserve решить эту проблему, в В любом случае?

Решено @Faneduru. Проблема заключалась в использовании Activecell вместо rng, а не в select.

1 Ответ

1 голос
/ 09 января 2020

Попробуйте этот код, пожалуйста:

Sub ResultAchieved()
 Dim variableA As Long, sh As Worksheet, q As Long, rng As Range
 variableA = Worksheets("DATA").Range("D7").Value

 Set sh = Worksheets("MyCalculation")
 For q = 4 To 50 ' sh.Cells(sh.Rows.count, "A").End(xlUp).Row
    Set rng = sh.Range("B" & q)
    rng.value = (rng.Offset(0, -1).Value * (2 / (variableA + 1)) + _
               rng.Offset(-1, 0).Value * (1 - (2 / (variableA + 1))))
 Next q
End Sub
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...