我有一张excel工作簿,每天都在工作表上(不是连续几天),看起来像是ExampleSheet1。所有工作表都包含一个空列表事件,每个事件都有唯一的ID和名称。如果事件发生,则记录时间开始和结束时间,Excel计算事件的持续时间(以及其他)。
ExampleSheet1 A B C D E F 1 id name date start end duration 2 100 foo 10.07.2013 16:00 18:30 2,50 3 101 bar 10.07.2013 0,00 4 102 aaa 10.07.2013 12:00 3:30 15,50 5 103 bb 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列。
ExampleSheet2 A B C D E 1 id name total in total in total in 2013-07 2013-08 2013-09 2 100 foo 12,00 34,00 ... 3 101 bar 32,00 12,50 .. 4 102 aaa 35,50 123,00 5 103 bb 3,00 5,00 6 104 ccc 8,00 4,50
SUMIF不适用于多个工作表,所以我首先想到的是从ExampleSheet2的C,D和E列的每一行调用类似下面的函数。但这会导致相当多的迭代,似乎是一个非常难看的解决方案。
function counter(targetID As Integer, targetDate As Integer) Integer i = 0 for each worksheet in workbook( for each row( if column1 == targetID; then if month(column3) == targetDate; then i = i + column6 ) ) return i
由于我不熟悉Excel宏并且必须将Google和这些代码粘贴在一起,因此我会提示如何处理这个问题。感谢。
答案 0 :(得分:0)
您不需要使用VBA。您可以使用SUMIF和INDIRECT的混合来在多个工作表上实现SUMIF。在下面的例子中,我在Sheet1和Sheet2的A列中有我的虚拟ID,在这些表的B列上有我的虚拟数据。在第三张纸的F栏中,我有我的纸张名称,在C栏中我添加了这个公式:
=SUM(SUMIF(INDIRECT($F$1:$F$2&"!"&"A1:A100"), A1, INDIRECT($F$1:$F$2&"!"&"B1:B100")))
现在这是一个数组公式,所以当你输入它时你想要按CTRL + SHIFT + ENTER来计算它作为一个数组,否则你将只得到第一页上的总和。
此解决方案很多 *多*更清洁。它唯一的“脏”部分是您需要在工作簿中的某个位置列出工作表名称以引用它们。如果您有很多工作表,可以使用一个简单的宏来遍历所有工作表并输出它们的名称以形成列表。
最后,您需要注意每次都需要在列表中添加工作表名称并更新范围以确保公式中包含所有内容。
编辑:不言而喻,您应该根据您的具体需求调整我的公式。我假设你知道如何使用SUMIF和SUMIFS,所以你现在应该知道如何使它适用于多个工作表。