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-Sheet4A1: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 

快乐编码: