ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[求助] 想通过考勤表里的请假得到请假的时间段

[复制链接]

TA的精华主题

TA的得分主题

发表于 2023-3-1 17:24 | 显示全部楼层 |阅读模式
各位老师们,我想通过考勤表提取到请假的日期时间段,求方法,谢谢

怎么才能提取出请假的时间段

怎么才能提取出请假的时间段

工作簿2.zip

12.82 KB, 下载次数: 7

TA的精华主题

TA的得分主题

发表于 2023-3-1 18:58 | 显示全部楼层

TA的精华主题

TA的得分主题

 楼主| 发表于 2023-3-2 09:26 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2023-3-2 18:58 | 显示全部楼层
任鹏2022 发表于 2023-3-2 09:26
老师可不可以发个附件,公式输入后无法计算显示,#name?谢谢

20230302183557.jpg

230302_提取考勤日期.zip

20.91 KB, 下载次数: 23

评分

1

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2023-3-3 11:17 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助

谢谢老师的赐教,解决了大问题

TA的精华主题

TA的得分主题

 楼主| 发表于 2024-7-1 10:16 | 显示全部楼层
本帖最后由 任鹏2022 于 2024-7-1 10:18 编辑

老师帮帮忙出现新问题了,考勤表里如果用/表示半天,情况分两种
1、如果2023/2/1日的考勤为V/CL,V/CL表示半天出勤半天请事假的这种情况,怎么提取出当天的请假日期2023/2/1-2023/2/1,
2、如果2023/2/1日的考勤为CL/V,CL/V表示半天请事假半天出勤的这种情况,怎么提取出当天的请假日期2023/2/1-2023/2/1,

TA的精华主题

TA的得分主题

发表于 2024-7-1 22:03 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
任鹏2022 发表于 2024-7-1 10:16
老师帮帮忙出现新问题了,考勤表里如果用/表示半天,情况分两种
1、如果2023/2/1日的考勤为V/CL,V/CL表 ...

在WPS里把JSA代码修改一下——


微信截图_20240701220230.png

  1. function YLeave(dat,rng,str){
  2.         let a=dat.Value2.flat();
  3.         let b=rng.Value2.flat();
  4.         let [s,j,ds,de]=['',0,0,0];
  5.         let f=Application.WorksheetFunction
  6.         for(let i=0;i<b.length;i++){
  7.                 if(b[i].includes(str)){
  8.                         j++;
  9.                         if(j==1) ds=a[i];
  10.                         de=a[i];
  11.                 }else{                       
  12.                         if(de>0) s+=f.Text(ds,"yyyy/m/d-")+f.Text(de,"yyyy/m/d")+"\n";
  13.                         [j,ds,de]=[0,0,0];
  14.                 }               
  15.         }       
  16.         return s.slice(0,-1);
  17. }
复制代码


TA的精华主题

TA的得分主题

 楼主| 发表于 2024-7-3 09:41 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
Function YLeaveVBA_Optimized(dat As Variant, rng As Variant, str As String) As String
    Dim a() As Variant
    Dim b() As Variant
    Dim s As String
    Dim j As Integer
    Dim ds As Variant
    Dim de As Variant
    Dim i As Integer
    Dim wsFunc As WorksheetFunction
    Set wsFunc = Application.WorksheetFunction

    a = WorksheetFunction.Transpose(dat.Value2)
    b = WorksheetFunction.Transpose(rng.Value2)

    '估字符串长度
    Dim estimatedLength As Long
    estimatedLength = 1000  '据实际情况预估一个合理的初始长度
    s = String(estimatedLength, " ")

    j = 0
    ds = ""
    de = ""

    For i = 1 To UBound(b)
        If InStr(1, b(i, 1), str) > 0 Then
            j = j + 1
            If j = 1 Then
                ds = a(i, 1)
                de = a(i, 1)
            End If
        Else
            If de <> "" Then
                Dim formattedStart As String
                Dim formattedEnd As String
                formattedStart = wsFunc.Text(ds, "yyyy/m/d-")
                formattedEnd = wsFunc.Text(de, "yyyy/m/d")
                s = s & formattedStart & formattedEnd & vbNewLine
            End If
            j = 0
            ds = ""
            de = ""
        End If
    Next i

    YLeaveVBA_Optimized = Left(s, Len(s) - 2)
End Function

TA的精华主题

TA的得分主题

 楼主| 发表于 2024-7-3 09:42 | 显示全部楼层
Function YLeaveVBA_Optimized(dat As Variant, rng As Variant, str As String) As String
    Dim a() As Variant
    Dim b() As Variant
    Dim s As String
    Dim j As Integer
    Dim ds As Variant
    Dim de As Variant
    Dim i As Integer
    Dim wsFunc As WorksheetFunction
    Set wsFunc = Application.WorksheetFunction

    a = WorksheetFunction.Transpose(dat.Value2)
    b = WorksheetFunction.Transpose(rng.Value2)

    '估字符串长度
    Dim estimatedLength As Long
    estimatedLength = 1000  '据实际情况预估一个合理的初始长度
    s = String(estimatedLength, " ")

    j = 0
    ds = ""
    de = ""

    For i = 1 To UBound(b)
        If InStr(1, b(i, 1), str) > 0 Then
            j = j + 1
            If j = 1 Then
                ds = a(i, 1)
                de = a(i, 1)
            End If
        Else
            If de <> "" Then
                Dim formattedStart As String
                Dim formattedEnd As String
                formattedStart = wsFunc.Text(ds, "yyyy/m/d-")
                formattedEnd = wsFunc.Text(de, "yyyy/m/d")
                s = s & formattedStart & formattedEnd & vbNewLine
            End If
            j = 0
            ds = ""
            de = ""
        End If
    Next i

    YLeaveVBA_Optimized = Left(s, Len(s) - 2)
End Function

TA的精华主题

TA的得分主题

 楼主| 发表于 2024-7-3 09:43 | 显示全部楼层
sunya_0529 发表于 2024-7-1 22:03
在WPS里把JSA代码修改一下——

谢谢老师的帮助,
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-11-21 16:51 , Processed in 0.040401 second(s), 11 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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