分享

工资条的制作

 江湖330 2020-09-12

打印工资条

现在,工资发放都是通过银行,但银行发放只是一个总数,没有明细。特别是在工资变动的时候,领收人需要知道工资发放的明细,这就需要打印工资条。由于发放表是由Excel制作的,下面介绍三种制作工资条的方法。

一、排序法

截取工资条的一部分内容说明:

制作工资时,每个人都要有 “工资项目”,所以第一行都要有,每个人的工资条之间需要加一个空行,以便裁剪。

(1)在工资表最后一列,为每个员工添加序号,其编号为0 2/3,1 2/3,2 2/3……(将其作为工资条的第二行),如图所示:

(2)复制第一行,粘贴到工资表的最后一行,然后向下复制n-1行(n为员工总数),将其序号编为0 1/3,1 1/3,2 1/3……(将其作为工资条的第一行),如图:

(3)给后面的空行排序n个,分别为1,2,3……(将其作为工资条的第一行),如图:

(4)以“序号”为“主要关键词”“升序”排序,如图:

(5)调整:将多余的行(第一行删除),将第一个空行的边框去掉。选择第一至三行行号,点格式刷,从第四行刷至工资条的最后一行,然后删除“序号”列,稍加调整,使其更加美观,如图:

几点补充:

1、有时需要在工资条中加上单位,月份等,做法类似。

2、本工资条需要三行,在排序时采用了分数的形式,目的是让其按照想要的顺序排序。也可以用整数序号,如:2,5,8……;1,4,7……;3,6,9……。

3、注意分数的写法“整数+空格+分数”,不然会自动转成日期格式。

二、公式法

还是前面的例子。人员的工资存在“工资表”中,我们新建一个“工资条”工作表表格,在“A1”单元格中输入“=INDEX(工资表!A:A,IF(MOD(ROW(),3)=1,1,0)+IF(MOD(ROW(),3)=2,(ROW()+1)/3+1,0)+IF(MOD(ROW(),3)=0,999,0))&""”,确定或回车,然后将光标放到A1单元格的右下角,当出现黑色的“十”字时,按住鼠标左键,向右拖动至“K”列,松开鼠标,把光标放到“K1”单元格右下方,当出现黑色的“十”字时,按住鼠标左键,向下拖动,直至生成所有人员的工资条时止。

这里用到几个函数,简单解析以下函数的用法和公式的含义。

1、行函数ROW([reference]):

参数可选,有参时返回指定单元格的行号,无参时返回当前对应单元格或区域的行号。

2、取余函数MOD(number,divisor):

number是被除数,divisor是除数,返回两数相除后的余数。

3、逻辑判断函数IF(条件或条件表达式,值1,值2):

常用函数之一。第一个参数(即条件)为TRUE或非零数值时,返回“值1”,否则返回“值2”。

4、INDEX函数

INDEX函数是重要的引用函数之一,通过指定相应的行列号,在一个单元格区域或数组中返回对应位置的元素值。常用的INDEX函数语法为:

数组形式:INDEX(array,row_num,[column num])

引用形式:INDEX(reference,row_num,[column_num],[area_num])

参数row_num,必需,指定数组中的某行。

参数column_num,可选,指定数组中的某列。

参数array,单元格区域或数组常量。如果array只有一行或一列,则可以只指定参数row_num,而省略参数column_num。如果将row_num或column_num设置为0,函数INDEX则分别返回array整列或整行的数组数值。

参数reference,对一个或多个单元格区域的引用。如果为引用输入一个不连续的区域,必须将其用括号括起来。

参数area_num,可选,选择reference中的一个区域。

我们这里是引用形式,引用的区域是“工资表”中的A列,表示的方法是“工资表!A:A”。

IF(MOD(ROW(),3)=1,1,0),如果余数等于1,说明当前位于第1、4、……行,此时让结果返回数字1(保证工资项目位于工资条的第一行),对于其他行返回数字0。

IF(MOD(ROW(),3)=2,(ROW()+1)/3+1,0),如果余数等于2,说明当前位于第2、5、……行(工资分项额度)。公式利用等差数列的规律,使用(ROW()+1)/3+1,将工资条中的2、5、……行的取值变成工资表中2、3、……行的值,其他行返回数字0。

IF(MOD(ROW(),3)=0,999,0),如果余数等于0,说明当前位于第3、6、……行(即工资条的空行),此时让结果返回数字999(一个足够大的数字,目的是返回一个空行,所以必须确定在999行没有任何数据),对于其他行返回数字0。

IF(MOD(ROW(),3)=1,1,0)+IF(MOD(ROW(),3)=2,(ROW()+1)/3+1,0)+IF(MOD(ROW(),3)=0,999,0), ROW()是当前确定的值,对3取余后也是唯一确定的值,要么是0,要么是1,要么是2,将此3个并列的IF相加,即得到需要引用的行号,并使用INDEX进行相应位置的引用。

5、连接运算符“&”:

连接两个字符串生成一个新的字符串。这里和一个空字符串连接,目的是屏蔽掉引用了空白单元格而得到无意义的数字0,保证表格的美观。

三、代码法

Excel的内置函数十分强大,可以解决大多数的问题,当用函数、公示过于复杂时,才考虑用VBA代码。

按“Alt+F11”组合键,启动Visual Basic编辑器,插入模块,命名为“gzt”,在“编辑框”内输入后面代码。完成后,选择工资表中的A1单元格,然后运行代码,工资表变化如图:

Sub gzt()

    Dim i As Long

    For i = 2 To Range("A1").CurrentRegion.Rows.Count - 1

        '在工资表的第3,4行插入行

        ActiveCell.Offset(2, 0).Rows("1:2").EntireRow.Select

        Selection.Insert shift:=xlDown,

 CopyOrigin:=xlFormatFromLeftOrAbove

        '复制工资表的第一行

        ActiveCell.Offset(-2, 0).Rows("1:1").EntireRow.Select

        Selection.Copy

        '将复制的内容粘贴到第四行

        ActiveCell.Offset(3, 0).Rows("1:1").EntireRow.Select

        ActiveSheet.Paste

        '选择第三行(空行),去掉下、上、左边缘边框

        ActiveCell.Offset(-1, 0).Range("A1:K1").Select

        Application.CutCopyMode = False

        Selection.Borders(xlDiagonalDown).LineStyle = xlNone

        Selection.Borders(xlDiagonalUp).LineStyle = xlNone

        Selection.Borders(xlEdgeLeft).LineStyle = xlNone

        '设置空行上部边框线性,颜色等

        With Selection.Borders(xlEdgeTop)

            .LineStyle = xlcontinous

            .ThemeColor = 5

            .TintAndShade = -0.5

            .Weight = xlThin

        End With

        '设置空行下部边框线性,颜色等

        With Selection.Borders(xlEdgeBottom)

            .LineStyle = xlcontinous

            .ThemeColor = 5

            .TintAndShade = -0.5

            .Weight = xlThin

        End With

        '去掉空行右边缘边框,和垂直方向和水平方向边框

        Selection.Borders(xlEdgeRight).LineStyle = xlNone

        Selection.Borders(xlInsideVertical).LineStyle = xlNone

        Selection.Borders(xlInsideHorizontal).LineStyle = xlNone

        '把A1单元格设置为活动单元格

        ActiveCell.Offset(1, 0).Range("A1").Select

    Next

End Sub

    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多