■原虹(广州工商学院)
目前,利用Excel 制作工资条比较常用的有两种方法——排序法以及在IF 函数的基础上嵌套MOD 函数法。但是在教学过程中,笔者发现大多数学生对MOD 函数的理解还比较吃力,于是在此两种比较常见的方法下,本文还介绍了第三种方法——VLOOKUP 函数法,这种方法相对IF 函数嵌套MOD 函数法来说更为简单,更易被学生理解掌握。*
基于下面“工资表”工作表中的数据,我们来阐述以下三种运用Excel 制作工资条的方法。
图1 工资表
排序法,其主要原理是利用Excel 工作表中的排序功能,先将现有的公司员工工资表数据进行分隔,从而在每个员工的工资明细信息行之间建立空白行,紧接着运用Excel 工作表中的定位功能,将工资表中的标题行插入至公司每个员工的工资明细行上方,具体操作如下:
第一,从M3 单元格开始依次对公司员工进行编号,即M3-M5分别是1、2、3。第二,将第一步中编好的序号进行复制,并从M6单元格开始粘贴,达到M3-M8 单元格的内容依次是1、2、3、1、2、3 的效果,若希望完成的每个员工工资条之间也有一段空白行的话,可继续在M9 单元格重复粘贴一遍序号,即M3-M11 单元格的内容依次是1、2、3、1、2、3、1、2、3。第三,选中M2 单元格,然后点击数据——升序,这样刚刚编辑好序号的M3-M11 单元格就会变成1、1、1、2、2、2、3、3、3,从而成功将每一个员工的数据行分隔开(也可选择降序,只要达到分隔每一个员工工资数据行的目的即可)。第四,选中B1:L2 区域(之所以要将第一行空白行也选中,是因为想要达到每个员工的工资条之间也有空白行的效果),对选中的内容进行复制。第五,这一步非常关键,不要急着找单元格粘贴内容,而是选中B3:L9 区域,按F5 或Ctrl+G,调出Excel 定位功能,点击定位条件,勾选“空值”,这样B3:L9 区域内的所有空白单元格就都被选中,然后在B4 单元格点击粘贴,就可为每一个员工的工资条明细行上方添加标题行。最后,将制作好的每个员工工资条进行添加边框,修改字号、字体等格式设置。在教学过程中笔者发现,排序法是最容易被学生理解并掌握的方法。
函数法1 中运用到5 种函数,首先介绍其中两种主要的函数的语法格式,即:
IF(logical_test, value_if_true, value_if_false)
IF 函数可以对logical_test 中提出的数值或者公式进行条件检测,若条件成立,则返回value_if_true 对应的值,相反,若logical_test 为false,则返回value_if_false 对应的值。
MOD(number, divisor)
MOD 函数作为一个求余函数,其语法格式中的number 为被除数,divisor 为除数,该函数嵌套在IF 函数内,可以起到方法一中定位目标单元格的作用。
此外,函数法1 里面还涉及到另外两个简单的取行号或列号的函数,即ROW(reference)和COLUMN(reference),reference 即需要取其行号或者列号的单元格或单元格区域。
最后该方法中还会运用到INDEX 函数,用于返回单元格中的具体数值,其语法格式为:
INDEX(reference,row_num,column_num,area_num)
在上述五种函数的结合下,函数法1 首先需要新建“工资条”工作表,并在“工资条”工作表A1 单元格录入以下公式: =IF(MO D(ROW(),3)=0,””,IF(MOD(ROW(),3)=1,工资表!B$2,INDEX(工资表!$B:$L,INT((ROW()+8)/3),COLUMN())))
结合上述5 种函数的介绍,该公式的意思是如果行号可以被3整除,则该行为空白行,若被3 除余1,则该行为标题行,若被3除余2,则该行为具体的员工工资明细数据行,即具体的员工编号、姓名、实发工资等数据。
然后,拖动A1 单元格右下方的填充柄至K1 单元格。
最后,选中A1:K1 区域,然后向下填充,直至所有员工的工资数据显示为止,同时将显示出来的每个员工工资条进行添加边框,修改字号、字体等格式设置。
函数法1 由于涉及到的函数较多,在教学过程中,对学生来说比较复杂难接受,于是笔者总结出了本文的第三种方法,依然是函数法,但是相对函数法1 中提到的函数,简单很多,同时也利于学生接受理解,实际操作过程中也更为简便,有利于提高工作效率。
函数法2 同样也是要运用函数,但是与函数法1 相比,函数法2 只涉及到一个主要的函数——VLOOKUP 函数,同时嵌入一个简单的返回列号的函数COLUMN 函数(前文介绍过)。
VLOOKUP 函数是一个垂直查找函数,且查找依据的数值必须位于查找区域的首列,其语法格式如下:
VLOOKUP(lookup_value, table_array, col_index_num,range_lookup)
其中,lookup_value 为要查找的值,该值在案例中可以设置为员工编号;table_array 为查找区域,在选择该区域的时候需要注意的是一定以lookup_value 为准,向右选择区域,因为VLOOKUP函数是用于在表格或数值组的首列查找指定的数值,所以lookup_value 所在列一定要作为table_array 的首列,在本案例中可以选中B3:L5 区域为table_array,该区域必须以B 列为起点,不能从整个工作表最左边的A 列开始;col_index_num 为table_array 中对应的列号,而非整个工作表的列号,例如案例中的“姓名”所在列,对于整个工作表来说是第3 列,但是对于前述以员工编号所在的B 列为起点选中的table_array 来说,“姓名”是这个小区域中的第2 列;range_lookup 为逻辑值,若此处录入0 或FALSE,即为精确匹配,若此处省略不录,或者录入1 或TRUE,即为近似匹配。
结合上述VLOOKUP 函数的介绍,在本案例工作表中,具体操作如下:首先,将工作表中的标题复制,选中B7单元格进行粘贴。其次,在B8 单元格录入第一个员工对应的员工编号A0001。接着,在C8(即标题行“姓名”单元格下方)录入公式:=VLOOKUP($B8,$B$3:$L$5,COLUMN(B3),0)即可查找到对应的姓名数据。然后,拖动C8 单元格右下方的填充柄至L8 单元格,这样编号A0001 员工的所有信息就被查找出来。最后,选中B7:L9 区域,拖动该区域右下方的填充柄,向下查找显示出所有员工的工资明细信息并加以格式设置。
这里需要提一下该公式中的col_index_num 没有简单的填入列号2,而是运用到了一个返回列号的COLUMN 函数,填入函数COLUMN(B3),虽然该函数运算结果依旧等于2,结果看似与直接填列号2 没有区别,但是这样做的目的是为了下个环节创造便利,若函数中的col_index_num 直接填入2 的话,那么后续D8:L8 区域就需要重新录入VLOOKUP 函数,对应函数中的col_index_num 需要手工修改,依次填入3、4、5......这样一定程度上加大了工作量,但是若在col_index_num 位置运用COLUMN 函数,则可以直接拖动C8 单元格右下方的填充柄L8 单元格,工作表会自动改变列号,而无需人工一个个修改列号。
函数法2 相比函数法1 更为简便,同时因为函数本身也比较简单,整个公式只涉及到两个简单函数,所以在教学过程中减轻了学生学习函数的负担和难度,更容易被学生理解接受。
以上就是笔者在教学过程中,针对利用Excel 制作工资条探讨的三种不同的方法,其中排序法和VLOOKUP 函数法更容易被学生接受运用。当然,Excel 功能的强大决定了还有其他很多方法来制作工资条,也相信科技的进步会推动这些软件更好的为我们的工作提供更优更便利的服务。