【发布时间】: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 相同。你能用文字解释你的代码需要做什么吗?光是看,我必须承认我看不懂,你的解释有点模糊。