Excel中RANDARRAY函数integer参数为何生成超出指定范围的日期?
问题重现
在Excel中,基于以下单元格值生成随机工作日:
| 开始日期 | 结束日期 | 数量 | 随机日期 |
|---|---|---|---|
| 2/1/2022 | 1/31/2023 | 10 |
使用公式:=WORKDAY(RANDARRAY(10,1,A2,B2),1)
生成的日期均在2/1/2022到1/31/2023范围内,符合预期。但当启用RANDARRAY的whole_number(整数)参数设为TRUE时:=WORKDAY(RANDARRAY(10,1,A2,B2,TRUE),1)
偶尔会生成超出范围的日期(如2/1/2023)。
注:结束日期1/31/2023并非周末,未设置节假日。
原因分析
Excel中日期本质是序列号,例如1/31/2023对应的序列号为44967:
- 当
RANDARRAY(...,TRUE)时,会生成包含上限值(即B2对应的序列号44967)的随机整数,也就是可能直接抽到1/31/2023。 WORKDAY(date, 1)的作用是返回date之后的第1个工作日,1/31/2023是周二,加1个工作日就是2/1/2023,自然超出了原结束日期范围。- 当
whole_number设为FALSE时,RANDARRAY生成的是介于A2和B2之间的小数(例如44966.99999),WORKDAY会自动将其取整为44966(即1/30/2023),加1个工作日后得到1/31/2023,不会超出范围。
你的测试结果也验证了这一点:单独对1/31/2023使用WORKDAY(D1,1)会得到2/1/2023,而移除WORKDAY后,RANDARRAY无论是否设为整数,都不会生成超出B2的日期。
解决方案
针对这个问题,有两种直接的解决方式:
方式1:调整RANDARRAY的上限值
将RANDARRAY的上限从B2改为B2-1,这样生成的最大整数是1/30/2023(序列号44966),加1个工作日后正好是1/31/2023,不会超出范围:=WORKDAY(RANDARRAY(10,1,A2,B2-1,TRUE),1)
方式2:用MIN限制结果上限
如果不想调整RANDARRAY的范围,可以用MIN函数将结果限制在B2以内:=MIN(WORKDAY(RANDARRAY(10,1,A2,B2,TRUE),1),B2)
两种方式都能确保生成的随机工作日始终在A2到B2的范围内。
内容的提问来源于stack exchange,提问作者vrabackj
相关产品推荐
相关产品推荐

