ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

函数识别早班,中班,晚班

[复制链接]

TA的精华主题

TA的得分主题

发表于 2024-1-19 17:03 | 显示全部楼层 |阅读模式
数据大概每月3500-4000条,手动核实比较麻烦而且容易错和慢,有没办法自动识别,救助各位,具体内容看附件,谢谢各位!!

202312出勤记录.rar

10.67 KB, 下载次数: 38

TA的精华主题

TA的得分主题

 楼主| 发表于 2024-2-2 15:47 | 显示全部楼层
大家帮看看

TA的精华主题

TA的得分主题

发表于 2024-2-3 18:05 | 显示全部楼层
条件有点复杂,公式搞起来不方便,用WPS里的JSA帮你写了个宏,效果如下图所示——


微信截图_20240203174355.png

微信截图_20240203174428.png


240203_出勤记录.rar

13.04 KB, 下载次数: 16

TA的精华主题

TA的得分主题

 楼主| 发表于 2024-2-5 13:42 | 显示全部楼层
sunya_0529 发表于 2024-2-3 18:05
条件有点复杂,公式搞起来不方便,用WPS里的JSA帮你写了个宏,效果如下图所示——

情况确实是很复杂,实际情况比这复杂的多,因为有些岗位因为实际需要,白班和晚班上班时间都有不同的调整,这个宏已经可以解决90%以上的问题了,还是要感谢你。

TA的精华主题

TA的得分主题

 楼主| 发表于 2024-12-13 17:35 | 显示全部楼层
sunya_0529 发表于 2024-2-3 18:05
条件有点复杂,公式搞起来不方便,用WPS里的JSA帮你写了个宏,效果如下图所示——

你好最近我用这个识别班次,有错误跳出来,能帮解决一下么
错误.png

TA的精华主题

TA的得分主题

 楼主| 发表于 2024-12-13 17:58 | 显示全部楼层
本帖最后由 lidedong82 于 2024-12-13 17:59 编辑
lidedong82 发表于 2024-12-13 17:35
你好最近我用这个识别班次,有错误跳出来,能帮解决一下么

附件我上传了

240209_出勤记录.rar

103.82 KB, 下载次数: 1

附件

TA的精华主题

TA的得分主题

发表于 2024-12-14 12:45 | 显示全部楼层

日期格式需要处理一下,同时考勤时间里有空记录,所以代码也要做一下容错处理。
不同班次的判断条件,可以根据实际情况,你自己调整一下。

  1. function 识别班次() {
  2.     const awf = Application.WorksheetFunction;
  3.     const db = Range("A1").CurrentRegion.Columns("A:C")().slice(1);
  4.     const res = [];
  5.     const day = (d) => awf.Text(d, "dd");
  6.     db.forEach((r, i) => {
  7.         let arr = r[2]?.split(";").map(x => x.replace(/:/g, ""));
  8.         let str = "";
  9.         if (r[2]?.length) {
  10.             arr.forEach(y => {
  11.                 if (y <= 80000 && y > 70000) {
  12.                     str += `+${day(r[0])}日早班上班卡`;
  13.                 } else if (y <= 160000 && y > 150000) {
  14.                     str += `+${day(r[0])}日中班上班卡`;
  15.                 } else if (y <= 180000 && y > 160000) {
  16.                     str += `+${day(r[0])}日早班下班卡`;
  17.                 } else if (y <= 240000 && y > 230000) {
  18.                     str += `+${day(r[0])}日晚班上班卡`;
  19.                 } else if (y <= 10000 && y > 0) {
  20.                     try {
  21.                         if (db[i + 1][1] == r[1]) str += `+${day(db[i + 1][0])}日中班下班卡`;
  22.                     } catch { }
  23.                 } else if (y <= 90000 && y > 80000) {
  24.                     try {
  25.                         if (db[i + 1][1] == r[1]) str += `+${day(db[i + 1][0])}日晚班下班卡`;
  26.                     } catch { }
  27.                 } else {
  28.                     str += `+[${awf.Text(y, "#:##:##")}]`;
  29.                 }
  30.             });
  31.         }
  32.         res.push([str.replace("+", "")]);
  33.     });
  34.     Range("D2").Resize(res.length, 1).Value2 = res;
  35. }
复制代码
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-12-25 02:45 , Processed in 0.039788 second(s), 10 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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