用EXCEL表做的工资表,有没有巧妙的方法转成工资条

来源:百度知道 编辑:UC知道 时间:2024/06/05 01:51:17
我在网上看到一个用EXCEL表巧转工资条的方法,实际操作了一下不可用,(用宏的方法),不知道各位前辈有没有好方法。

1 用EXECL的函数
  我们知道工资条有两行,第一行表示项目(也就图1中的标题行),第二行表示各项明细,但是实际上, 为了裁剪方便,两个工资条之间有一空行,所以工资条中就有第一行为标题,第二行为明细,第三行为空白,也就是说这一行的行号除3余数来决定每一行的内容。
  我们新建一个工作表,这里要用到几个函数:IF、MOD、INT、INDEX,前几个函数比较好理解,也许你用过,介绍一个INDEX,它返回表格或区域中的数值或对数值的引用。它有两种形式:数组和引用。数组形式通常返回数值或数值数组;引用形式通常返回引用。我们这里用到引用,所以介绍人一下其函数参数INDEX(reference,row_num,column_num,area_num),Reference为对一个或多个单元格区域的引用。我们这里为工资汇总表 ,Row_num为引用中某行的行序号,函数从该行返回一个引用,Column_num为引用中某列的列序号,函数从该列返回一个引用,需注意的是Row_num、column_num 和 area_num 必须指向 reference 中的单元格;否则,函数 INDEX 返回错误值 #REF!。
  由于工资条的第一、三行(这里是指行号被3除后的余数)引用是不变的,而第二行的值要发生变化,这样才能打出每一个人的工资条,仔细观察,你会发现工资条第2行对应于工资汇总第2行,工资条第5行对应于工资汇总第3行,工资条第8行对应于工资汇总第4行,可以通过现在行号来得到引用行号int((row()+4)/3)
  根据以上分析,可以在工资条工作表的A1中输入下列公式=IF(MOD(ROW(),3)=0," ",IF(MOD(ROW(),3)=1,工资汇总!$A$1,INDEX(工资汇总!$A:$L,INT((ROW()+4)/3),COLUMN()))),注意这里对表格单元格的引用是绝对引用,选中A1向下拉出第一列,向右拉出第一行,在向右拉出的第一行上,必须更改“工资汇总!$A$1”的引用,分别改成与所在行对应的列数,比如C列改成工资汇总!$C$1;这里如果你想不让某一栏数据显示,只要设置不出现这一列的列标,然后再分别向下拉出每一列的数据。再设置边框格式,就得到如图2所示的工资条。
  在EXECL中