第一步:把这个工资表复制到一个新的工作薄中(光复制有人员名字的那些,表头不复制),然后在新的工作薄的头一列前新加一列,头三行分别输入2,5,8,然后选中这三行,用数据填充柄往下拉至全部人员,这样就在每个人的前边都加了数字。
第二步:在最后的人员名字下行的第二列把原表头复制进去(也就是说前边要空一个格,目的是添数字),有多少人,就复制多少行,或者用填充柄来实现也可。(比如50人就要有50行表头),在这些表头的第一行前边添数字1,第二行表头前边添数字4,第三行表头前边添数字7,然后用数据填充柄来实现其他行的填充。
第三步:在最后一行表头的下行第一列处添数字3,再下一行添6,再下一行添9,然后用数据填充柄实现以后行的填充(空行数量必须和人员数量一致)。 第四步:选中整个表格,用“数据”中的“排序”对A列进行排序,这样就完成了整个工资表的制作。
第五步:把整个表格复制到WORD当中(因为用excel做的表格空行有框,无法消除)然后把表格加以调整,把空行的竖行都消除了(这个工作挺烦琐,你可以按住ctrl键用鼠标把全部空行都选中然后进行操作)。
最后再给这个工资表加上题目,至此工资表的工作基本完成。
实现你要求的打印格式程序如下,是根据你的实际表的情况,用宏编写的:
Sub Print_table()
Sheets("sheet2").Select
'5 是工资表上打印的人数减1,可更改
For i = 1 To 5
'每个工人工资条下方插入两行,20是工资表的列数,可根据情况更改,下面三行中的的20要同时修改。 Range(Cells(3 * i + 1, 1), Cells(3 * i + 2, 20)).Select
Selection.Insert Shift:=xlDown
'复制表头
Range(Cells(1, 1), Cells(2, 20)).Select
Selection.Copy
Cells(3 * i + 1, 1).Select
ActiveSheet.Paste
ActiveCell.Rows("1:1").EntireRow.RowHeight = 42
Next
Range("a2").Select
End Sub
请注意以下几点:
1、Excel启动时,提示是否使用宏,点击“启用宏”。
2、此程序认为工资表页面的名称是“sheet2”,如果你的工资表是别的名称,比如说,“一车间”,则把程序第二行中的sheet2替换掉,写成
sheets("一车间").select
3、程序装载方法:在页面上点击“工具”-〉宏 -〉Visual Basic编辑器
在空白的方框里,将上面的程序复制上去,点击编辑器工具栏里的小箭头即可运行程序了。如果光标不在程序中,点击小箭头时,会弹出一个窗口,此时选中宏的名称,点击“运行”即可。
4、程序行前面有'的是注释行,'是英文字符中的单引号。
5、原来的工资表的格式应该是只有最上面一个表头,下面每一行是一位工人的工资条。
6、此程序在winXP下调试通过,建议你先用一页表调试一下。
下面的附件你下载后就可以直接使用了。
如果要打印“1月”的表,循环数i=5应改为i=74,因为表上的人数是75。
使用方法:
进入sheet2页面,点击:工具-〉宏 -〉执行,所需要的格式就出来了。
在Excel中新建一个文件,将其命名为“工资表与工资条”,在工作表“sheet1”中输入并编辑好本单位职工工资总表(如表1所示)后,点击“工具”菜单→“宏”→“宏„”→输入宏名“生成工资条”→创建,输入如下的宏的各行文本,输入完成后保存该宏。将工作表“sheet1”复制为另一个工作表“sheet2”中,使“sheet2”成为当前工作表,执行刚才创
建的宏,即可很快将表1所示的工资表转换为表2所示的工资条。
宏的内容如下:
Sub 生成工资条()
Cells.Select
'选择整个表去掉表格线
Range("F1").Activate
Selection.Borders(xlDiagonalDown).Line
Style = xlNone
Selection.Borders(xlDiagonalUp).LineStyle = xlNone
Selection.Borders(xlEdgeLeft).LineStyle = xlNone
Selection.Borders(xlEdgeTop).LineStyle = xlNone
Selection.Borders(xlEdgeBottom).LineStyle = xlNone
Selection.Borders(xlEdgeRight).LineStyle = xlNone
Selection.Borders(xlInsideVertical).LineStyle = xlNone
Selection.Borders(xlInsideHorizontal).LineStyle = xlNone
Rows("2:2").Select
'选择第2行
Selection.Insert Shift:=xlDown
'在第2行前插入一行,保持第2行
为选中状态
num=1
50
'总人数×3,如工资表中有100人则
为100×3即num=300
col=14
'工资表的栏数,如工资表有17栏则
'col=17
num1 = 4
Do While num1
'循环插入空行
Range(Cells(num1, 1), Cells(num1, col)).Select
'选中第num1行的第1列到第col列
Selection.Insert Shift:=xlDown
Selection.Insert Shift:=xlDown
num1 = num1 + 3
Loop
Range(Cells(1, 1), Cells(1, col)).Select
Application.CutCopyMode = False
'剪切复制模式无效
Selection.Copy
'复制选择区域
Range("A2").Select
'选择A2单元格
ActiveSheet.Paste
'从A2单元格起粘贴内容
num2 = 5
Do While num2
'循环插入标题行
Range(Cells(
1, 1), Cells(1, col)).Select
Application.CutCopyMode = False
Selection.Copy
Cells(num2, 1).Select
ActiveSheet.Paste
num2 = num2 + 3
Loop
Range(Cells(2, 1), Cells(3, col)).Select
Application.CutCopyMode = False
Selection.Borders(xlDiagonalDown).LineStyle
= xlNone
'定义表格边框线、内线样式
Selection.Borders(xlDiagonalUp).LineStyle = xlNone
With Selection.Borders(xlEdgeLeft)
.LineStyle = xlDouble
.Weight = xlThick
.ColorIndex = xlAutomatic
End With
With Selection.Borders(xlEdgeTop)
.LineStyle = xlDouble
.Weight = xlThick
.ColorIndex = xlAutomatic
End With
With Selection.Borders(xlEdgeBottom)
.LineStyle = xlDouble
.Weight = xlThick
.ColorIndex = xlAutomatic
End With
With Selection.Borders(xlEdgeRight)
.LineStyle = xlDouble
.Weight = xlThick
.ColorIndex = xlAutomatic
End With
With Selection.Borders(xlInsideVertical)
.LineStyle = xlDash
.Weight = xlThin
.ColorIndex = xlAutomatic
End With
With Selection.Borders(xlInsideHorizontal)
.LineStyle = xlDash
.Weight = xlThin
.ColorIndex = xlAutomatic
End With
Selection.Copy
Range(Cells(5, 1), Cells(6, col)).Select
Selection.PasteSpecial Paste:=xlFormats, Operation:=xlNone, SkipBlanks:= _ False, Transpose:=False
'接上行删除上行尾的连字符
_,复制表格线样式
num3 = 8
Do While num3 <= num
'循环复制表格线样式
Range(Cells(num3, 1), Cells(num3 + 1,
col))
.Select
Selection.PasteSpecial Paste:=xlFormats, Operation:=xlNone, SkipBlanks:= _ False, Transpose:=False
num3 = num3 + 3
Loop
Rows("1:1").Select
'删除多余的一行
Selection.Delete
End Sub
以后每月要打印工资表与工资条时,只需将“工资表与工资条”文件打开,修改好工作表“sheet1”中的当月的工资总表数据后将其复制为工作表“sheet2”,并使“sheet2”成为当前工作表,执行宏“生成工资条”即可。
现在许多单位都实现了工资代储,但每月的工资清单(工资条)还得要发给职工。如果用Excel程序处理的工资表,打印后每页只有一个表头,剪裁成条后除了每页的第一名职工外,其余的就没有表头了,这样将使职工无法清楚工资条的数字对应什么具体名目。怎样才能给每个职工的工资条加上工资表表头呢?这里笔者将解决方案介绍给大家。
首先根据每个职工工资具有唯一电脑序号的特点,使用VBA里的判断语句,让循环从第一个电脑序号开始,如果Excel表中相邻两行的电脑序号不同,就在这两行之间插入一个空白行,然后使用循环语句,把表头的内容依次复制粘贴到每个空白行。
下面是具体的操作步骤:
1.在Excel中打开需要制作工资条的工资表文件。
2.打开“工具”/“宏”(如果在菜单中没有看见“宏”,让鼠标在菜单上稍停留或者按向下的双箭头就会出现),选择“Visual
Basic编辑器”(图1)打开VBA编辑器窗口,在VBAProject的工程资源管理器中双击Sheet1,会出现代码编辑窗口,在代码编辑窗口输入如下代码(图2):
Sub gongzitiao()
Application.ScreenUpdating = False
'为避免破坏表一,将表一内容完整复制到表二
Sheets(1).[A1].CurrentRegion.Copy Sheets(2).[A1]
'定义循环变量的最大值不小于表二中职工数的二倍(我校职工总数为2564)
a = (Application.WorksheetFunction.CountA(Sheets(2).[a1:a2600] * 2
'如果第一列(职工的工资电脑序号)上下单元格的值不相等,则在它们之间插入一个空白行
For i = 3 To a
If Sheets(2).Cells(i,1)Sheets(2).Cells(i + 1,1) And (Sheets(2).Cells(i,
1) "") Then
Sheets(2).Rows(i + 1).Insert
End If
'如果第一列中的单元格为空,则将表中[A2:M2](工资清单表头项目)复制到此行 If Sheets(2).Cells(i,1) = "" Then
Sheets(2).[A2:M2].Copy Sheets(2).Cells(i,1)
End If
Next
Application.ScreenUpdating = True
End Sub
3.检查源代码编辑无误后,在VBA窗口中打开菜单“运行”/“运行宏”,将弹出“宏”窗口,你只需单击“运行”即可。
4.待宏运行完毕,再回到Excel,单击工资表下方的“Sheet2”,于是在每两个相邻职工间就插入了工资清单项目(图3),再用打印机打印并裁条后,就可以发放给每位职工了。 该操作在Excel 2000下调试通过。
第一步:把这个工资表复制到一个新的工作薄中(光复制有人员名字的那些,表头不复制),然后在新的工作薄的头一列前新加一列,头三行分别输入2,5,8,然后选中这三行,用数据填充柄往下拉至全部人员,这样就在每个人的前边都加了数字。
第二步:在最后的人员名字下行的第二列把原表头复制进去(也就是说前边要空一个格,目的是添数字),有多少人,就复制多少行,或者用填充柄来实现也可。(比如50人就要有50行表头),在这些表头的第一行前边添数字1,第二行表头前边添数字4,第三行表头前边添数字7,然后用数据填充柄来实现其他行的填充。
第三步:在最后一行表头的下行第一列处添数字3,再下一行添6,再下一行添9,然后用数据填充柄实现以后行的填充(空行数量必须和人员数量一致)。 第四步:选中整个表格,用“数据”中的“排序”对A列进行排序,这样就完成了整个工资表的制作。
第五步:把整个表格复制到WORD当中(因为用excel做的表格空行有框,无法消除)然后把表格加以调整,把空行的竖行都消除了(这个工作挺烦琐,你可以按住ctrl键用鼠标把全部空行都选中然后进行操作)。
最后再给这个工资表加上题目,至此工资表的工作基本完成。
实现你要求的打印格式程序如下,是根据你的实际表的情况,用宏编写的:
Sub Print_table()
Sheets("sheet2").Select
'5 是工资表上打印的人数减1,可更改
For i = 1 To 5
'每个工人工资条下方插入两行,20是工资表的列数,可根据情况更改,下面三行中的的20要同时修改。 Range(Cells(3 * i + 1, 1), Cells(3 * i + 2, 20)).Select
Selection.Insert Shift:=xlDown
'复制表头
Range(Cells(1, 1), Cells(2, 20)).Select
Selection.Copy
Cells(3 * i + 1, 1).Select
ActiveSheet.Paste
ActiveCell.Rows("1:1").EntireRow.RowHeight = 42
Next
Range("a2").Select
End Sub
请注意以下几点:
1、Excel启动时,提示是否使用宏,点击“启用宏”。
2、此程序认为工资表页面的名称是“sheet2”,如果你的工资表是别的名称,比如说,“一车间”,则把程序第二行中的sheet2替换掉,写成
sheets("一车间").select
3、程序装载方法:在页面上点击“工具”-〉宏 -〉Visual Basic编辑器
在空白的方框里,将上面的程序复制上去,点击编辑器工具栏里的小箭头即可运行程序了。如果光标不在程序中,点击小箭头时,会弹出一个窗口,此时选中宏的名称,点击“运行”即可。
4、程序行前面有'的是注释行,'是英文字符中的单引号。
5、原来的工资表的格式应该是只有最上面一个表头,下面每一行是一位工人的工资条。
6、此程序在winXP下调试通过,建议你先用一页表调试一下。
下面的附件你下载后就可以直接使用了。
如果要打印“1月”的表,循环数i=5应改为i=74,因为表上的人数是75。
使用方法:
进入sheet2页面,点击:工具-〉宏 -〉执行,所需要的格式就出来了。
在Excel中新建一个文件,将其命名为“工资表与工资条”,在工作表“sheet1”中输入并编辑好本单位职工工资总表(如表1所示)后,点击“工具”菜单→“宏”→“宏„”→输入宏名“生成工资条”→创建,输入如下的宏的各行文本,输入完成后保存该宏。将工作表“sheet1”复制为另一个工作表“sheet2”中,使“sheet2”成为当前工作表,执行刚才创
建的宏,即可很快将表1所示的工资表转换为表2所示的工资条。
宏的内容如下:
Sub 生成工资条()
Cells.Select
'选择整个表去掉表格线
Range("F1").Activate
Selection.Borders(xlDiagonalDown).Line
Style = xlNone
Selection.Borders(xlDiagonalUp).LineStyle = xlNone
Selection.Borders(xlEdgeLeft).LineStyle = xlNone
Selection.Borders(xlEdgeTop).LineStyle = xlNone
Selection.Borders(xlEdgeBottom).LineStyle = xlNone
Selection.Borders(xlEdgeRight).LineStyle = xlNone
Selection.Borders(xlInsideVertical).LineStyle = xlNone
Selection.Borders(xlInsideHorizontal).LineStyle = xlNone
Rows("2:2").Select
'选择第2行
Selection.Insert Shift:=xlDown
'在第2行前插入一行,保持第2行
为选中状态
num=1
50
'总人数×3,如工资表中有100人则
为100×3即num=300
col=14
'工资表的栏数,如工资表有17栏则
'col=17
num1 = 4
Do While num1
'循环插入空行
Range(Cells(num1, 1), Cells(num1, col)).Select
'选中第num1行的第1列到第col列
Selection.Insert Shift:=xlDown
Selection.Insert Shift:=xlDown
num1 = num1 + 3
Loop
Range(Cells(1, 1), Cells(1, col)).Select
Application.CutCopyMode = False
'剪切复制模式无效
Selection.Copy
'复制选择区域
Range("A2").Select
'选择A2单元格
ActiveSheet.Paste
'从A2单元格起粘贴内容
num2 = 5
Do While num2
'循环插入标题行
Range(Cells(
1, 1), Cells(1, col)).Select
Application.CutCopyMode = False
Selection.Copy
Cells(num2, 1).Select
ActiveSheet.Paste
num2 = num2 + 3
Loop
Range(Cells(2, 1), Cells(3, col)).Select
Application.CutCopyMode = False
Selection.Borders(xlDiagonalDown).LineStyle
= xlNone
'定义表格边框线、内线样式
Selection.Borders(xlDiagonalUp).LineStyle = xlNone
With Selection.Borders(xlEdgeLeft)
.LineStyle = xlDouble
.Weight = xlThick
.ColorIndex = xlAutomatic
End With
With Selection.Borders(xlEdgeTop)
.LineStyle = xlDouble
.Weight = xlThick
.ColorIndex = xlAutomatic
End With
With Selection.Borders(xlEdgeBottom)
.LineStyle = xlDouble
.Weight = xlThick
.ColorIndex = xlAutomatic
End With
With Selection.Borders(xlEdgeRight)
.LineStyle = xlDouble
.Weight = xlThick
.ColorIndex = xlAutomatic
End With
With Selection.Borders(xlInsideVertical)
.LineStyle = xlDash
.Weight = xlThin
.ColorIndex = xlAutomatic
End With
With Selection.Borders(xlInsideHorizontal)
.LineStyle = xlDash
.Weight = xlThin
.ColorIndex = xlAutomatic
End With
Selection.Copy
Range(Cells(5, 1), Cells(6, col)).Select
Selection.PasteSpecial Paste:=xlFormats, Operation:=xlNone, SkipBlanks:= _ False, Transpose:=False
'接上行删除上行尾的连字符
_,复制表格线样式
num3 = 8
Do While num3 <= num
'循环复制表格线样式
Range(Cells(num3, 1), Cells(num3 + 1,
col))
.Select
Selection.PasteSpecial Paste:=xlFormats, Operation:=xlNone, SkipBlanks:= _ False, Transpose:=False
num3 = num3 + 3
Loop
Rows("1:1").Select
'删除多余的一行
Selection.Delete
End Sub
以后每月要打印工资表与工资条时,只需将“工资表与工资条”文件打开,修改好工作表“sheet1”中的当月的工资总表数据后将其复制为工作表“sheet2”,并使“sheet2”成为当前工作表,执行宏“生成工资条”即可。
现在许多单位都实现了工资代储,但每月的工资清单(工资条)还得要发给职工。如果用Excel程序处理的工资表,打印后每页只有一个表头,剪裁成条后除了每页的第一名职工外,其余的就没有表头了,这样将使职工无法清楚工资条的数字对应什么具体名目。怎样才能给每个职工的工资条加上工资表表头呢?这里笔者将解决方案介绍给大家。
首先根据每个职工工资具有唯一电脑序号的特点,使用VBA里的判断语句,让循环从第一个电脑序号开始,如果Excel表中相邻两行的电脑序号不同,就在这两行之间插入一个空白行,然后使用循环语句,把表头的内容依次复制粘贴到每个空白行。
下面是具体的操作步骤:
1.在Excel中打开需要制作工资条的工资表文件。
2.打开“工具”/“宏”(如果在菜单中没有看见“宏”,让鼠标在菜单上稍停留或者按向下的双箭头就会出现),选择“Visual
Basic编辑器”(图1)打开VBA编辑器窗口,在VBAProject的工程资源管理器中双击Sheet1,会出现代码编辑窗口,在代码编辑窗口输入如下代码(图2):
Sub gongzitiao()
Application.ScreenUpdating = False
'为避免破坏表一,将表一内容完整复制到表二
Sheets(1).[A1].CurrentRegion.Copy Sheets(2).[A1]
'定义循环变量的最大值不小于表二中职工数的二倍(我校职工总数为2564)
a = (Application.WorksheetFunction.CountA(Sheets(2).[a1:a2600] * 2
'如果第一列(职工的工资电脑序号)上下单元格的值不相等,则在它们之间插入一个空白行
For i = 3 To a
If Sheets(2).Cells(i,1)Sheets(2).Cells(i + 1,1) And (Sheets(2).Cells(i,
1) "") Then
Sheets(2).Rows(i + 1).Insert
End If
'如果第一列中的单元格为空,则将表中[A2:M2](工资清单表头项目)复制到此行 If Sheets(2).Cells(i,1) = "" Then
Sheets(2).[A2:M2].Copy Sheets(2).Cells(i,1)
End If
Next
Application.ScreenUpdating = True
End Sub
3.检查源代码编辑无误后,在VBA窗口中打开菜单“运行”/“运行宏”,将弹出“宏”窗口,你只需单击“运行”即可。
4.待宏运行完毕,再回到Excel,单击工资表下方的“Sheet2”,于是在每两个相邻职工间就插入了工资清单项目(图3),再用打印机打印并裁条后,就可以发放给每位职工了。 该操作在Excel 2000下调试通过。