ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 效率神器,一键搞定繁琐工作
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
让更多数据处理,一键完成 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
12
返回列表 发新帖
楼主: sulli112

[求助] 计算加班时间

[复制链接]

TA的精华主题

TA的得分主题

发表于 2021-7-30 17:27 | 显示全部楼层
sulli112 发表于 2021-7-30 17:05
我查看了一下,假如打卡时间多3分钟的话,直接为0.5H,请问这个0.5H可以设定范围吗?15-30分钟内才四舍五 ...

你自己好好看看吧,代码是严格按你3楼的说法来写的,绝对不会出现你说的情况的。

TA的精华主题

TA的得分主题

发表于 2021-7-30 17:27 | 显示全部楼层
  fz = Minute(sf)
            If fz < 15 Then
                js = 0
            ElseIf fz >= 15 And fz <= 30 Then
                js = 0.5
            ElseIf fz > 30 Then
                js = 1
            End If

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2021-7-30 17:28 | 显示全部楼层

TA的精华主题

TA的得分主题

 楼主| 发表于 2021-7-30 19:20 | 显示全部楼层
3190496160 发表于 2021-7-30 17:28
我想这几句你应该是可以看懂的吧。

谢谢啦,我看懂了,刚开始没有留意到这个,我修改了一下达到我想要的结果了,非常感谢

TA的精华主题

TA的得分主题

发表于 2021-7-30 20:20 | 显示全部楼层
sulli112 发表于 2021-7-30 19:20
谢谢啦,我看懂了,刚开始没有留意到这个,我修改了一下达到我想要的结果了,非常感谢

呵呵呵,还需要你修改吗???

TA的精华主题

TA的得分主题

 楼主| 发表于 2021-7-30 21:47 | 显示全部楼层
3190496160 发表于 2021-7-30 20:20
呵呵呵,还需要你修改吗???

不是,我只是改了一下那个分钟数,其他没有修动大神您的数据,不好意思,可能言语冒犯到您了

TA的精华主题

TA的得分主题

 楼主| 发表于 2021-8-26 14:23 | 显示全部楼层
  1. Sub 考勤统计()
  2. Dim d As Object
  3. Dim ar As Variant
  4. Dim i As Long
  5. Dim br()
  6. Set d = CreateObject("scripting.dictionary")
  7. With Sheets("考勤")
  8.     r = .Cells(Rows.Count, 1).End(xlUp).Row
  9.     .Range("i2:j" & r) = Empty
  10.     ar = .[a1].CurrentRegion
  11.     ReDim br(1 To UBound(ar), 1 To 6)
  12.     For i = 2 To UBound(ar)
  13.         If Trim(ar(i, 2)) <> "" And Trim(ar(i, 4)) <> "" Then
  14.            rq = CDate(Format(ar(i, 4), "yyyy/mm/dd"))
  15.            zf = Trim(ar(i, 2)) & "|" & rq
  16.            t = d(zf)
  17.            If t = "" Then
  18.                 k = k + 1
  19.                 d(zf) = k
  20.                 t = k
  21.                 For j = 1 To 3
  22.                     br(k, j) = ar(i, j)
  23.                 Next j
  24.                 br(k, 4) = rq
  25.                 br(k, 5) = Weekday(rq, 2)
  26.             End If
  27.             sf = CDate(Format(ar(i, 4), "h:mm:ss"))
  28.             fz = Minute(sf)
  29.             If fz < 15 Then
  30.                 js = 0
  31.             ElseIf fz >= 15 And fz <= 45 Then
  32.                 js = 0.5
  33.             ElseIf fz > 45 Then
  34.                 js = 1
  35.             End If
  36.             If br(t, 5) < 6 Then
  37.                 br(t, 6) = Hour(sf) - Hour("8:00:00") - 9 + js
  38.             Else
  39.                 br(t, 6) = (Hour(sf) - Hour("8:00:00") - 1 + js)
  40.             End If
  41.         End If
  42.     Next i
  43. End With
  44. With Sheets("统计考勤")
  45.      .[a1].CurrentRegion.Offset(1) = Empty
  46.      .[a2].Resize(k, UBound(br, 2)) = br
  47. End With
  48. MsgBox "ok!"
  49. End Sub
复制代码

TA的精华主题

TA的得分主题

发表于 2021-8-29 03:27 | 显示全部楼层

TA的精华主题

TA的得分主题

 楼主| 发表于 2022-2-28 10:43 | 显示全部楼层
  1. Sub 考勤统计()
  2. Dim d As Object
  3. Dim ar As Variant
  4. Dim i As Long
  5. Dim br()
  6. Set d = CreateObject("scripting.dictionary")
  7. With Sheets("考勤")
  8.     r = .Cells(Rows.Count, 1).End(xlUp).Row
  9.     .Range("i2:j" & r) = Empty
  10.     ar = .[a1].CurrentRegion
  11.     ReDim br(1 To UBound(ar), 1 To 6)
  12.     For i = 2 To UBound(ar)
  13.         If Trim(ar(i, 2)) <> "" And Trim(ar(i, 4)) <> "" Then
  14.            rq = CDate(Format(ar(i, 4), "yyyy/mm/dd"))
  15.            zf = Trim(ar(i, 2)) & "|" & rq
  16.            t = d(zf)
  17.            If t = "" Then
  18.                 k = k + 1
  19.                 d(zf) = k
  20.                 t = k
  21.                 For j = 1 To 3
  22.                     br(k, j) = ar(i, j)
  23.                 Next j
  24.                 br(k, 4) = rq
  25.                 br(k, 5) = Weekday(rq, 2)
  26.             End If
  27.             sf = CDate(Format(ar(i, 4), "h:mm:ss"))
  28.             fz = Minute(sf)
  29.             If fz < 15 Then
  30.                 js = 0
  31.             ElseIf fz >= 15 And fz <= 45 Then
  32.                 js = 0.5
  33.             ElseIf fz > 45 Then
  34.                 js = 1
  35.          [color=DarkOrange]   End If
  36.             If br(t, 5) < 6 Then
  37.                 br(t, 6) = Hour(sf) - Hour("8:00:00") - 9 + js
  38.             Else
  39.                 br(t, 6) = (Hour(sf) - Hour("8:00:00") - 1 + js)[/color]
  40.             End If
  41.         End If
  42.     Next i
  43. End With
  44. With Sheets("统计考勤")
  45.      .[a1].CurrentRegion.Offset(1) = Empty
  46.      .[a2].Resize(k, UBound(br, 2)) = br
  47. End With
  48. MsgBox "ok!"
  49. End Sub
复制代码

我想问一下,如果想要将时间改为从18:30开始为加班时间,是不是红色字段修改为 下面这段吗?非常感谢
   End If
            If br(t, 5) < 6 Then
                br(t, 6) = Hour(sf) - Hour("8:00:00") - 10.5 + js
            Else
                br(t, 6) = (Hour(sf) - Hour("8:00:00") - 10.5 + js)
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2024-11-17 11:49 , Processed in 0.046258 second(s), 7 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

快速回复 返回顶部 返回列表