0

我有一个 Excel 工作簿,每天(不是所有连续的天)都在工作表上,看起来像 ExampleSheet1。所有工作表都包含一个空列表事件,每个事件都有一个唯一的 ID 和一个名称。如果事件发生,则会记录时间开始和结束时间,Excel 会计算事件的持续时间(以及其他时间)。

示例表 1

   ABCDEF
1 id 名称 日期 开始 结束 持续时间
2 100 富 10.07.2013 16:00 18:30 2,50
3 101 巴 10.07.2013 0,00
4 102 aaa 10.07.2013 12:00 3:30 15,50
5 103 早 10.07.2013 10:00 12:00 2,00
6 104 ccc 10.07.2013 9:00 11:00 2,00

我想自动计算概览,其中每个事件的持续时间按月汇总,如 ExampleSheet2 的 C、D 和 E 列。

示例表 2

   ABCDE        
共 1 个 id name 共 共 in
                   2013-07 2013-08 2013-09
2 100 富 12,00 34,00 ...
3 101 巴 32,00 12,50 ..
4 102 aaa 35,50 123,00
5 103 BB 3,00 5,00
6 104 立方厘米 8,00 4,50

SUMIF 不适用于多张工作表,所以我的第一个想法是从 ExampleSheet2 的 C、D 和 E 列的每一行中调用如下函数。但这会导致相当多的迭代,并且似乎是一个非常丑陋的解决方案。

函数计数器(targetID As Integer,targetDate As Integer)

    整数 i = 0
    对于工作簿中的每个工作表(
        对于每一行(
            如果列 1 == 目标 ID;然后
                如果月份(第 3 列)== 目标日期;然后
                    我 = 我 + 列 6
        )

    )
    返回我

由于我不熟悉 Excel 宏并且必须将这段代码谷歌并粘贴到一起,我想知道如何处理这个问题。谢谢。

4

1 回答 1

0

您不需要使用 VBA。您可以混合使用 SUMIF 和 INDIRECT 在多个工作表上实现 SUMIF。在以下示例中,我在 Sheet1 和 Sheet2 的 A 列中有我的虚拟 ID,在这些工作表的 B 列中有我的虚拟数据。在第三张表的 F 列中,我有我的表名,在 CI 列中添加了这个公式:

=SUM(SUMIF(INDIRECT($F$1:$F$2&"!"&"A1:A100"), A1, INDIRECT($F$1:$F$2&"!"&"B1:B100")))

现在这是一个数组公式,因此当您输入它时,您需要按 CTRL + SHIFT + ENTER 以使其作为数组进行计算,否则您将只能在第一页获得总和。

这个解决方案干净。其中唯一的“脏”部分是您需要在工作簿中的某处列出工作表名称以引用它们。如果您有很多工作表,您可以使用一个简单的宏来遍历所有工作表并输出它们的名称以形成列表。

最后,您需要注意每次都需要在列表中添加工作表名称并更新范围以确保获得公式中的所有内容。

编辑:不用说,您应该根据您的特定需求调整我的公式。我假设您知道如何使用 SUMIF 和 SUMIFS,因此既然您知道如何将其用于多个工作表,那么您应该可以毫无问题地执行此操作。

于 2013-05-08T11:11:39.173 回答