VBA中的求和函数

Posted

技术标签:

【中文标题】VBA中的求和函数【英文标题】:Sum function in VBA 【发布时间】:2012-07-27 07:37:17 【问题描述】:

我在 vba 中对单元格求和有问题。我需要使用 Cells(a,b):

Range("A1").function="=SUM(Range(Cells(2,1),Cells(3,2)))"

但它不起作用。

【问题讨论】:

“它不起作用”很可能不够具体,无法帮助您。你期望会发生什么?相反会发生什么?您收到错误消息吗?如果是,有什么错误信息? 【参考方案1】:

函数不是范围内的属性/方法。

如果您想对值求和,请使用以下命令:

Range("A1").Value = Application.Sum(Range(Cells(2, 1), Cells(3, 2)))

编辑:

如果你想要公式然后使用如下:

Range("A1").Formula = "=SUM(" & Range(Cells(2, 1), Cells(3, 2)).Address(False, False) & ")"

'The two false after Adress is to define the address as relative (A2:B3).
'If you omit the parenthesis clause or write True instead, you can set the address
'as absolute ($A$2:$B$3).

如果您总是要使用相同的范围地址,那么您可以像 Rory 建议的那样使用:

Range("A1").Formula ="=Sum(A2:B3)"

【讨论】:

感谢卡比伯拉赫!它有效,但我需要其他东西。科多是对的。我应该写我所期望的。我想在 Range("A1") 中有公式(不仅仅是结果),它对两个单元格求和。我的意思是,如果我改变 Cells(2,1) 中的值, Range("A1") 中的值也应该改变。在此先感谢,并为我的英语不好感到抱歉。 试试Range("A1").Formula = "=Sum(A2,B3)" 你必须使用单元格位置的名称(A2)而不是使用Cells(2,1) vba函数。 最适合我的函数是 Excel.WorksheetFunction.Sum()【参考方案2】:

将函数value放入单元格

根据我的经验,Application.Sum 通常不能很好地工作(或者至少 VBA 开发人员环境不喜欢它,无论出于何种原因)。

最适合我的函数是Excel.WorksheetFunction.Sum()

例子:

Dim Report As Worksheet 'Set up your new worksheet variable.
Set Report = Excel.ActiveSheet 'Assign the active sheet to the variable.

Report.Cells(11, 1).Value = Excel.WorksheetFunction.Sum(Report.Range("A1:A10")) 'Add the function result.

将函数直接放入单元格中

我认为您正在寻找的另一种方法是将函数直接放入单元格中。这可以通过将函数字符串输入到单元格值中来完成。这是一个提供与上面相同结果的示例,除了单元格值是函数而不是函数的结果:

    Dim Report As Worksheet 'Set up your new worksheet variable.
    Set Report = Excel.ActiveSheet 'Assign the active sheet to the variable.

    Report.Cells(11, 1).Value = "=Sum(A1:A10)" 'Add the function.

【讨论】:

关于第二点:如果您想知道为什么您的公式在正确的单元格中,但没有从零开始更改并且没有抛出任何错误,您可能不小心将公式单元格包含在输入中单元格(逐个错误很难......)【参考方案3】:
Range("A1").Function="=SUM(Range(Cells(2,1),Cells(3,2)))"

无法工作,因为工作表函数(实际用于工作表时)不理解 RangeCell

试试

Range("A1").Formula="=SUM(" & Range(Cells(2,1),Cells(3,2)).Address(False,False) & ")"

【讨论】:

谢谢你!我在 Address() 中删除了 False, False 并且它有效!现在我可以完成我的申请了。来自华沙的问候,Bartek 嗨蒂姆,您使用的是.function 还是您的意思是.WorksheetFunction 哈 - 应该是.Formula。这来自于不看就复制 OP。会更正。谢谢。 @TimWilliams 谢谢你,你是我的英雄!!我花了整个下午来寻找一个通用的解决方案,所以我可以在 for 循环中使用,你的回答帮助我找到它 'rowRange.Cells(LastRow+1, j) = "=SUM(" & Range(Cells(i, j), Cells(LastRow, j)).Address(False, False) & ")"'【参考方案4】:
Range("A10") = WorksheetFunction.Sum(Worksheets("Sheet1").Range("A1", "A9"))

在哪里

Range("A10") 是答案单元格

Range("A1", "A9") 是要计算的范围

【讨论】:

以上是关于VBA中的求和函数的主要内容,如果未能解决你的问题,请参考以下文章

VBA研究VBA中如何用求和函数SUM求和

VBA 在命名范围上尝试求和函数时出现运行时错误

如何使用 VBA 在 Excel 中求和/合并相似的行?

[求助] excel VBA多条件求和代码优化

如何用vba将文本数字改为数值?

对数组元素求和