专栏名称: 玩转职场
3分钟教你搞定老板和客户,被评为2015年度最值得职场人士关注的公众号!
目录
相关文章推荐
中国企业家杂志  ·  二手车商,抖音求生 ·  14 小时前  
以航讲公务员面试  ·  2025年北京定向选调必会题:平价商品爆火代 ... ·  22 小时前  
儒思HR实战智库  ·  执行力差?可能是管理者的问题 ·  昨天  
51好读  ›  专栏  ›  玩转职场

你要的考勤表来了!

玩转职场  · 公众号  · 职场  · 2017-06-27 10:00

正文


文 | 卢子

来源 |  Excel不加班


一大早学习群内的人都说要考勤表,好,既然你要,我总结一些我用过的考勤表。考勤表比较特殊,每个公司都略有差异,仅供参考。


1、手工记录考勤明细


借助手工输入简称,比如Z就表示正常上班。

员工考勤表


统计表


在员工考勤表内使用简称,而统计表又使用全称,也就是说需要将统计表的全程用公式转换成简称,这样才能实现统计。


可借助VLOOKUP函数实现转换。

=VLOOKUP(B$1,员工考勤表!$B$17:$C$22,2,0)


因为姓名都是按原来顺序的,直接就用单条件计数函数COUNTIF就可以。在B2输入公式,并向右拉到G2,然后向下拉。

=COUNTIF(员工考勤表!5:5,VLOOKUP(B$1,员工考勤表!$B$17:$C$22,2,0))


实际上班天数,在H2输入公式并向下拉。

=SUM(E2:G2)


2、系统导出考勤表并实现格式转换


系统里面可以自定义内容,比如开会休息等,每天只打2次卡,公司比较人性化,对迟到这些不做任何处罚。

考勤明细


现在要将考勤数据导入到另外一个表格模板。

转换表


接下来就是见证奇迹的时刻!


只需点一下导入考勤,瞬间就将数据实现转换。如果你眼神比较好,就知道这是我们公司的考勤表。


附源代码:

Sub Kaoqin()

   Dim MxSht, MxsR As Long, MxNRng As Range, NameArr

   Dim MaxR As Long, MaxC As Byte, KaoQ() As String

   Dim NBoot As Boolean, StaR As Long, TemRng, Cou As Long

   Dim iR As Long, iC As Byte, MxR As Long, MxC As Byte

   Sheet1.Range("D5:AI104").UnMerge

   With Sheet2

        Rem

        MxsR = .Cells(1, 1).End(xlDown).Row

'        MxSht = .Cells(1, 1).Resize(MxsR, 6).Value

        Set MxNRng = .Cells(1, 2).Resize(MxsR)

        

        MaxR = Me.Cells(5, 3).End(xlDown).Row - 4

        MaxC = Me.Cells(4, Columns.Count).End(xlToLeft).Column - 4

        ReDim KaoQ(1 To MaxR, 1 To MaxC)

        NameArr = Me.Cells(5, 2).Resize(MaxR).Value

        

        For iR = 1 To MaxR Step 2

            Rem 姓名存在否

            NBoot = WorksheetFunction.CountIf(MxNRng, NameArr(iR, 1))

            Rem 存在时处理考勤数据

            If NBoot Then

               StaR = WorksheetFunction.Match(NameArr(iR, 1), MxNRng, 0)

               Cou = WorksheetFunction.CountIf(MxNRng, NameArr(iR, 1))

               TemRng = .Cells(StaR, 2).Resize(Cou, 5).Value

            Rem 日期核对数据写入,上班下班的数据

            

            For MxR = 1 To Cou

                KaoQ(iR, Day(TemRng(MxR, 3))) = TemRng(MxR, 4) '对应日期上班时间数据

                KaoQ(iR + 1, Day(TemRng(MxR, 3))) = TemRng(MxR, 5) '对应日期下班时间数据

            Next MxR

            End If

        Next iR

   End With

   Me.Cells(5.1).Resize(MaxR) = NameArr

   Me.Cells(5, 4).Resize(MaxR, MaxC) = KaoQ

End Sub


3、系统导出考勤表并实现统计工资


这也是我以前公司使用过的考勤表。

系统考勤明细


先通过分列,将内容显示在3列。


因为我们打卡的时候,有的时候会打不止一次,比如50秒打完卡,51秒又不小心按了一次,这就出现了2条记录。对于这种需要重新处理,判断是否为首次出现。


在E2输入公式,并向下填充。首次出现的显示1,否则显示空白。

=IF(COUNTIFS(A$2:A2,A2,B$2:B2,B2,C$2:C2,C2)=1,1,"")


这边采用的是日薪的方法统计工资的,日薪采用随机数,你懂的!



在工资表B3输入公式,并向下填充。上班天数是根据考勤表汇总得到,因为时间段是以半天算,所以最后面乘以0.5。

=SUMIF(考勤记录!A:A,A3,考勤记录!E:E)*0.5


日薪:

=VLOOKUP(A3,日薪对应表!A:B,2,0)


基本工资:

=ROUND(B3*C3,0)


我接触过的考勤系统都算比较标准的,遇到下面这种考勤系统,我就跪了!


一天打N次卡,而且还放在一个单元格,这种系统要你何用?