1234

ExcelHome技术论坛

用户名  找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[求助] 求助自动生成逐天调休方式

[复制链接]

TA的精华主题

TA的得分主题

 楼主| 发表于 2025-2-23 18:11 | 显示全部楼层
edwin11891 发表于 2025-2-23 18:07
如果是WPS新版,还可以:
a,trimrange(A2:B1000),b,trimrange(C2:D1000)

感谢,试了一下,可以

TA的精华主题

TA的得分主题

发表于 2025-2-24 09:51 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
baoxuehero 发表于 2025-2-23 18:04
大神,如果增加一列姓名列,一列假别,请问代码该如何完善,附件已更新

在5楼老师的方法基础上修改完成,简练了一下,还是火车:

  1. =LET(fxyz,LAMBDA(x,y,z,LET(a,x,b,y,sName,z,fx,LAMBDA(x,BYROW(x,CONCAT)),fy,LAMBDA(x,y,SEQUENCE(x-y+1,,y)),fz,LAMBDA(x,y,HSTACK(x,IF(x,y))),t,fy(INDEX(b,1),INDEX(a,1)),c,SORT(VSTACK(fz(t,"上午"),fz(t,"下午"))),d,fx(c),e,CHOOSEROWS(c,fy(MATCH(CONCAT(INDEX(b,1,)),d,),MATCH(CONCAT(INDEX(a,1,)),d,))),f,GROUPBY(TAKE(e,,1),TAKE(e,,-1),ARRAYTOTEXT,0,0),g,IFNA(HSTACK(sName,TAKE(f,,1),SUBSTITUTE(TAKE(f,,-1),"上午, 下午","全天")),sName),g)),DROP(REDUCE("",A2:A5,LAMBDA(x,y,VSTACK(x,fxyz(OFFSET(y,,2,,2),OFFSET(y,,4,,2),OFFSET(y,,,,2))))),1))
复制代码


微信图片_20250224094830.png

评分

1

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2025-2-24 10:26 | 显示全部楼层
edwin11891 发表于 2025-2-24 09:51
在5楼老师的方法基础上修改完成,简练了一下,还是火车:

能实现目标就好,还要啥自行车,感谢大神的无私解答

TA的精华主题

TA的得分主题

发表于 2025-2-24 13:44 | 显示全部楼层
baoxuehero 发表于 2025-2-23 18:04
大神,如果增加一列姓名列,一列假别,请问代码该如何完善,附件已更新

下班回家没电脑,也没怎么上论坛看,上班也就有空来论坛学习的,这个下面大佬回复的就可以了,我要改的话只会后面再加函数让我从头开始改的话有点头大哈,范围选择可以用TRIMRANGE()函数多框选点。
  1. =LET(a,C2:D5,b,E2:F5,j,A2:B5,fx,LAMBDA(x,BYROW(x,CONCAT)),fy,LAMBDA(x,y,SEQUENCE(x-y+1,,y)),fz,LAMBDA(x,y,HSTACK(x,IF(x,y))),t,fy(MAX(TAKE(b,,1)),MIN(TAKE(a,,1))),c,SORT(VSTACK(fz(t,"上午"),fz(t,"下午"))),d,fx(c),e,DROP(REDUCE("",SEQUENCE(ROWS(a)),LAMBDA(m,n,VSTACK(m,CHOOSEROWS(c,fy(MATCH(CONCAT(INDEX(b,n,)),d,),MATCH(CONCAT(INDEX(a,n,)),d,)))))),1),w,DROP(REDUCE("",UNIQUE(TAKE(e,,1)),LAMBDA(s,k,VSTACK(s,IF(ROWS(FILTER(e,TAKE(e,,1)=k))>1,HSTACK(k,"全天"),FILTER(e,TAKE(e,,1)=k))))),1),gy,LAMBDA(y,MAP(TAKE(w,,1),LAMBDA(x,FILTER(y,(x>=TAKE(a,,1))*(x<=TAKE(b,,1)))))),HSTACK(gy(TAKE(j,,1)),gy(TAKE(j,,-1)),w))
复制代码

评分

1

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2025-2-24 16:23 | 显示全部楼层
溺水鱼 发表于 2025-2-24 13:44
下班回家没电脑,也没怎么上论坛看,上班也就有空来论坛学习的,这个下面大佬回复的就可以了,我要改的话 ...

再次感谢,应该一次性把需求提完的,好在有你们的耐心解答,问题完美解决

