使用偏移量将公式向下复制一列
Using offset to copy formula down a column
我正在尝试应用一个公式,我需要在其中引用公式单元格左侧的几个单元格和向上的几个单元格,然后将公式应用到该列下方的相当多的行中。
我试图通过使用偏移函数来获得结果,但我没有得到想要的结果。
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)))
- 等等……在专栏下方
所附的屏幕截图只是举一个类似问题的例子,虽然计算的性质几乎相同,但公式中引用的列不同。
我什至尝试将值更改为公式,但结果是一样的,而且值不会自动调整。
我将我的公式以文本格式粘贴为 adviced.By 'desired result' 我的意思是 VBA 计算的数字与使用公式计算的数字不同。 VBA 计算错误。
上图仅代表类似案例。
在谷歌搜索了一下之后,我在想是否可以使用带有 Redim 保留的数组以任何方式解决问题?
由@Faneduru 解决问题是使用 'Activecell' 代替 'rng' 而不是 'select'.
请试试这个代码:
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
我正在尝试应用一个公式,我需要在其中引用公式单元格左侧的几个单元格和向上的几个单元格,然后将公式应用到该列下方的相当多的行中。
我试图通过使用偏移函数来获得结果,但我没有得到想要的结果。
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)))
- 等等……在专栏下方
所附的屏幕截图只是举一个类似问题的例子,虽然计算的性质几乎相同,但公式中引用的列不同。 我什至尝试将值更改为公式,但结果是一样的,而且值不会自动调整。
我将我的公式以文本格式粘贴为 adviced.By 'desired result' 我的意思是 VBA 计算的数字与使用公式计算的数字不同。 VBA 计算错误。
上图仅代表类似案例。
在谷歌搜索了一下之后,我在想是否可以使用带有 Redim 保留的数组以任何方式解决问题?
由@Faneduru 解决问题是使用 'Activecell' 代替 'rng' 而不是 'select'.
请试试这个代码:
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