夜雨聆风学习资料网

ARTICLE · 1133526

Excel VBA编程-一键批量生成工资条

Excel VBA编程-一键批量生成工资条

本期知识点来源(来自网络实战技巧)

上网搜"Excel 怎么批量做工资条",你会发现一个几乎人人都头疼的活儿:工资表是一整张,第一行是表头(姓名、部门、基本工资……),下面一人一行;可发工资条时,得让每个人"头顶都有自己的表头",才好裁开、打印、分发。

365办公网(ftv365.cn)、CSDN 博客、以及 allimg.cn 的教程都给出了同一个核心思路:从下往上,在每位员工的数据上方插入一行,把首行的表头复制过去。比如原始表有 50 名员工,运行一下,就自动变成 50 张"表头 + 本人数据"的小条,直接能裁。

今天我们把这个思路扩展成 3 个由浅入深的实战案例。核心就一句话:表头在第 1 行,从最后一行往上数,每人头顶补一张表头。

操作前准备:请在 Excel 里准备一张工资表,从 A1 单元格开始是表头,第 2 行起是每位员工的数据,中间不要有空行。后面三个案例都基于这个布局。


案例 1(简单):一键在每位员工上方插入表头

功能说明:运行后,VBA 会自动从最后一行往上,在每位员工的数据上方插入一行,并把第 1 行的表头复制过去。结果是每人一张"表头 + 本人数据",可以直接裁剪。代码最精简,适合第一次上手。

代码(按 Alt + F11 打开编辑器 → 菜单"插入"→"模块"→ 粘贴下面全部内容):

Sub 一键生成工资条()    Dim 最后行 As Long    Dim i As Long    ' 找到 A 列最后一个有数据的行(也就是最后一名员工)    最后行 = Cells(Rows.Count, 1).End(xlUp).Row    ' 从最后一名员工往上,到第 3 行为止(第 2 名员工头顶已有最上面的表头)    For i = 最后行 To 3 Step -1        Rows(1).Copy                      ' 复制第 1 行表头        Rows(i).Insert Shift:=xlDown    ' 在当前员工上方插入这一行    Next i    MsgBox "工资条已生成,共 " & (最后行 - 1) & " 张!", vbInformationEnd Sub

操作步骤:

  1. 在 Excel 中准备好工资表(A1 起表头,第 2 行起员工数据)。
  2. 按 Alt + F11 打开 VBA 编辑器,点菜单"插入"→"模块"。
  3. 把上面整段代码粘贴进去,关闭编辑器。
  4. 回到 Excel,按 Alt + F8,选中"一键生成工资条",点"运行"。
  5. 稍等片刻,弹出提示即完成;此时每一名员工上方都已有一行表头,可以打印或裁开了。

案例 2(中等):生成带边框、表头加粗的规整工资条

功能说明:在案例 1 的基础上,自动给每张工资条的"表头行 + 数据行"加上细边框,并把表头加粗、列宽自适应,打印出来更整齐好看。逻辑和案例 1 完全一样,只是每插好一张就顺手把它打扮一下。

代码(新建一个模块,粘贴下面全部内容):

Sub 生成工资条带格式()    Dim 最后行 As Long    Dim 列数 As Long    Dim i As Long    最后行 = Cells(Rows.Count, 1).End(xlUp).Row    ' 找到表头共有多少列(从 A1 往右数到最后一个有内容的列)    列数 = Cells(1, Columns.Count).End(xlToLeft).Column    For i = 最后行 To 3 Step -1        Rows(1).Copy        Rows(i).Insert Shift:=xlDown        ' 表头这一行加粗        Range(Cells(i, 1), Cells(i, 列数)).Font.Bold = True        ' 给"表头行 + 数据行"这一整块加上细边框        With Range(Cells(i, 1), Cells(i + 1, 列数)).Borders            .LineStyle = xlContinuous            .Weight = xlThin        End With    Next i    ' 列宽自适应,打印更美观    Columns.AutoFit    MsgBox "工资条已生成并排版,共 " & (最后行 - 1) & " 张。", vbInformationEnd Sub

操作步骤:

  1. 准备好工资表(同案例 1 的布局要求)。
  2. Alt + F11 → "插入"→"模块",粘贴上面代码,关闭编辑器。
  3. Alt + F8 运行"生成工资条带格式"。
  4. 运行后,每张工资条都有边框、表头加粗,列宽也自动调好,直接打印即可。

小提示:如果只想看效果、怕改乱原表,建议先复制一份工资表再运行。


案例 3(实用):把工资条生成到新表,每张带标题,原表不动

功能说明:前面两个案例都是直接改当前表。这个实用版更稳妥:原工资表一点不动,VBA 会自动新建一张叫"工资条"的表,把每位员工的工资条搬过去,并且在每张上方加上"★ 张三 的工资条 ★"这样的标题,自带边框,方便整张打印或发给 HR。适合每月固定出工资条的场景。

代码(新建一个模块,粘贴下面全部内容):

Sub 生成工资条到新表()    Dim 源表 As Worksheet    Dim 新表 As Worksheet    Dim 最后行 As Long    Dim 列数 As Long    Dim i As Long    Dim 新行 As Long    Set 源表 = ActiveSheet    最后行 = 源表.Cells(源表.Rows.Count, 1).End(xlUp).Row    列数 = 源表.Cells(1, 源表.Columns.Count).End(xlToLeft).Column    ' 如果已经有一张《工资条》表,先删掉,避免重名报错    Application.DisplayAlerts = False    On Error Resume Next    Sheets("工资条").Delete    On Error GoTo 0    Application.DisplayAlerts = True    ' 新建一张工作表专门放工资条    Set 新表 = Sheets.Add(After:=Sheets(Sheets.Count))    新表.Name = "工资条"    新行 = 1    For i = 2 To 最后行        ' 1. 写这张工资条的标题(用第 1 列的姓名)        新表.Cells(新行, 1).Value = "★ " & 源表.Cells(i, 1).Value & " 的工资条 ★"        新行 = 新行 + 1        ' 2. 复制表头        源表.Rows(1).Copy 新表.Rows(新行)        新行 = 新行 + 1        ' 3. 复制这名员工的数据        源表.Rows(i).Copy 新表.Rows(新行)        新行 = 新行 + 1        ' 4. 表头加粗、整张加边框        新表.Rows(新行 - 2).Font.Bold = True        With 新表.Range(新表.Cells(新行 - 2, 1), 新表.Cells(新行 - 1, 列数)).Borders            .LineStyle = xlContinuous            .Weight = xlThin        End With        ' 5. 留一个空行,分隔下一张        新行 = 新行 + 1    Next i    新表.Columns.AutoFit    MsgBox "工资条已生成到新表《工资条》,原表未改动,共 " & (最后行 - 1) & " 张。", vbInformationEnd Sub

操作步骤:

  1. 在 Excel 里打开工资表,确认 A1 起是表头、第 2 行起是员工数据。
  2. Alt + F11 → "插入"→"模块",粘贴上面代码,关闭编辑器。
  3. 回到 Excel,按 Alt + F8 运行"生成工资条到新表"。
  4. 运行后,工作簿里会多出一张"工资条"表:每位员工一张,上方有姓名标题、带边框,原工资表原封不动。
  5. 直接打印这张新表,或另存发给 HR 即可。

小提示:标题里的姓名取的是第 1 列(A 列)。如果你的姓名不在 A 列,把代码里 源表.Cells(i, 1) 的 1 改成姓名所在列的列号即可(比如 B 列就改成 2)。

相关学习资料