美文网首页VBA分享专栏精进Excel
Excel VBA之日期篇 4.1 在职时间计算 转为HR量身打

Excel VBA之日期篇 4.1 在职时间计算 转为HR量身打

作者: Excel和VBA | 来源:发表于2021-02-09 14:03 被阅读0次

    前景提要

    经过了大半个月左右的时间,我们终于完成了VBA函数篇的分享,在函数篇中,我们需要的都是一些非常基础的知识,这些非常基础的知识,可能大家并不是很感兴趣,毕竟能够解决的问题并不是很多,后面我们将会尽量将知识点和实际的场景相结合,尽量帮助大家解决更多的问题,本篇章我们主要分享的是一些日期和时间相关的知识,希望可以解决大家在日常工作中在时间处理上面的一些问题,如果大家有什么相关的问题,也可以提出来,我尽量帮助大家解决。

    场景说明

    今天我们要分享的是两日期之间的计算,这在HR日常的工作中是经常需要用到的,比方说计算某员工在岗位多久了,或者说某客户上次购买产品到现在相差了多久,以此来计算出客户的购买频率等,日期之间的计算有很多种不同的结果,有时候我们想要大致的结果,比方说相差多少月,但是有时候我们需要得到两个日期相差了多少天,这就比较麻烦了,其实我们可以使用datediff来帮助我们实现这个作用,一起来看看例子吧。

    比较具有代表性的例子,就是HR日常工作中的在职员工的在岗时间,或者说是工龄计算了,俗话说铁打的营盘流水的兵,人员流动已经成为了常态,每个员工的入职时间又不尽相同,每次核算员工在岗时间的时候,对于很多的HR来说都是非常头疼的问题,公司结构比较稳定的还好说,基本上人员流动性不算很大,但是在很多的工厂、车间,人员的流动性就非常的大了,一次10+人员的进进出出,算了一批还有一批,下次核算的时候,又有新人进,旧人走,永远都是一个头疼的问题,不要怕,今天小编就来将给为HR带出苦海

    假设现在我们手上有这样的一份入住人员的登记表,因为各个公司要求不同,可能有时候需要按照天数来结算,有时候有需要按照月份来结算,而在年后的时候,需要发年终奖的时候,就需要按照工龄,就是年来计算了,所以为了方便,小便一次性的将常用的天,月,年三种不同的计算方式都展示出来了,大家各取所需。

    首先我们来计算下计算下员工在岗的天数,按照天数来计算的情况也不是没有,一般比方说业务量大的时候,临时招聘了一批临时工,临时工都是按照天来结算的,这个时候我们就需要得到这些员工在岗工作了多少天,来看代码

    Sub test()
    
    Dim i&
    
    l = Cells(Rows.Count, 7).End(xlUp).Row
    
    For i = 2 To l
    
        Cells(i, 8) = DateDiff("d", Cells(i, 7), Now()) & "天"
    
    Next i
    
    End Sub
    

    看看结果

    image.png

    是不是成功的算出了在岗时间的天数,如果觉得不太相信的话,我们找一个比较好计算的例子,A22,是4-1入职的,小编写这篇文章的时候是4-15,15-1=14就得到了该员工的在岗时间是14天了,再挑一个远一点的,A23,3-9入职的,到4-9是正好1个月30天,再加上今天的7天,正好等于37天,所以结果是非常正确的。

    那我们继续,我们来算下入职有多少个月,这个一般用在员工转正或者是员工考核的时候会使用到,比方说3月转正,入职半年即6个月之后,需要得到什么业务水平之类的,我们来看看代码

    Sub test()
    
    Dim i&
    
    l = Cells(Rows.Count, 7).End(xlUp).Row
    
    For i = 2 To l
    
        Cells(i, 9) = DateDiff("m", Cells(i, 7), Now()) & "月"
    
    Next i
    
    End Sub
    

    来看看结果


    image.png

    是不是成功的计算出来了入职有多少月,依然我们挑几个来检验下结果,A23,入职3月,今天是4月,1个月,正确,A21,1-1入职,入职应该是3个月,没错,因为4月还没有过完,所以入职应该是3个月,如果各位HR的算法是本月也算上的话,可以在结果上+1就可以了。

    哇,来到了激动人心的时刻了,计算入职多少年了,这个一般都是和年终奖挂钩的哇,小编小小激动了一下,那么入职多少年要如何来计算呢?

    Sub test()
    
    Dim i&
    
    l = Cells(Rows.Count, 7).End(xlUp).Row
    
    For i = 2 To l
    
        Cells(i, 10) = DateDiff("yyyy", Cells(i, 7), Now()) & "年"
    
    Next i
    
    End Sub
    

    看看结果

    image.png

    准确的得到了我们想要的结果。是不是很完美。

    代码解析

    今天的代码解析,我们主要将两个知识点,

    一个是获得当前的时间,想要获得在岗时间,肯定是用今天的日期减去入职的日期了,入职日期已经登记了,那么今天的日期如何获取呢?

    =Now()
    

    就是这么简单,上面的代码中的每个截图都提供了当前的时间时间作为参考,以方便大家进行核对。

    然后就是两个时间的相减了,datediff方法

    他需要提供三个参数,第一参数就是单位名称,就是你想要获得的计算结果的单位名称,是天,年,月,时,分,秒都可以,不要以为我是瞎说的哦,甚至还可以计算出两个日期相隔多少个星期,是不是很棒的一个方法呢,常见单位如下,“d”:天“yyyy”:年,“m”:月“h”:小时,“n”:分钟,“s”:秒

    第二个和第三个参数就更加简单了,就是提供两个日期,开始日期和结束日期就可以了,记得顺序,小的日期在前,大的日期在后。

    相关文章

      网友评论

        本文标题:Excel VBA之日期篇 4.1 在职时间计算 转为HR量身打

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