二.公式(一)
=IF(COUNTIF(工资数据源!$C$4:$C$31,辅助表!$E$3)>=ROW(A1),INDEX(工资数据源!$B$4:$B$31,SMALL(IF(工资数据源!$C$4:$C$31=辅助表!$E$3,ROW(工资数据源!$C$11:$C$31)-10,2^20),ROW(A1)),1),"")
公式解释:这个公式我就不多说了,因为和我们前二节课讲的差不多,关键我讲一下,怎样把它应用于数据有效性里面,现在已经用上面的公式得到不同部门人的名单,放在辅助表里了,选择你要设置有效性的区域==》数据选项卡==》数据工具组==》数据有效性==》设置==》序列==》输入公式
=OFFSET(辅助表!$E$4,0,0,10-COUNTIF(辅助表!$E$4:$E$13,""),1)
Offset函数是经过行偏移,列偏移之后得么一个新的引用,而第四个参数是行高,我们用了10-COUNTIF(辅助表!$E$4:$E$13,""),由于每一个部门人数不同,所以用10来减,当然如果你公式的人很多,我们在辅助表里就是只是选么这么一点单元格区域作为参数了。
三.公式(二)
=INDEX(工资数据源!A4:P31,MATCH(工资查询!G4,工资数据源!B4:B31,0),1)
公式解释:相信大家学到这个时候,这个公式小意思,我会,我也相信每一个同学都会,而这里佛山小老鼠老师也不做多的说明
四.公式(三)
=INDIRECT("Sheet1!B"&MATCH(工资查询!$G$4,Sheet1!$A$1:$A$16,0))
这公式要定义名称为照片,目的是为了让“名”字变化,相片也跟着变,因为indirect这个函数就是返回其参数的引用,而照片放Sheet1工作表的B列,然后我们怎样才能知道B列那一行呢?,这就由工资查询表里的名字决定,所以用了Match函数,MATCH(工资查询!$G$4,Sheet1!$A$1:$A$16,0)来解决indirect这个函数的行号。
五.自动生成工资条实例(如图 32)
(一 )公式(四)
=IF(AND(COUNTA(工资数据源!$3:$3)>=COLUMN(A1),COUNTA(工资数据源!$B$4:$B$31)*3>=ROW(A1)),IF(MOD(ROW(),3)=2,"",CHOOSE(IF(MOD(ROW(),3)=0,1,2),工资数据源!A$3,INDEX(工资数源!$A$4:$P$31,INT(ROW()/3),COLUMN(A1)))),"")
公式解释:这个公式的特点是向下向右填充公式自动生成工资条
知识点一:向下向右填充时不为空的单元格自动添加边框。
方法:选中你要设置的区域==>开始选项卡==>样式组==>条件格式==>只包下内容的单元格设置格式==>只满足以下条件的单元格设置==>无空值==>格式==>边框==>确定
知识点二:Choose函数,这个函数第一参数是索引号,第二,第三,第四,可以到一直到256个都是数据
知识点三:向下向右填充公式不能有多余的出现,用了这个公式=IF(AND(COUNTA(工资数据源!$3:$3)>=COLUMN(A1),COUNTA(工资数据源!$B$4:$B$31)*3>=ROW(A1)),"执行公式",""),用COUNTA(工资数据源!$3:$3)>=COLUMN(A1)统计“工资源数据”表里的用过的列数,用COUNTA(工资数据源!$B$4:$B$31) 统计“工资源数据”有数据的行数,为什么还要乘以3,因为一个人工资条要占三行,一行标题,一行数据,一行空行
知识点四:每一张工资条要隔一空行,用了公式IF(MOD(ROW(),3)=2,"","执行公式"),自动生成工资条是从第三行开始的,过二行就是第五行要为这空,再过二行就是第八行,再过二行就是11行,5除以3的余数为2,8除以3的余数也是2,11除以3的余数还是2,因此我们利用这一点,如果公式所在的行号除以3余数为2那一行,我们就不显示,这样就达到“每一张工资条要隔一空行”,当然是假空,不是真正的空。
知识点五:引用表头
方法:用了CHOOSE(IF(MOD(ROW(),3)=0,1,2),工资数据源!A$3,"第三参数"),因为我们自动生成工资条是从第三行开始的,也就是说3,6,9,12都是要放表头的那一行,用函数Mod取除之后,它们的余数都是0,IF(MOD(ROW(),3)=0,1,2),如果它的结果为0,那么就显示1,这样就到了Choose函数第一个参数为1,那么就显Choose函数的第二个参数:工资数据源!A$3,而且这个参数用了绝对行引用,因为右拉公式时要变,下拉公式不变。
知识点六:引用工资数据源表里具体数据,不包括表头
方法用了函数,INDEX(工资数据源!$A$4:$P$31,INT(ROW()/3),COLUMN(A1)),index函数的第一参数就是整个“工资条源数据”表里的数据区域,从具体名称开始,不要包括表头,第三参数也简单,用了COLUMN(A1),目的是右拉公式产生1,2,2,3……来作为index函数的第三参数,列数,我就不多说了,现在重点看第二参数,第二参数用了ROW()/3,因为公式是从第三开始,Row()下拉时产生3,4,5,6……,3除以3的商取整之后为1,4除以3的商取整之后还是1,5除以3的商取整之后还是1,6除以3的商取整之后还是2,7除以3的商取整之后还是2,8除以3的商取整之后还是2,上面我们讲到了5,8,11,优先是空行,3,6,9是优先显示表头,因为前面那两IF函数决定的,而4,7行正是我们要放第一个人和第二个人的具体数据。