【问题标题】:Using offset to copy formula down a column使用偏移量将公式复制到一列
【发布时间】:2020-01-06 11:20:26
【问题描述】:

我正在尝试应用一个公式,我需要引用公式单元格左侧的几个单元格和向上的几个单元格,然后将公式沿列向下应用很多行。

我正在尝试通过使用偏移功能来达到结果,但我没有得到想要的结果。

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

====
我真的很抱歉我的互联网连接中断了几天。
我应该更准确地表达这个问题。

  • 单元格 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 保留的数组可以以任何方式解决问题?

@Faneduru 解决了问题是使用“Activecell”代替“rng”而不是“select”。

【问题讨论】:

  • “我没有得到想要的结果”——有点含糊。期望的结果是什么,你得到了什么结果?另请阅读stackoverflow.com/questions/10714251/…
  • 也不要将数据添加为图像,将它们添加为纯文本,以便其他人可以复制您的数据并查看他们的解决方案是否有效。
  • 如果您愿意,可以使用Range.Formula 一次应用公式。公式中的引用会自动调整。如果你想摆脱公式,你可以使用Range.Value = Range.Value
  • 这能回答你的问题吗? How to avoid using Select in Excel VBA 你应该去掉 ActiveCell 引用
  • 您的迭代不会产生任何东西。 Selection.Value 将始终与 ActiveCell 相同。你能用文字解释你的代码需要做什么吗?光是看,我必须承认我看不懂,你的解释有点模糊。

标签: excel vba offset


【解决方案1】:

请试试这个代码:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-24
    • 2018-12-31
    • 2018-10-03
    • 2020-07-15
    • 1970-01-01
    • 2023-03-19
    相关资源
    最近更新 更多