帮帮忙吧!
我正在尝试提出一个非常简短的公式来计算多张工作表中的多个数据。
我有一本工作簿,其中汇编了从几个人那里收到的错误报告。他们发送的错误报告是他们从 22 种不同的材料中看到的。我想按月份对错误报告进行分组,从 2014 年 12 月到 2015 年 12 月。
在每张表中,我创建了一个名为“状态”的单独列,以指示所报告的每个错误是否已“上传”、“处于“待命”状态”、“已“发送给翻译”等。在单独的表中,我在第一行列出了所有 22 种材料的名称,然后在第一列列出了每周的日期。
基本上,我希望发生的事情是计算特定材料下的错误 从 2014 年 12 月至 2015 年 12 月当且仅当错误属于特定“状态”和错误是在特定时间范围内发送的(每周日期,例如 2 月 23 日至 3 月 1 日)。
到目前为止,我正在使用这个非常长的公式:
=COUNTIFS('2014 年 12 月'!$A:$A,">="&$A15,'2014 年 12 月'!$A:$A,"<="&$B15,'2014 年 12 月'!$J:$J,"已应用",'2014 年 12 月2014'!$G:$G,"="&C$1)+COUNTIFS(一月!$A:$A,">="&$A15,一月!$A:$A,"<="&$B15,一月!$J:$J,"已应用",一月!$G:$G,"="&C$1)+COUNTIFS(二月!$A:$A,">="&$A15,二月!$A:$A,"<="&$B15,二月!$J:$J,"已应用",二月!$G:$G,"="&C$1)+COUNTIFS(三月!$A:$A,">="&$A15,三月!$A:$A,"<="&$B15,三月!$J:$J,"已应用",三月!$G:$G,"="&C$1)+COUNTIFS('十二月2014'!$A:$A,">="&$A15,'2014 年 12 月'!$A:$A,"<="&$B15,'2014 年 12 月'!$J:$J,"已发送给译者",'2014 年 12 月'!$G:$G,"="&C$1)+COUNTIFS(一月!$A:$A,">="&$A15,一月!$A:$A,"<="&$B15,一月!$J:$J,"已发送给译者",一月!$G:$G,"="&C$1)+COUNTIFS(二月!$A:$A,">="&$A15,二月!$A:$A,"<="&$B15,二月!$J:$J,"已发送给译者",译者",二月!$G:$G,"="&C$1)+COUNTIFS(三月!$A:$A,">="&$A15,三月!$A:$A,"<="&$B15,三月!$J:$J,"已发送给译者",三月!$G:$G,"="&C$1)+COUNTIFS('2014 年 12 月'!$A:$A,">="&$A15,'2014 年 12 月'!$A:$A,"<="&$B15,'2014 年 12 月'!$J:$J,"等待上传",'2014 年 12 月'!$G:$G,"="&C$1)+COUNTIFS(一月!$A:$A,">="&$A15,一月!$A:$A,"<="&$B15,一月!$J:$J,"等待上传上传",一月!$G:$G,"="&C$1)+COUNTIFS(二月!$A:$A,">="&$A15,二月!$A:$A,"<="&$B15,二月!$J:$J,"等待上传",二月!$G:$G,"="&C$1)+COUNTIFS(三月!$A:$A,">="&$A15,三月!$A:$A,"<="&$B15,三月!$J:$J,"等待上传",三月!$G:$G,"="&C$1)+COUNTIFS('2014 年 12 月'!$A:$A,">="&$A15,'2014 年 12 月'!$A:$A,"<="&$B15,'2014 年 12 月'!$J:$J,"已上传",'十二月2014'!$G:$G,"="&C$1)+COUNTIFS(一月!$A:$A,">="&$A15,一月!$A:$A,"<="&$B15,一月!$J:$J,"已上传",一月!$G:$G,"="&C$1)+COUNTIFS(二月!$A:$A,">="&$A15,二月!$A:$A,"<="&$B15,二月!$J:$J,"已上传",二月!$G:$G,"="&C$1)+COUNTIFS(三月!$A:$A,">="&$A15,三月!$A:$A,"<="&$B15,三月!$J:$J,"已上传",三月!$G:$G,"="&C$1)+COUNTIFS('2014 年 12 月'!$A:$A,">="&$A15,'2014 年 12 月'!$A:$A,"<="&$B15,'2014 年 12 月'!$J:$J,"音频",'2014 年 12 月2014'!$G:$G,"="&C$1)+COUNTIFS(一月!$A:$A,">="&$A15,一月!$A:$A,"<="&$B15,一月!$J:$J,"音频",一月!$G:$G,"="&C$1)+COUNTIFS(二月!$A:$A,">="&$A15,二月!$A:$A,"<="&$B15,二月!$J:$J,"音频",二月!$G:$G,"="&C$1)+COUNTIFS(三月!$A:$A,">="&$A15,三月!$A:$A,"<="&$B15,三月!$J:$J,"音频",三月!$G:$G,"="&C$1)+COUNTIFS('十二月2014'!$A:$A,">="&$A15,'2014 年 12 月'!$A:$A,"<="&$B15,'2014 年 12 月'!$J:$J,"待机",'2014 年 12 月2014'!$G:$G,"="&C$1)+COUNTIFS(一月!$A:$A,">="&$A15,一月!$A:$A,"<="&$B15,一月!$J:$J,"待机",一月!$G:$G,"="&C$1)+COUNTIFS(二月!$A:$A,">="&$A15,二月!$A:$A,"<="&$B15,二月!$J:$J,"待机",二月!$G:$G,"="&C$1)+COUNTIFS(三月!$A:$A,">="&$A15,三月!$A:$A,"<="&$B15,三月!$J:$J,"待机",三月!$G:$G,"="&C$1)
到目前为止,这只是从 2014 年 12 月到 2015 年 3 月。我无法想象一旦包括其他月份,它会有多长。
有什么方法可以使这个公式更短吗?
提前谢谢您!:)
答案1
我认为至少有两个可行的选择。根据您的情况,其中一个可能比另一个更合适。我会给你我能想到的两个选项,看看你是否可以从那里开始。
选项 1:Power Pivot
微软的Power Pivot可让您组合多个类似数据源并从中创建一个数据透视表。如果您将每个工作表添加为数据源,并将其添加到数据中,则可以根据您的条件进行数据透视和筛选。
选项 2:使用 INDIRECT
您可以使用INDIRECT
函数来应用您的条件。如果我理解正确的话,我会制作一个矩阵,纵轴包含月份(工作表名称),横轴包含状态(已应用、已发送、等待上传等)。接下来,您可以使用公式填充矩阵COUNTIF
,使用INDIRECT
函数引用不同的工作表并应用不同的状态。例如,如果 A2 中有“2014 年 12 月”,INDIRECT("'"&A2&"'!$A:$A")
则引用'December 2014'!$A:$A
。接下来,您只需水平和垂直添加值即可创建每个状态和每个月的小计。整个矩阵的总和就是您想要的结果。
编辑:
选项 2 解释:
根据 OP 的要求,下面对第二种选择进行更深入的解释。为了说明这一点,我将介绍 Anna、Ben 和 Charles,他们选修了三门课程。他们每门课程都会获得几个分数(从 1 到 10)。每个分数都计入一个特定的学期。课程的讲师希望比较第一学期每门课程中每个学生的足够分数(>5.5)。以下是不同的课程(每门课程都在单独的工作表中,称为“课程 1”、“课程 2”和“课程 3”)。
与您的问题类似,我们有几个标准(> 5.5,学期 = 1,计数多门课程以及多位学生)。矩阵内的左上角单元格(课程 1 x Anna,在我的工作表中位于 B5)包含以下公式:
=COUNTIFS(INDIRECT($A5&"!A:A");B$4;INDIRECT($A5&"!B:B");$C$2;INDIRECT($A5&"!C:C");$C$1)
单元格引用:
- A5 指向包含“课程1”的单元格
- B4 指向包含“Anna”的单元格
- C2 指向包含“1”的单元格(代表三个月)
- C1 指向包含“>5,5”(表示成绩)的单元格
您的问题的翻译如下:
- 课程 --> 月
- 学生姓名 --> 状态
- 剩下的就不重要了
基本上,诀窍是将工作表名称列成列表,并将其与函数结合使用INDIRECT
以引用不同的月份。如果您对不同的状态执行相同操作,则会得到一个矩阵。计算(使用COUNTIFS
)您要计数的值。矩阵中值的总计就是您要查找的总数(不同月份和不同状态的总和)。
换句话说:不要自己编写复杂的公式,而是尝试让 Excel 为您完成工作。