这里我分成了三个步骤,分别是“自动选择已经使用区域”,“为选择区域添加边框”,“拆分工资条”,因为前两项功能使用频率也是比较,所以单独分开,在实际应用中,合成到一个sub程序块里面就可以了。现在分别分享一下这三个代码
’第一个代码,自动选择已使用区域
'自动选择当前活动表格上选择的区域,只有一行代码,这个一看就知道意思的就不多说。
Sub 选择已使用区域()
ActiveSheet.usedrange.Select
End Sub
'第二个代码,自动为选择区域设置实线边框
'由于边框的属性比较多,比如边框的线条,上下左右,线条颜色,粗细,宽度,高度等等,需要详细了解的可以在帮助文档里查找borders查看相关的属性,实线边框应该是最常用的一个
sub 为选择区域添加边框()
'selection.Borders.LineStyle = xlDouble ‘这里是设置双线边框
selection.Borders.LineStyle = xlContinuous 'xlContinuous实线边框,
end sub
'第三个代码
'下面的代码就是这次分享的主要内容
Sub 拆分工资条()
Application.ScreenUpdating = False '禁止屏幕刷新,直接等待显示结果,这个可以不添加,如果数据量比较大可以看到数据表在闪动在工作。
c = Selection.Column ‘获取选择单元格的列数,如果选择的单元格是一个区域则获取左上角第一个单元格的列数
a = Cells(Rows.Count, c).End(xlUp).Row ’获取上面获取的所在列最后一个有数据的单元格所在行数,End(xlUp).row,是从该列最后一行往上查到第一个有数据的单元格,并返回其所在的行号,注意,如果这里row写成rows则是返回该单元格的值.
Dim r As Integer
'For r = 3 To A * 3 - 4 Step (3) '从第三行开始,在上面插入两行,下面执行两次插入命令代表插入了两行,原来的第四行将移到第六行,所以 SETP步进值设为3,因为1行变成3行,所在总行数*3,如果是每隔一行插入一行,则总行数*2,步进值2,下面插入行命令只设一条就可以了
For r = 3 To (a - 2) * 3 Step (3) '上面一行和这一行是同样的效果,只是表达方式不一样,因为从第三行开始,第一行前面插入两行,等于把第三行到有数据的内容最后一行都变成三行,前面两行是不变的,所以先减掉前面两行再乘以3就是最后一行所在行
Rows(r).Insert ‘插入一行
Range("A1:L1").Copy Range("a" & r & ":l" & r & "") '把表头复制到这刚插入的这一行
Rows(r).Insert '然后在这一行前面再插入一行 ,并下面的的语句中把这一行左中右的线都去掉。变成空白行,这样可以让每一条工资条区分得更清晰
Rows(r).Borders(xlInsideVertical).LineStyle = xlNone '中间边框设置为空,如果是单个单元格这个参数无效,因为不存在中间线
Rows(r).Borders(xlEdgeLeft).LineStyle = xlNone '左边边框设置为空,选择多列单元格只对最左边单元格的左边线起作用
Rows(r).Borders(xlEdgeRight).LineStyle = xlNone '右边框设置为空,选择多列单元格只对最右边单元格的右边线起作用
'Rows(r).Borders(xlEdgeTop).LineStyle = xlNone '上边框设置为空,这里不需要设置,因为要保留上面一行的下边线
'Rows(r).Borders(xlEdgeBottom).LineStyle = xlNone '下边框设置为空,这里不需要设置,因为要保留下面一行的上边线
Rows(r).RowHeight = 8 '设置行高,每个工资条之间留一点空白,不需要留太多,可以节省纸
Next
End Sub