Excel UDF 对变量工作表的范围求和
Posted
技术标签:
【中文标题】Excel UDF 对变量工作表的范围求和【英文标题】:Excel UDF to sum ranges on variable worksheets 【发布时间】:2016-08-31 18:37:31 【问题描述】:这是我在这里的第一篇文章,所以我会尽可能地清楚。
我已经决定将 UDF 作为正确的解决方案,但这主要是因为我无法弄清楚什么内置函数会起作用。
我的工作簿一开始有两张表:“摘要表”和“系统模板”。在摘要表上,我创建了一个系统列表,从该列表中,我有一些代码使用 System Template 生成新工作表并根据列表中的值命名工作表,这工作得很好。在汇总表上包含系统名称的单元格旁边的单元格中,我试图对各自工作表上每个不同系统的“Q:Q”范围内的值求和。唯一变化的范围是数据来自的工作表名称。这是我遇到麻烦的地方。我收到 #Value 错误,我不知道如何找出问题所在。通常我会使用内置的公式评估工具,但它对 UDF 有点没用。任何帮助将不胜感激。
Function FrictionSum(rngInput As Range)
Dim rngCell, rngDomain As Range
Dim strName As String
FrictionSum = 0
'FrictionSum = rngInput.Value
Set rngDomain = Sheets(strName).Range("Q:Q")
For Each rngCell In rngDomain
FrictionSum = FrictionSum + rngCell.Value
Next rngCell
End Function
【问题讨论】:
您正在定义Function
,但您没有返回任何内容,您可以只使用Sub
,或者您需要将其定义为Function FrictionSum(rngInput As Range) As Long
。此外,您正在传递 rngInput
,但您在 UDF 中没有对它做任何事情?
所以公式 =SUM(INDIRECT("'" & A1 & "'!Q:Q"))
其中 A1 是工作表名称不起作用?
另外你没有给strName赋值,Excel应该猜吗?
【参考方案1】:
如公式所述:
=SUM(INDIRECT("'" & A1 & "'!Q:Q"))
应该做你想做的。
工作表 Function Sum 无需重复即可完成您想要的操作。 还要确保将值分配给 strName。
代码:
Function FrictionSum(rngInput As Range) As Double
Dim rngDomain As Range
Dim strName As String
strName = rngInput.Value
Set rngDomain = Sheets(strName).Range("Q:Q")
FrictionSum = Application.WorksheetFunction.Sum(rngDomain)
End Function
【讨论】:
我最初尝试将 SUM 与 INDIRECT 结合使用,但由于某种原因,它对我不起作用(可能缺少报价)。现在可以了。在 UDF 中,我没有分配 strName 的唯一原因是我在进行故障排除。我将 FrictionSum 分配给 rngInput.Value,然后在它工作正常时将其注释掉,我只是没有重新分配 strName。至于不返回,为什么我的 For Each 循环中的 FrictionSum 不能作为返回值? 对不起,我错过了。它应该有。也许这只是级联,修复一个错误以创建另一个错误。但这应该更快。以上是关于Excel UDF 对变量工作表的范围求和的主要内容,如果未能解决你的问题,请参考以下文章