网上常常可以看到各种工资条制作的函数、黏贴等各种方法。都需要几个步骤。感觉费时费力。
学会了VBA 之后,当然就不需要那么多步骤啦。能一键解决的时候,绝不按两下键。
如果本例与你的表格不一致,读者可以复制代码,简单修改几处代码就可以运行了。
问题如下:
问题描述:
1:工资表的原始表格里已经做好了各同事的工资表格,
2:要在每个同事的上一行插入固定的表头,就形成个人的工资条;
解决的思路详解:
1:把表头作为一个单元格区域并赋值
2:用for循环遍历工作表(需要制作工资条的单元格区域),
3:在每个需要增加插入表头的单元格区域,插入表头
代码运行的结果如下:
代码如下:
Sub 生成工资条() Application.DisplayAlerts = False Application.ScreenUpdating = False Dim sht As Worksheet, arr, i, j Dim rng As Range, Path1 As String Set sht = Worksheets("工资表原始表格") Set rng = sht.Range("a2:t3") arr = sht.Range("a1").CurrentRegion n = UBound(arr, 1) - 1 ' 插入表头的循环 For i = n To 5 Step -1 rng.Copy Rows(i).Insert Shift:=xlDown Next Application.ScreenUpdating = True Application.DisplayAlerts = True End Sub
代码解析
1:5~6行 Dim定义变量;
2:8行 设定工作表;
3:9行 设定表头区域;
4:10行 把工资表区域的所有数据放入数组arr
5:12行 用n获取倒数第二行号(因为最后一行的合计,不需要制作工资条);
6:14~17行 遍历arr数组;
7:15行 复制表头
8:16行 在需要制作工资条的单元格上面插入工作表
本例思考:
1:本例的for循环加入了“Step -1”这个参数,是因为for循环本来就有step这个参数。只是大部分省略了(当step为1时,可以省略)。step指的时循环的步距。
2:当遇到需要删除、插入单元格的时候,要用倒循环。即step 为 -1
小结:
解决本问题,需要用的知识点:
1:复制、黏贴的运用