抗旧名将左权:如何用EXCEL计算工龄的公式(以年为单位)?

来源:百度文库 编辑:偶看新闻 时间:2024/04/27 15:13:44
单位现在按照工龄计算工资,请问在EXCEL中怎么做公式?以现在时间算起,也就是说现是2008年01月,那么工龄的计算方法就需要从1月算起?

F3列为参加工作时间,G3为要得出的工龄。 1----设A1是“入职日期”,B1是“工龄计算日期”,C1是“年”,D1是“半年”,E1是“加薪总额”。

在C2输入:=IF(OR(A2="",B2=""),"",DATEDIF(A2,B2,"y"))
在D2输入:=IF(OR(A2="",B2=""),"",DATEDIF(A2,B2,"ym"))
在E2输入:=C2*30+IF(D2>5,10,0)

只要在A1和B1输入“入职日期”和“工龄计算日期”就可以了。
2---“工龄”是人事管理和劳资管理中经常涉及到的一项重要内容,员工的升迁、薪资和各种福利想必都与之有关吧!这个东东可千万不能算错,不然会有人来找麻烦哟!
    若只需要大致计算出几名员工的工龄或许按按计算器就能搞定了,但若需要准确计算出成百上千名员工的工龄,恐怕就……没关系,别忘了你手头还有强大的Excel!
    在Excel里,将两个日期值相减,即可得出其中间隔的天数(以序列数表示),但这个数字并不是我们所需要的最终结果。你能说,“XXX的工龄是3721天”吗?当然不行。所以,我们需要的是“XX年XX月XX天”这样的格式,而不是单纯的“XXXX天”。
    既然要求已经提出来了,那么该如何进行计算呢?有朋友可能要说了,这还不简单?把前面得到的天数除以365,不就是年数了?其余数除以30,不就是月数了?再剩下的,就是天数嘛。当然,这样的算法可以大致计算出我们需要的数字,但不准确。因为,一年并不都是365天,一个月也并不都是30天,所以这种算法存在着相当的误差,而在某些特殊的日期下,误差可能相差一个月!不信的话自己试试。
    想要算得既快又准,在Excel里还真不是三五个公式就能解决的,以至于有了下面这个自定义的公式Elapsed()。源代码(已加注释)已在文末附上,了解VBA的朋友可以看看,不知道VBA的朋友大可按说明“复制”——“粘贴”后,放到脑后去好了。下面先来讲一讲它的用法。
    Elapsed(StartDate , EndDate,ReturnType)带有三个参数:依次为开始日期,结束日期和返回类型。大家只需在使用时依次给出相应参数值,函数就会自动计算出以年,月,天表示的两日期间间隔的天数。ReturnType有三个参选项,1表示返回年数,2表示月数,3表示天数,因为每次只能选择其中一种参选项,所以别指望Elapsed()一次就为你干完所有的活儿!
    介绍完Elapsed(),我们再来看看具体的计算方法吧:
    假设已有一工作表中记录了各员工的入公司日期,需要计算截止今日时的工龄期,我们可以先用公式计算今日的日期值,这样的话到了明天也就不必重算了。我们往C2单元格中输入公式“=TODAY()”,这是取计算机的当前系统日期值。
    假设各员工的入公司日期都记录在C列中,则我们通过D、E、F三列来分别计算工龄的年数、月数和天数。以第六行的“张三”为例,D6、E6、F6中的公式分别为“=Elapsed($C6,$C$2,1)”、“=Elapsed($C6,$C$2,2)”、“=Elapsed($C6,$C$2,3)”。接着在G6中用公式将上面计算的结果转换成易于理解的文本形式。这个公式就可以自由发挥了,您可以按自己的喜好进行设置。如:“=IF(D6=0,IF(E6=0,"未满一个月",E6&"个月"),IF(E6=0,D6&"年整",D6&"年"&"零"&E6&"个月"))”——这个公式舍弃了不常用到的“天数”,并对0年或0个月这样较特殊的计算结果进行了更人性化的转换。

    最后要做的,就是将D6、E6、F6、G6抹黑,往下拖曳,进行公式的复制。
    到此,所有员工的工龄全部都计算完毕了!

附代码如下:
Function Elapsed(StartDate As Date, EndDate As Date, ReturnType As Integer)
Dim StartYear As Integer '定义变量用以参数中开始日期的计算
Dim StartMonth As Integer
Dim StartDay As Integer
Dim EndYear As Integer '定义变量用以参数中结束日期的计算
Dim EndMonth As Integer
Dim EndDay As Integer
StartYear = Year(StartDate) '从参数中取得开始日期和结束日期的年数,月数,天数
StartMonth = Month(StartDate)
StartDay = Day(StartDate)
EndYear = Year(EndDate)
EndMonth = Month(EndDate)
EndDay = Day(EndDate)

If EndDay < StartDay Then '如果结束日期参数中的天数小于开始日期参数的天数,则…
EndDay = EndDay + (DateSerial(EndYear, EndMonth + 1, EndDay) _
- DateSerial(EndYear, EndMonth, EndDay))
EndMonth = EndMonth - 1 '…从月数中借1后再进行减运算,从而得到相差天数
End If
If EndMonth < StartMonth Then '如果结束日期参数中的月数小于开始日期参数的月数,则..
EndMonth = EndMonth + 12
EndYear = EndYear - 1 '…从年数中借1后再进行减运算,从而得到相差月数
End If
Select Case ReturnType '如果没有以上特殊情况,则直接进行相减的运算
Case 1 '返回年数
Elapsed = EndYear - StartYear
Case 2 '返回月数
Elapsed = EndMonth - StartMonth
Case 3 '返回天数
Elapsed = EndDay - StartDay
End Select


End Function

    在你的工作簿中打开VBA编辑器,新建一个模块,将以上代码输入即可!

        点击此处以下载示范工作簿!17Kp;"零"&E6&"个月"))”——这个公式舍弃了不常用到的“天数”,并对0年或0个月这样较特殊的计算结果进行了更人性化的转换。

    最后要做的,就是将D6、E6、F6、G6抹黑,往下拖曳,进行公式的复制。
    到此,所有员工的工龄全部都计算完毕了!