Excel VBA总和从多个表
我试图创build一个function,它可以为每个客户计算每日工作时间,从而得出每天工作总时间。 每个客户在单个工作簿中都有自己的工作表。
目前,我有一个函数来确定第一个客户端(工作簿中的第三个工作表)的工作表:
Function FirstSheet() Application.Volatile FirstSheet = Sheets(3).Name End Function
和一个find最后一张:
Function LastSheet() Application.Volatile LastSheet = Sheets(Sheets.Count).Name End Function
在和函数里面我有麻烦得到这些工作的部分。
=sum(FirstSheet():LastSheet()!A1
这基本上是我想要完成的。 我认为问题在于我不知道如何将它连接起来而不把它变成一个string,而且它没有意识到它是表单和单元格引用。
任何帮助将不胜感激。
所以,一个例子公式看起来像这样:
=SUM(Sheet2!A1:A5,Sheet3!A1:A5,Sheet4!A1:A5)
这将在所有表中总和Sheet2-Sheet4
, A1:A5
。
是否有一个原因,你需要编写的VBA代码来做到这一点?
你不能只把它作为一个公式input一次吗?
另外,如果你要编写VBA来生成一个公式,那么在VBA代码中完全求和可能更有意义。
如果没有,试试这个:
Sub GenerateTheFormula() Dim x, Formula Formula = "=SUM(" 'Formula begins with =SUM( For x = 3 To Sheets.Count Formula = Formula & Sheets(x).Name & "!A1," 'Add SheetName and Cell and Comma Next x Formula = Left(Formula, Len(Formula) - 1) & ")" 'Remove trailing comma and add parenthesis Range("B1").Formula = Formula 'Where do you want to put this formula? End Sub
结果:
函数返回string,而不是实际的工作表。 工作表不能很好地parsingstring。 因此,添加使用Evaluate函数的第三个函数:
Function MySum(rng As Range) MySum = Application.Caller.Parent.Evaluate("SUM(" & FirstSheet & ":" & LastSheet & "!" & rng.Address & ")") End Function
那么你可以简单地称之为: MySum(A1)
它使用已经创build的另外两个函数来创build一个可以作为公式进行评估的string。
我完全不明白你的问题,但据我所知,你有不同的客户端,其中包含supoose列1date和列2包含小时在该特定date明智小时和最后一张表,其中column1包含客户名称和第2列包含全部小时数
请尝试一下
Sub countHours() Dim last_Row As Integer Dim sum As Double sum = 0 'Because I know number of client For i = 1 To 2 'i shows client particular sheet last_Row = Range("A" & Rows.Count).End(xlUp).Row Sheets(i).Activate For j = 2 To last_Row 'In my Excel sheet column 1 contains dates and column 2 contains number of hours sum = sum + Cells(j, 2) 'MsgBox sum Next j 'Sheet 3 is my final sheet ThisWorkbook.Sheets(3).Cells(i + 1, 2).Value = sum sum = 0 Next i End Sub
快乐编码: