专栏名称: Excel技巧精选
Excel资源站点,学习Excel技巧的最佳公众号。
51好读  ›  专栏  ›  Excel技巧精选

你要的考勤表来了!

Excel技巧精选  · 公众号  · Excel  · 2017-08-06 09:14

正文

来自:Excel不加班(ID:Excelbujiaban)

作者:卢子


考勤表,既然你要,我就总结一些我用过的考勤表。考勤表比较特殊,每个公司都略有差异,仅供参考。


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,"")


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








请到「今天看啥」查看全文