美文网首页
VBA中通过加入空行来制作工资条

VBA中通过加入空行来制作工资条

作者: 王伯卿 | 来源:发表于2018-09-03 13:18 被阅读0次

现在大部分公司的工资条,应该都是走线上了,尤其是钉钉的工资条,非常清晰。我记得很久很久以前,工资条应该都是一张纸剪开,然后发到各个员工的手里的。而这种情况,就非常需要知道如何只做工资条。

比如我们拿到的原表是这样的:


image.png

但是我们希望它最后变成这样,我们才好用剪刀剪了发给员工。


image.png

这个其实很简单,复制下面这段代码到EXCEL里,就可以使用了。代码的注释还是非常详细的。

Option Explicit
Public clo_start As String
Sub main()
    
    '这里用了input来接受使用时所指定的列
    '这里没有作非法验证,考虑的填入的参数较为简单
    clo_start = InputBox("请输入需要操作的列(如果是A列,则填A即可)")
    
    Call add_space(clo_start)
    
End Sub

'clo_num:该区域有多少列,返回一个数字
'row_num:该区域有多少行,返回一个数字,另外从尾开始遍历到头部时,需要使用这个变量
'head_rng_content:表头


Private Sub add_space(which_clo As String)
    Dim head_rng_content As Range
    Dim clo_num As Integer
    Dim row_num  As Long
    Dim cursor As Long
    
    Set head_rng_content = Range(Cells(1, 1), Cells(1, 1).End(xlToRight))
    clo_num = get_clo_num()
    row_num = get_row_num()
    
    '到第3行的时候,前面已经不可能有不同的值了,因为第2行是数据,第1行是表头
    '所以这边遍历到第3行就可以了
    For cursor = row_num To 3 Step -1
         If Cells(cursor, which_clo) <> Cells(cursor - 1, which_clo) Then
             'resize这边更改整个区域,这边是2,原本是1行,变更一下就是2行
             '然后insert的时候,也是插入两行,留了一个表头的位置
             Rows(cursor).Resize(2).Insert
             '把表头复制过去,这边为什么是+1,因为第6行和第5行不同,
             '因此第6和第5行之间插入2行,
             '原先第6行到第8行,第7行是表头的位置。
             head_rng_content.Copy Range(Cells(cursor + 1, 1), Cells(cursor + 1, clo_num))
         End If
     Next
End Sub
'返回一整个区域的列数
Private Function get_clo_num()
    Dim clo_num As Integer
    Dim clo_rng As Range
    Set clo_rng = Range(Cells(1, 1), Cells(1, 1).End(xlToRight))
    
    '这里用了counta来计算非空单元格的数量
    '因此这边选定的range范围是第一行
    clo_num = Application.WorksheetFunction.CountA(clo_rng)
    get_clo_num = clo_num
End Function
'返回一整个区域的行数(表头已经包括)
Private Function get_row_num()
    Dim row_num As Long
    Dim row_rng As Range
    
    Set row_rng = Range(Cells(1, 1), Cells(1, 1).End(xlDown))
    '这里用了counta来计算非空单元格的数量
    '因此这边选定的range范围是第一列
    row_num = Application.WorksheetFunction.CountA(row_rng)
    get_row_num = row_num
End Function

相关文章

网友评论

      本文标题:VBA中通过加入空行来制作工资条

      本文链接:https://www.haomeiwen.com/subject/pfvbwftx.html