打酱油,打酱油,打酱油……
有一天,有一张数千行的表格,上面有那么一列——“登记时间”,这一列需要填充为11月份工作日上班时间中的某一时间点,格式为yyyy-MM-dd HH:mm:ss,年月日时分秒都有了……
这一步用到了Excel中的WORKDAY()函数,该函数可以返回指定日期前后n个工作日的具体日期,格式如下:
WORKDAY(起始日期,天数,非工作日列表)
打开日历,我们发现11月份工作日共有21天,周末有9天,
我们可以把起始日期设置为2019-11-1,
天数使用随机数函数RANDBETWEEN()生成,格式如下:
RANDBETWEEN(最小值,最大值)
当然,这个函数中的两个参数就要填写0和20。
非工作日列表,需要我们在Excel工作表某区域内单独列出来,比如放在Sheet2中:
到这儿,工作日的随机生成就搞定啦:
=WORKDAY("2019-11-1",RANDBETWEEN(0,20),Sheet2!$A$1:$A$9)
在Excel中,一天之内所有时间点都可以表示为一个小数值,不信?你在Excel中输入一个时间,比如8:00:00,右键单击该单元格,设置单元格格式为“常规”,确定,看看是不是变为小数值了?
我把常用的一些时间点的数值列举出来:
为保证生成的时间点落在工作时间段内,我们只需要随机生成这个小数就可以啦!
比如要生成上午8:30至11:30内的时间点,只要生成一个0.3542至0.4791之间的小数就可以,简单,还是请出RANDBETWEEN()函数。具体怎么生成呢?看下面:
RANDBETWEEN(3542,4791)/10000
如果要生成下午13:30到17:00的时间点呢?如下:
RANDBETWEEN(5625,7083)/10000
问题来了,如何能够同时生成上午和下午的时间点呢?我们还是让电脑来决定吧!
IF(RANDBETWEEN(1,2)=2,RANDBETWEEN(3542,4930),RANDBETWEEN(5625,7083))/10000
看明白了吗?先从1和2中间生成一个随机数,这个随机数如果为2,就生成一个上午的时间点,否则就生成一个下午的时间点。
当然,为了保证格式美观,我们还需要用TEXT()函数规范一下生成的文本格式,在这里,日期用"yyyy-MM-dd"格式,时间用"hh:mm:ss"格式。完整公式如下:
=TEXT(WORKDAY("2019-11-1",RANDBETWEEN(0,20),Sheet2!$A$1:$A$9),"yyyy-MM-dd")&" "&TEXT(IF(RANDBETWEEN(1,2)=2,RANDBETWEEN(3542,4930),RANDBETWEEN(5625,7083))/10000,"hh:mm:ss")
看看效果吧!
不停地按F9,不停地刷新哦!