<table><tbody><tr><th> </th><th>A</th><th>B</th></tr><tr><td>1</td><td>17</td><td> </td></tr><tr><td>2</td><td>15</td><td> </td></tr><tr><td>3</td><td>31</td><td>average(A1-A3)</td></tr><tr><td>4</td><td>24</td><td>(ActiveCell.Offset(0, -1).Value * (2 / (VariableA + 1)) + ActiveCell.Offset(-1, 0).Value * (1 - (2 / (VariableA + 1))))</td></tr><tr><td>5</td><td>27</td><td>(ActiveCell.Offset(0, -1).Value * (2 / (VariableA + 1)) + ActiveCell.Offset(-1, 0).Value * (1 - (2 / (VariableA + 1))))</td></tr><tr><td>6</td><td>49</td><td>(ActiveCell.Offset(0, -1).Value * (2 / (VariableA + 1)) + ActiveCell.Offset(-1, 0).Value * (1 - (2 / (VariableA + 1))))</td></tr><tr><td>7</td><td>16</td><td>(ActiveCell.Offset(0, -1).Value * (2 / (VariableA + 1)) + ActiveCell.Offset(-1, 0).Value * (1 - (2 / (VariableA + 1))))</td></tr><tr><td>8</td><td>45</td><td>(ActiveCell.Offset(0, -1).Value * (2 / (VariableA + 1)) + ActiveCell.Offset(-1, 0).Value * (1 - (2 / (VariableA + 1))))</td></tr><tr><td>9</td><td>35</td><td>(ActiveCell.Offset(0, -1).Value * (2 / (VariableA + 1)) + ActiveCell.Offset(-1, 0).Value * (1 - (2 / (VariableA + 1))))</td></tr><tr><td>10</td><td>17</td><td>(ActiveCell.Offset(0, -1).Value * (2 / (VariableA + 1)) + ActiveCell.Offset(-1, 0).Value * (1 - (2 / (VariableA + 1))))</td></tr><tr><td>11</td><td>12</td><td>(ActiveCell.Offset(0, -1).Value * (2 / (VariableA + 1)) + ActiveCell.Offset(-1, 0).Value * (1 - (2 / (VariableA + 1))))</td></tr><tr><td>12</td><td>32</td><td>(ActiveCell.Offset(0, -1).Value * (2 / (VariableA + 1)) + ActiveCell.Offset(-1, 0).Value * (1 - (2 / (VariableA + 1))))</td></tr><tr><td>13</td><td>37</td><td>(ActiveCell.Offset(0, -1).Value * (2 / (VariableA + 1)) + ActiveCell.Offset(-1, 0).Value * (1 - (2 / (VariableA + 1))))</td></tr><tr><td>14</td><td>17</td><td>(ActiveCell.Offset(0, -1).Value * (2 / (VariableA + 1)) + ActiveCell.Offset(-1, 0).Value * (1 - (2 / (VariableA + 1))))</td></tr><tr><td>15</td><td>43</td><td>(ActiveCell.Offset(0, -1).Value * (2 / (VariableA + 1)) + ActiveCell.Offset(-1, 0).Value * (1 - (2 / (VariableA + 1))))</td></tr><tr><td>16</td><td>45</td><td>(ActiveCell.Offset(0, -1).Value * (2 / (VariableA + 1)) + ActiveCell.Offset(-1, 0).Value * (1 - (2 / (VariableA + 1))))</td></tr></tbody></table>
<< img src =“ https://image.soinside.com/eyJ1cmwiOiAiaHR0cHM6Ly9pLnN0YWNrLmltZ3VyLmNvbS9sOXBoVi5wbmcifQ==” alt =“在此处输入图像描述”>“ >>
[我正在尝试应用一个公式,在该公式中,我需要引用公式单元格左侧的几个单元格,并向上引用几个单元格,然后将该公式向下应用到该列的下方相当多的行。
我正在尝试通过使用偏移功能来获得结果,但是没有得到期望的结果。
我将非常感谢任何指导。
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
====非常抱歉我的互联网连接中断了几天。我应该更准确地表达这个问题。
附上的屏幕截图只是一个类似问题的示例,尽管计算几乎具有相同的性质,但公式中的列是不同的。我什至尝试将值更改为公式,但是结果相同,并且值不会自动调整。
我按照建议以文本格式粘贴我的公式。通过'期望结果',我的意思是VBA计算出的数字与使用公式计算出的数字不同。 VBA计算错误。
上面的图像仅表示类似情况。
经过一段时间的搜索之后,我开始考虑是否可以将带Redim保存的数组以任何方式解决问题?
问题在于使用'activecell'代替'rng',而不是'select'。
A | B | |
---|---|---|
1 | 17 | ... |
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