excel vba将参考单元输入到公式和循环中

时间:2017-03-07 20:55:59

标签: vba excel-vba excel

我认为这是一个非常基本的VBA挑战,并花了几个小时寻找答案。如果有人可以将我指向正确的地方,如果已经解决了,那就谢谢了。

我的公式是B1 + C1 = D1,并且有两个1x5矩阵的数据输入,一个用于单元格B1,另一个用于单元格C1,比如[1,2,3,4,5]和[A, B,C,D,E]分别在细胞(B2:B7)和(C2:C7)中。我想循环输入,这样我得到五个独特的答案[1 + A,2 + B,3 + C,4 + D,5 + E],并在相邻的1x5矩阵中输出这些答案,比如说细胞(D2:D7)。

录制宏在这里不起作用,因为它记录了一个不灵活的复制/粘贴动作以供将来使用(对于扩展矩阵,其他工作表位置,更复杂的公式等)。

任何帮助都非常感激。

亨利

更新:我相信我需要使用" Do While"或者一些类似的循环代码,以及额外的" For"和"下一步"编码

更新:以下是我尝试使用代码执行操作的分步图: step-by-step process results image

2 个答案:

答案 0 :(得分:0)

以下是解决方案代码:

Sub IterationMacro()

'声明变量

Dim h, i, j, k As Integer
Dim mySheet As Worksheet
Dim myAnswer As String

'设置工作表

Set mySheet = ActiveSheet

'设置迭代次数

h = Range("B2").Value

'清除上一个内容

Range("C4:D4").ClearContents
Range("e5:e11").ClearContents

'贯穿循环

For i = 5 To h + 4

    For j = 3 To 4
        mySheet.Cells(4, j).Value = mySheet.Cells(i, j).Value
    Next

'计算工作簿

    Calculate
    mySheet.Cells(i, 5).Value = mySheet.Cells(4, 5).Value
Next

End Sub

答案 1 :(得分:-1)

如果您可以绘制一张桌子或其他东西作为例子,它可能会有所帮助。

假设我低调你,你想在D1中使用一个公式,并填充到D7,导致每一行显示B + C = D:

Range("D1").Formula="=B1+C1" 
Range("D1:D7").Filldown

编辑:

获得示例图像后,看起来您希望数学发生在第2行(第1行中的标题)中。在第2行中,您想要从行“i”中提取值并在第2行中添加它们,然后在行“i”中粘贴该总和的答案。

Dim i as Integer 'i is the variable for the loop

For i = 3 to 9 'based on the picture, 3 to 9 are the 1 through 7 values

Cells(2,1).Value=Cells(i,1).Value 'pulls up Column A value from the loop to Row 2
Cells(2,2).Value=Cells(i,2).Value 'pulls up Column B value from the loop to Row 2
Cells(2,3).Formula="=A2+B2" 'Sums A2 and B2 into C2
Cells(2,3).Copy Cells(i,3) 'Copies the summed value to Row "i" in Column C

Next i 'Moves to next "i" in the loop

请告诉我这是否更符合您的观点。

编辑:

对于动态范围,您仍然知道自己的起点。你会看到类似的东西:

Dim i as Integer
Dim LR as Long
Dim LC as Long

LR=Cells(Rows.Count,"A").End(xlUp).Row
LC=Cells(1,Columns.Count).End(xlToLeft).Column

For i = 3 to LR 'Still starting at 3, because of the example

Cells(2,1).Value=Cells(i,1).Value 
Cells(2,2).Value=Cells(i,2).Value 
Cells(2,LC+1).Formula="=A2+B2" 'Note the LC+1 goes one row BEYOND the last column
Cells(2,3).Copy Cells(i,LC+1) 

Next i

在上一个示例中,您可以看到动态范围的语法。请注意,LR和LC是在循环外定义的,并且在子程序的持续时间内不会改变。