ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[已解决] 如何不用OR函数,满足多个值中的某一个值就返回结果

[复制链接]

TA的精华主题

TA的得分主题

发表于 2020-3-5 09:06 | 显示全部楼层 |阅读模式
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
我要做一个判断:现在有3个人进行倒班,4天换一个班,也就是说,A上4天夜班后,改为4天白班,然后4天中班,如此循环,同样,B上4天白班、4天中班、4天夜班。。。我用了一个MOD函数,和DATEDIF来获取当天谁上夜班、白班和中班。
设置个起始日期,比如昨天,然后用DATEDIF来获取当天和起始日期的天数差,然后用MOD得到天数差和12的余数,因为12天一个循环。余数为0,1,2,3时为A上夜班,4、5、6、7时A上白班,8,9,10,11时A上中班。
我的公式是:C4是起始日期。
  1. =IFS(OR(MOD(DATEDIF(C4,TODAY(),"D"),12)=0,MOD(DATEDIF(C4,TODAY(),"D"),12)=1,MOD(DATEDIF(C4,TODAY(),"D"),12)=2,MOD(DATEDIF(C4,TODAY(),"D"),12)=3),"A",OR(MOD(DATEDIF(C4,TODAY(),"D"),12)=4,MOD(DATEDIF(C4,TODAY(),"D"),12)=5,MOD(DATEDIF(C4,TODAY(),"D"),12)=6,MOD(DATEDIF(C4,TODAY(),"D"),12)=7),"B",OR(MOD(DATEDIF(C4,TODAY(),"D"),12)=8,MOD(DATEDIF(C4,TODAY(),"D"),12)=9,MOD(DATEDIF(C4,TODAY(),"D"),12)=10,MOD(DATEDIF(C4,TODAY(),"D"),12)=0),"C")
复制代码
可以看到,用OR非常麻烦,需要将判断的MOD函数写4遍,现在想问,怎么能简化一下?百度得到用花括号,如下,但结果不对。
  1. =IFS(MOD(DATEDIF(C4,TODAY(),"D"),12)={0,1,2,3},"A",MOD(DATEDIF(C4,TODAY(),"D"),12)={4,5,6,7},"B",MOD(DATEDIF(C4,TODAY(),"D"),12)={8,9,10,11},"C")
复制代码
求助大神。。。

工作簿1.zip

8.08 KB, 下载次数: 6

TA的精华主题

TA的得分主题

发表于 2020-3-5 10:02 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
image.png
其实可以像这样

TA的精华主题

TA的得分主题

发表于 2020-3-5 10:04 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
D8=LOOKUP(1,0/(MOD(DATEDIF($C$4,TODAY(),"D"),12)=ROW($1:$12)-1),{"A";"A";"A";"A";"B";"B";"B";"B";"C";"C";"C";"C"}),其他同理更改ABC顺序即可
image.png

TA的精华主题

TA的得分主题

 楼主| 发表于 2020-3-5 10:20 | 显示全部楼层
INaga2018 发表于 2020-3-5 10:04
D8=LOOKUP(1,0/(MOD(DATEDIF($C$4,TODAY(),"D"),12)=ROW($1:$12)-1),{"A";"A";"A";"A";"B";"B";"B";"B";"C" ...

呃。。能否解释下这个  1,0 啥意思?还有 =ROW($1:$12)-1 。
我改成这样,是不是跟你的差不多。
  1. =LOOKUP(MOD(DATEDIF(C4,TODAY(),"D"),12),{0,1,2,3,4,5,6,7,8,9,10,11},{"A","A","A","A","B","B","B","B","C","C","C","C"})
复制代码

TA的精华主题

TA的得分主题

发表于 2020-3-5 10:46 | 显示全部楼层
_purwind 发表于 2020-3-5 10:20
呃。。能否解释下这个  1,0 啥意思?还有 =ROW($1:$12)-1 。
我改成这样,是不是跟你的差不多。

可以,达到需求就行

TA的精华主题

TA的得分主题

发表于 2020-3-5 11:13 | 显示全部楼层
本帖最后由 libo5563 于 2020-3-5 11:27 编辑

mid(重复(重复a,4次&重复b,4 次&重复c,4次),取整(天数差/12)+1),天数差,1),电脑被家里神兽占着,只好这样了,如果要通用公式,就把+1,换成+2,判断是开头字母第一个位置,套个left,再mid

TA的精华主题

TA的得分主题

 楼主| 发表于 2020-3-5 13:59 | 显示全部楼层
libo5563 发表于 2020-3-5 11:13
mid(重复(重复a,4次&重复b,4 次&重复c,4次),取整(天数差/12)+1),天数差,1),电脑被家里神 ...

呃。。这个翻译看不懂。。

TA的精华主题

TA的得分主题

发表于 2020-3-5 20:20 | 显示全部楼层
image.png
=IF(MOD((COLUMN()-3)+(ROW()-8)*4,12)<4,"A",IF(MOD((COLUMN()-3)+(ROW()-8)*4,12)<8,"B","C"))
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-3-29 04:58 , Processed in 0.046742 second(s), 10 queries , Gzip On, Redis On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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