【问题标题】:Sum across dynamic number of sheets对动态张数求和
【发布时间】:2015-12-17 20:37:12
【问题描述】:

我有一个宏,可以创建一个包含多个按日期命名的工作表的工作簿,例如2015 年 12 月 1 日,2015 年 12 月 2 日。数据手动输入到这些工作表中。最后一个工作表名称是“TOTAL”。每个月工作表的数量和名称都会有所不同。我正在尝试编写一段代码,它将所有工作表中的数据汇总到位于名为“Total”的工作表中的单元格中。我的想法是通过循环来做到这一点,但尽管宏运行时没有显示错误消息,但它不起作用。 宏完成运行后应该出现在“Total”工作表的“B2”中的公式不存在,所以我的假设是求和仅在宏执行期间有效。我不确定如何将“sum”公式输入“Total”工作表的“B2”单元格。我真的很感激任何可以为我指明正确方向的提示。下面有一段代码不起作用:

Sub Test()

Dim i as Long

For i = 1 To Worksheets.Count - 1

             Worksheets("TOTAL").Range("B2").Formula = Application.WorksheetFunction.Sum(Worksheets(i).Range("B2"))

       Next i

       Worksheets(i).Range("B2").Value = Worksheets("TOTAL").Range("B2").Value

End Sub

【问题讨论】:

  • 您想要单元格中的公式还是只需要总值?
  • 如果你想要总值然后把这个Worksheets("TOTAL").Range("B2").Formula = Application.WorksheetFunction.Sum(Worksheets(i).Range("B2"))改成这个:Worksheets("TOTAL").Range("B2").Value = Worksheets("TOTAL").Range("B2").Value + Worksheets(i).Range("B2").value
  • 请仅使用公式。

标签: excel vba loops


【解决方案1】:

您可以定义一个自定义的用户定义函数 (UDF),当在单元格中输入该函数时,该函数会汇总同一工作簿中所有其他工作表中的相应单元格。让我们称之为AutoSum

Function AutoSum() As Variant
    AutoSum = 0
    For Each ws In Worksheets
        If Not ws Is Application.ThisCell.Parent Then AutoSum = AutoSum + ws.Range(Application.ThisCell.Address)
    Next
End Function

然后您可以在任何单元格的公式中简单地使用它:=AutoSum()

【讨论】:

  • 谢谢你,A.S.H.我尝试使用它,但我做错了什么。我将此函数保存在同一个工作簿的一个单独模块中,我保存我的代码,然后我尝试通过以下代码行在我的过程中调用它:
  • 工作表("TOTAL").Range("B2").Value = AutoSum
  • @Trix,不,您只需在工作表“总计”的单元格 B2 中输入公式 =AutoSum()。或来自 VBA,Worksheets("TOTAL").Range("B2").Formula = "=AutoSum()".
  • 你确定你输入了公式=AutoSum()吗? (不要忘记括号),并且所有涉及的单元格都包含数值?因为好的,如果这些单元格中有非数字字符串,你会得到#Value,但这是正常的。
【解决方案2】:

试试这个;

Sub Test()

Dim i As Long
Dim t As String


For i = 1 To Worksheets.Count - 1
    If i = 1 Then
        t = "=Sum('" & Worksheets(i).Name & "'!B2"
    Else
        t = t & ",'" & Worksheets(i).Name & "'!B2"
    End If
Next i

Worksheets("TOTAL").Range("B2").Formula = t & ")"

End Sub

它在循环时构建公式,然后将公式分配给单元格。

【讨论】:

  • 谢谢你,斯科特。当我尝试运行此代码时,出现运行时错误“13”。您知道问题可能出在哪里吗?
  • @trix 使用 ASH 的代码,只需将您想要的总数放入工作表中的实际单元格总数 =autosum 就像任何其他公式一样。如果你想使用它,当它停止时t 的值是多少?
  • @Trix 对不起,我有一个我应该去的地方。见编辑。
  • 感谢您接受这一点,斯科特。我会在一分钟内尝试。当我直接在单元格中输入 ASH 的函数时,出现错误:#NAME?
  • 谢谢。您的代码似乎正在运行。我唯一遇到的问题是它何时停止运行。当您要保存新文件时,我得到一个非常类似于弹出窗口的弹出窗口,但它的标题是:“更新值:2015”。当我关闭它并转到公式应该所在的单元格时,我可以看到公式但也出现错误“#REF”
猜你喜欢
  • 2022-01-08
  • 2012-12-20
  • 2017-12-01
  • 2016-04-03
  • 2022-01-27
  • 2021-12-27
  • 2020-08-23
  • 2019-11-21
  • 1970-01-01
相关资源
最近更新 更多