ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[求助] 老师帮忙看看代码,判断出来时间前后都差1分钟

[复制链接]

TA的精华主题

TA的得分主题

发表于 2018-7-2 13:26 | 显示全部楼层 |阅读模式
本帖最后由 tengyt 于 2018-7-4 18:52 编辑

Sub bijiao()



121.rar

55.24 KB, 下载次数: 8

TA的精华主题

TA的得分主题

发表于 2018-7-2 13:51 | 显示全部楼层
'条件好像有问题,星期五为什么有上午,自己测试一下

Option Explicit

Sub test()
  Dim mark, i, t, arr
  arr = Range("j2:l" & Cells(Rows.Count, "j").End(xlUp).Row)
  mark = "一二三四五六日"
  For i = 1 To UBound(arr, 1)
    t = InStr(mark, Right(arr(i, 2), 1))
    Select Case t
    Case 1
      arr(i, 1) = IIf(CDate(arr(i, 1)) >= #9:00:00 AM# And _
        CDate(arr(i, 1)) <= #10:00:00 AM#, "按时", "未按时")
    Case 2 To 4, 6, 7
      If arr(i, 3) = "上午" Then
        arr(i, 1) = IIf(CDate(arr(i, 1)) >= #9:00:00 AM# And _
        CDate(arr(i, 1)) <= #10:00:00 AM#, "按时", "未按时")
      Else
        arr(i, 1) = IIf(CDate(arr(i, 1)) >= #2:30:00 PM# And _
        CDate(arr(i, 1)) <= #3:30:00 PM#, "按时", "未按时")
      End If
    Case 5
      arr(i, 1) = IIf(CDate(arr(i, 1)) >= #3:30:00 PM# And _
        CDate(arr(i, 1)) <= #5:00:00 PM#, "按时", "未按时")
    End Select
  Next
  [m2].Resize(UBound(arr, 1)) = arr
End Sub

评分

2

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2018-7-4 01:15 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
上面代码在上表运行很好,谢谢老师
我插入两列后,你帮我写的不能运行了,我还做了列调整
增加了当时间为00:00:00则显示“无考勤记录”

一把小刀闯天下老师,再出手帮忙改改,谢谢了

12112.rar

57.88 KB, 下载次数: 2

TA的精华主题

TA的得分主题

发表于 2018-7-4 13:23 | 显示全部楼层
本帖最后由 一把小刀闯天下 于 2018-7-4 13:25 编辑
tengyt 发表于 2018-7-4 12:43
上面代码在上表运行很好,谢谢老师

我插入两列后,你帮我写的代码不能运行了,我还做了列调整
'规则是否有问题,跟你的示例结果相差很多。

'代码按你规则来写的看不出有什么毛病,自己好好确认一下。

Option Explicit

Sub test()
  Dim mark, i, t, arr, a, b
  arr = Range("l2:o2" & Cells(Rows.Count, "l").End(xlUp).Row)
  mark = "一二三四五六日"
  For i = 1 To UBound(arr, 1)
    If arr(i, 1) = #12:00:00 AM# Then
      arr(i, 1) = "无考勤记录"
    Else
      t = InStr(mark, Right(arr(i, 3), 1))
      Select Case t
      Case 1: a = #9:00:00 AM#: b = #10:00:00 AM#
      Case 2 To 4, 6, 7
        If arr(i, 4) = "上午" Then
          a = #9:00:00 AM#: b = #10:00:00 AM#
        Else
          a = #2:30:00 PM#: b = #3:30:00 PM#
        End If
      Case 5: a = #3:30:00 PM#: b = #5:00:00 PM#
      End Select
      arr(i, 1) = IIf(CDate(arr(i, 1)) >= a And CDate(arr(i, 1)) <= b, "按时", "未按时")
    End If
  Next
  [s2].Resize(UBound(arr, 1)) = arr  '把s2 改成m2就可以,这里做比较用
End Sub

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2018-7-2 14:08 | 显示全部楼层

TA的精华主题

TA的得分主题

 楼主| 发表于 2018-7-3 14:18 | 显示全部楼层

TA的精华主题

TA的得分主题

 楼主| 发表于 2018-7-4 01:11 | 显示全部楼层
一把小刀闯天下 发表于 2018-7-2 13:51
'条件好像有问题,星期五为什么有上午,自己测试一下

Option Explicit

老师上面代码运行很好,太谢谢你了
我新插入两列后,你帮我写的不能运行了,还有我做了列调整
新增加了当时间为00:00:00则显示“无考勤记录”
老师,再出手改改,谢谢了

12112.rar

57.88 KB, 下载次数: 0

TA的精华主题

TA的得分主题

发表于 2018-7-4 08:23 | 显示全部楼层
你做的还是太麻烦啊?比如8点上班  ,同一天7;50  和8;10 打卡2次 就有闲着没事(或忘记的) 你怎么判断啊!你的考勤还是需要挨个看啊

TA的精华主题

TA的得分主题

发表于 2018-7-4 08:25 | 显示全部楼层
tengyt 发表于 2018-7-4 01:15
上面代码在上表运行很好,谢谢老师我插入两列后,你帮我写的不能运行了,我还做了列调整增加了当时间为00:0 ...

学会“评分”,很多问题迎刃而解!

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2018-7-4 08:39 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
你看看我做的 你可以修改下!看看怎么样

考勤2.1 - 副本.rar

141.66 KB, 下载次数: 6

评分

1

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2018-7-4 12:43 | 显示全部楼层
一把小刀闯天下 发表于 2018-7-2 13:51
'条件好像有问题,星期五为什么有上午,自己测试一下

Option Explicit

上面代码在上表运行很好,谢谢老师

我插入两列后,你帮我写的代码不能运行了,我还做了列调整
新增加了当时间为00:00:00则显示“无考勤记录”

一把小刀闯天下老师,再出手帮忙改改,谢谢了

12112.rar

57.88 KB, 下载次数: 1

您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2025-1-4 12:20 , Processed in 0.031211 second(s), 18 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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