案例13 设计工资条(MOD)
⊙ 源文件:CDROM\02\2.7\案例13.xls
利用工资明细表生成工资条,方便裁剪并发放给所有员工。假设工作表中有以下工资明细数据,如图2-20所示。
图2-20 工资明细表
进入“单行表头工资条”工作表,在B1单元格中输入以下公式:
=IF(MOD(ROW(),3)=1,单行表头工资明细!A$1,IF(MOD(ROW(),3)
=2,OFFSET(单行表头工资明细!A$1,ROW()/3+1,0),""))
将公式向右填充至单元格J1后,选择B1:J1区域,将公式向下填充至第3行。
再将第1、2行的数据区域添加边框,最后选择B1:J3区域,向下填充到第33行。最后的效果如图2-21所示。
图2-21 单行标题工资条
公式说明
本例公式中巧妙运用了MOD函数取行号与3的余数来实现动态取数。用IF函数判断MOD函数的结果来进行取值。当MOD函数取余数为1时,就引用工资明细表中第一行的标题,如果余数为2,则分别取各行的工资明细,如果余数为0则取空白。在本例中,MOD函数至关重要。
案例提示
1.本例中引用工资明细数据时必须使用混合引用“A$1”,在填充公式时,才能正确的引用数据。
2.在填充公式时,不能从选择第1行公式向下填充,这将造成不符合需求的表格边框。本例中将前2行添加边框,然后选择前3行再向下填充,这满足了所有工资条都有边框,而间隔行没有边框的需求。
3.在本案例中,工资条的表头只有 1 行,这使公式也有了局限性,部分企业的工资条表头有2行。下面再对2行工资条表头地制作思路进行讲解。
假设有以下工资明细表,如图2-22所示。
图2-22 双行工资明细
将以上工资明细表生成工资条,步骤如下。
进入“双行表头工资条”工作表,,在单元格B1中输入以下公式:
=CHOOSE(MOD(ROW(),4)+1,"",双行表头工资明细!A$1,双行表头工资明细!A$2,OFFSET(双行表头工资明细!A$1,ROW()/4+2,))
选择单元格B1,将公式向右填充至单元格J1,再选择B1:J1区域,将公式向下填充至每4行。
对前2行按图2-23的方式设置边框。
图2-23 设置单元格边框
最后选择B1:J4区域向下填充到第48行,即完成双行工资条的制作。最后的效果如图2-24所示。
图2-24 双行工资条
公式说明
双行工资条表头设计仍然借助了 MOD 函数判断行号余数来产生动态引用数据。在填充公式时,表达式“MOD(ROW(),4)+1”将生成一个循环的序列,这使公式在不同行将引用不同的数据。
案例提示
1.图2-24中部分单元格有合并单元格的显示效果,但是操作时不能真的将单元格合并,否则会丢失部分数据。本例中采用的“跨列居中”功能来完成。
2.填充公式时需要选择前4行的数据,再向下填充,否则单元格边框会产生混乱。