使用vba在excel中设置总和公式

时间:2013-07-25 07:49:44

标签: excel excel-vba excel-2007 excel-formula vba

在excel宏上工作,我试图从上面的单元格中添加单元格值来计算总值。这就是我的数据Sample Excel Document

这里我想为每列添加上面的单元格值来计算总和。为了实现这一点,我写了一个宏如下。

For cl = 2 To 5    
    Worksheets(5).Cells(4, cl).Formula = "=SUM(B4:B6)"        
Next cl

这应该将公式设置为一行中的每个单元格直到5列。 但它在一行中的所有单元格上设置相同的公式,它应根据列进行更改。如何为相应的列设置每个单元格的总和公式?

6 个答案:

答案 0 :(得分:9)

不确定我是否完全理解您的代码。您似乎正在写入第4行,但您还希望从第4行到第6行求和。这将创建一个循环引用。

让我们假设公式被写入第3行。您将需要使用R1C1引用样式使单元格相对于当前单元格求和。

了解使用的参考资料的技巧是:

  • 获取新工作表,在单元格B3中输入=SUM(B4:B6)并复制到右侧。
  • 然后点击文件>选项>公式并选择 R1C1参考样式
  • 现在检查表格中的公式。您会看到:=SUM(R[1]C:R[3]C)

这是您在宏中所需要的。

For cl = 2 To 5    
    Worksheets(5).Cells(3, cl).FormulaR1C1 = "=SUM(R[1]C:R[3]C)"    
Next cl

答案 1 :(得分:1)

对于您的情况,您可以使用以下方法:

For cl = 2 To 5
    ColName = Left(Cells(1, cl).Address(0, 0), (Cells(1, cl).Column < 27) + 2)
    ValueSum = "=SUM(" & ColName & "4:" & ColName & "6)"
    Worksheets(5).Cells(4, cl).Formula = ValueSum
Next

答案 2 :(得分:0)

尝试这样的事情。

For cl = 2 To 5
    ColName = Left(Cells(1, cl).Address(False, False), 1 - (cl > 26))
    Worksheets(5).Cells(4, cl).Formula = "=SUM(" & ColName & "4:" & ColName & "6)"
Next cl

答案 3 :(得分:0)

公式中R1C1和R [1] C [1]样式的更多细节。 据我所知,R [1] C [1]创建一个相对引用,R1C1创建一个绝对引用。但请记住,R [x]和C [y]的数字是包含公式的单元格的偏移量。

这意味着如果你想在C5中显示A1:B4的总和,代码必须是这样的:

Worksheets(5).Cells(5, 3).FormulaR1C1 = "=SUM(R[-4]C[-2]:R[-1]C[-1])"   

如果你想要相同但最终得到一个绝对的参考是看起来像这样。

 Worksheets(5).Cells(5, 3).FormulaR1C1 = "=SUM(R1C1:R4C2)" 

答案 4 :(得分:0)

您可以使用如下所示的非常简单的公式:

fig = plt.figure()
ax = plt.axes()

ax.plot(y, 'o', color='black')
ax.plot(y_hat, 'o', color='blue')

plt.show()

接下来,只需按住并拖动单元格即可自动填充另一行。

答案 5 :(得分:0)

我认为您可以引用整个公式范围,而Excel将足够聪明地调整列。

无循环:

Worksheets(5).Cells(4,cl).resize(1,4).Formula =“ = SUM(B4:B6)”