“小琪,接下来我来教你如何进行人数的汇总。这个公式比较复杂,我们先从简单的学起!”顾城笑着说。
当“部门”处选择某一具体部门时,公式制作方法:
Step1:“部门”处选择“人力部”,此时C5单元格需要统计1月人力部的人数,因此需要在C5单元格插入COUNTIF函数(如图 5150所示)。
图5-150Step2:由于需要统计1月份人力部的人数,所以在参数一Range中,需要首先选择1月工作表,然后再选中C列“成本中心”(如图 5151所示)。
图5-151Step3:在参数二Criteria中,则需要录入计数条件,即$C$2。此时完整的公式为:=COUNTIF('1月'!C:C,$C$2)(如图 5152所示)。
图5-152Step4:接下来,重复Step1-Step3的步骤,录入人力部2月份的人数统计公式:=COUNTIF('2月'!C:C,$C$2) (如图 5153所示)
图5-153“顾总,你这样制作公式岂不是每个单元格都要制作一个公式吗?没有通用的公式可以使用吗?”
“当然可以啦!不过在解决这个问题之前,我们先比较一下Step3、Step4中的公式。”
=COUNTIF('1月'!C:C,$C$2)
=COUNTIF('2月'!C:C,$C$2)
此时,可以发现两个公式中的区别仅仅在于需要在不同的工作表中取数,而数据所在的列是一致的,均为C列。这是因为工资表的列结构都是相同的,所以两个不同的工作表的数据汇总,变化的只是工作表的名称而已!我们就可以充分的利用这个规律,来设计我们的公式了。”
“小琪,我曾说过你的汇总表设计中的月份标签做得不错,是因为你设计的月份标签恰好与每个月工资表所在的工作表名称一致,均为‘1月’、‘2月’……,这就为我们下一步制作通用公式打下了基础。不过,在制作通用公式之前,你需要认识一个新的函数INDIRECT。”
INDIRECT函数详解(如图 5154所示):
一、作用:INDIRECT函数为查找与引用函数。此函数为返回文本字符串所指定的引用,即单元格的间接引用。该引用所指向的单元格中存放有对另一单元格的引用,引用的形式有两种,分别为A1、R1C1。
二、此函数共两个参数。
参数一:Ref_text,指单元格引用的字符串
参数二:A1,指引用的样式。通常我们的工作表都是A1结构,即列标为字母,行标为数字。我们表格左上角的第一个单元格表示为:A1单元格,这也是我们一直在用的工作表的样式。还有一种样式是R1C1样式,其中R表示行,C表示列,R1C1表示第一行,第一列,也就指我们常说的A1单元格。只要使用的是A1样式的表格,第二个参数就为TRUE或省略。如果是R1CT样式,第二个参数就要写FALSE。在实现工作中,通常大家都用A1样式的表格,所以此参数忽略即可。
图5-154为了便于理解这个函数,顾城由易到难,给小琪讲了这样几个案例:
案例1:A1单元格有一个数字:100,如果我们希望B1单元格等于A1单元格,应该如何处理呢?(如图 5155所示)
图5-155“当然是在B1单元格录入‘=A1’啦!”小琪抢着说(如图 5156所示)。
图5-156“没错,这就是直接引用!你直接引用了A1单元格。还有一种方法,就是间接引用!”顾城接着说,“比如,我在A2单元格录入一个字符串‘A1’,然后在B1单元格录入一个公式:=INDIRECT(A2),这时B1单元格返回的仍是A1单元格的数据‘100’。效果跟录入‘=A1’是一样的。” (如图 5157所示)
图5-157“简单说,就是INDIRECT函数引用了A2单元格中的内容“A1”,而这个“A1”就像一个指针一样,将需要引用的内容指向了A1单元格,此时INDIRECT函数就通过A2单元格中的内容,间接的引用了A1单元格中的内容。”
案例2:在工作薄中,工作表——表1和表2里面是一些杂乱无章的数字,如何快速把表1和表2中对应的单元格的数字填到sheet1工作表,数值这一列中呢?
图5-158如图 5158所示,B列的表格名称与工作表的名称一致。同时,C列的单元格名称即表示了单元格的位置,此时就完全可以利用INDIRECT函数的间接引用功能来实现数字的快速查找。
为方便理解,首先制作一个直接引用的公式:=表1!A1,在此公式中“表1”为工作表的名称,即B3单元格中的内容。“A1”为单元格的位置,即C3单元格中的内容。两个内容中间用“!”连接。(如图 5159所示)
图5-159接下来,我们就可以利用B3以及C3单元格的内容制作一个指针式的字符串,然后再利用INDIRECT函数使其直接指向实际需要引用的单元格。(如图 5160所示)
图5-160完整公式为:=INDIRECT(B3&"!"&C3),随后将公式向下拖动,即可自动查找出不同工作表,不同单元格中对应的数字。(如图 5161所示)
图5-161
图5-162小琪特意打开表1,核对了一下,果然丝毫不差。如图 5162所示。
“小琪,接下来,我再给你讲一下INDIRECT函数的引用规则,“顾城说道。
一、 引用当前工作表的某个单元格可以直接录入单元格地址
二、 引用当前工作薄其它工作表的单元格需要录入:工作表名称!单元格地址
三、 引用当前工作薄其它工作表的单元格而且工作表的名称第一个字是数字的时候,比如工资表,科目余额表,每月一份,我们通常用月份命名,1月,2月……:那么就需要用一对单引号把工作表名称括起来:‘1月’!单元格地址”
刚才第一个案例是引用当前工作表的单元格,所以直接录入单元格地址就可以了;第二个案例是引用当前工作薄其它工作表的单元格,所以我们的引用规则就是:工作表名称!单元格地址。
我们以第二个案例中的D3单元格为例,如果是直接引用的话,我们需要录入:=表1!A2。这样做的问题就是,每个单元格都需要进行引用,也就是我们需要逐个单元格做连接。但在我们明白了引用规则之后,不难发现:在我们的表格中B3单元格中的字符是工作表的名称“表1”,C3单元格中的字符是工作表中单元格的地址“A2”。这时我们就可以利用这两个单元格建立一个字符串,让这个字符串符合引用规则,即在B3单元格(工作表名称)与C3单元格(单元格地址)之间,通过文本连接的方式,用文本连接符“&”连接上一个“!”,由于“!”是文本,所以需要用半角引号。这样我们构建的字符串就变成了:B3&"!"&C3,也就是“表1!A2”的形式,这时 我们就可以利用INDIRECT函数将“表1!A2”这个字符串变成一个真正的引用,就像一个指针,指向了我们要返回数据所在工作表的单元格。而INDIRECT 函数的作用就是返回这个指针所指向的单元格内的数据。
这样,就可以通过INDIRECT函数,实现了不同工作表中单元格的自动查找。当然,这也需要充分利用汇总表的结构特点,构建了一个可以起到指针做用的字符串,然后又利用INDIRECT函数将这个字符串变成了真正的单元格引用。”
“噢,顾总,我这下明白为什么你说我的月份标题做的好了,因为我的月份标签正好就是每个月的工资表的名称,这样就可以利用表格来构建指针式的字符串,对吗?”
“说得太对了!”
城哥说:
汇总表设计时,行标题或列标题中必须有一个与明细工作表的文件名一致,以便于在构建指针字符串时,利用标题指向要引用的工作表。
“小琪,明白了INDIRECT函数,接下来我们就可以制作一个通用的人数统计公式了!”
小伙伴们,你们明白INDIRECT函数的用法了吗?欢迎留言跟小编讨论互动哟!
如果觉得不过瘾,告诉大家一个好消息:顾城与小琪的故事即将在中国铁道出版社出版,书名为《HR精英都是Excel控:人力资源量化管理和数据分析(职场进阶版)》,很快大家就可以在书店里看到顾城与小琪啦!