TA的精华主题

TA的得分主题

 楼主| 发表于 2025-2-26 17:18 | 显示全部楼层
本帖最后由 baoxuehero 于 2025-2-26 17:20 编辑
edwin11891 发表于 2025-2-24 09:51
在5楼老师的方法基础上修改完成,简练了一下,还是火车:

大神,不好意思,实际工作中发现还要增加一列备注,有空的时候,麻烦再看看代码如何完善,不胜感激!
微信图片_20250226171648.png

自动生成逐天调休方式.zip

11.25 KB, 下载次数: 4

TA的精华主题

TA的得分主题

发表于 2025-2-26 19:24 | 显示全部楼层
baoxuehero 发表于 2025-2-26 17:18
大神,不好意思,实际工作中发现还要增加一列备注,有空的时候,麻烦再看看代码如何完善,不胜感激!

直接加一列就好了:
  1. =LET(fxyz,LAMBDA(x,y,z,xx,LET(a,x,b,y,sName,z,Mem,xx,fx,LAMBDA(x,BYROW(x,CONCAT)),fy,LAMBDA(x,y,SEQUENCE(x-y+1,,y)),fz,LAMBDA(x,y,HSTACK(x,IF(x,y))),t,fy(INDEX(b,1),INDEX(a,1)),c,SORT(VSTACK(fz(t,"上午"),fz(t,"下午"))),d,fx(c),fm,LAMBDA(x,MATCH(CONCAT(INDEX(x,1,)),d,)),e,CHOOSEROWS(c,fy(fm(b),fm(a))),f,GROUPBY(TAKE(e,,1),TAKE(e,,-1),ARRAYTOTEXT,0,0),g,CHOOSE({1,2,3,4,5},TAKE(sName,,1),TAKE(sName,,-1),TAKE(f,,1),SUBSTITUTE(TAKE(f,,-1),"上午, 下午","全天"),Mem),g)),REDUCE(I1:M1,A2:A5,LAMBDA(x,y,VSTACK(x,fxyz(OFFSET(y,,2,,2),OFFSET(y,,4,,2),OFFSET(y,,,,2),OFFSET(y,,6)&"")))))
复制代码
微信图片_20250226192425.png

评分

1

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2025-2-26 19:35 | 显示全部楼层
edwin11891 发表于 2025-2-26 19:24
直接加一列就好了:

感谢大神,请收下我的膝盖

TA的精华主题

TA的得分主题

 楼主| 发表于 2025-3-29 19:03 | 显示全部楼层
溺水鱼 发表于 2025-2-23 13:40
前面理解错误,想了半天= =只能搞个笨办法

大神,您好,最开始提的需求,您写的这个公式可以完美运行,后面增加了需求,麻烦看看能不能再修改一下,新的需求请看图片和附件,另一个大神其实也实现了,但是使用了OFFSET函数,有个问题,在工作表中使用Private Sub Worksheet_Calculate()监控表格变化,别的工作表单元格数据变化,也会触发该工作表重新计算,数据量大的时候,会很卡,再次感谢!
  1. =LET(a,TRIMRANGE(A2:B1000),b,TRIMRANGE(C2:D1000),fx,LAMBDA(x,BYROW(x,CONCAT)),fy,LAMBDA(x,y,SEQUENCE(x-y+1,,y)),fz,LAMBDA(x,y,HSTACK(x,IF(x,y))),t,fy(MAX(TAKE(b,,1)),MIN(TAKE(a,,1))),c,SORT(VSTACK(fz(t,"上午"),fz(t,"下午"))),d,fx(c),e,DROP(REDUCE("",SEQUENCE(ROWS(a)),LAMBDA(m,n,VSTACK(m,CHOOSEROWS(c,fy(MATCH(CONCAT(INDEX(b,n,)),d,),MATCH(CONCAT(INDEX(a,n,)),d,)))))),1),DROP(REDUCE("",UNIQUE(TAKE(e,,1)),LAMBDA(s,k,VSTACK(s,IF(ROWS(FILTER(e,TAKE(e,,1)=k))>1,HSTACK(k,"全天"),FILTER(e,TAKE(e,,1)=k))))),1))
复制代码
WXWorkLocal_17432454208468.png

自动生成逐天调休方式.zip

11.25 KB, 下载次数: 1

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

本版积分规则

1234

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

GMT+8, 2025-4-1 13:34 , Processed in 0.025661 second(s), 9 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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