如何从Excel / VBA工作表中的列表中找到给定计划日期的可用时隙列表?

时间:2019-06-11 00:45:31

标签: excel vba

我已经有了预定约会的列表,并且希望能够显示7小时30分钟至5:00下午之间 2小时约会的所有可能的时间段。视觉并且能够通过黑客获得它,但是我只需要阅读下表就可以使它工作

预定的约会 |---------------------|-------------------| | Start Date/Time | End Date/Time | | 6/12/2019 7:30 AM | 6/12/2019 8:30 AM | | 6/12/2019 8:45 AM | 6/12/2019 9:15 AM | | 6/12/2019 3:00 PM | 6/12/2019 3:30 PM | | 6/12/2019 3:45 PM | 6/12/2019 4:15 PM | | 6/12/2019 4:15 PM | 6/12/2019 5:00 PM | |---------------------|-------------------|

预期结果:

  • 2019/6/12上午9:15
  • 2019/6/12上午9:30
  • 2019/6/12上午9:45
  • 2019/6/12上午10:00
  • 2019/6/12 10:15
  • 2019年6月12日上午10:30
  • 2019年6月12日上午10:45
  • 2019/6/12上午11:00
  • 2019/6/12上午11:15
  • 2019年6月12日上午11:30
  • 2019/6/12上午11:45
  • 2019/6/12下午12:00
  • 2019/6/12下午12:15
  • 2019/6/12下午12:30
  • 2019/6/12下午12:45
  • 2019/12/12下午1:00

1 个答案:

答案 0 :(得分:1)

直接获得该列表将需要VBA,这是可能的,但是StackOverflow并不是为您服务的写代码。如果您坚持使用代码,我们会为您提供帮助,但是您首先需要知道如何编码,并已开始。

也就是说,如果您接受一个稍微简单的解决方案,那么一个公式可以为您提供所需的结果:

  1. 将约会范围转换为列标题为“开始”和“结束”的数据表
  2. 将表名称设置为“约会”
  3. 将新的约会长度(2)存储在一个单元格中,并命名为“ Length”
  4. 从A1开始创建所有可能的约会开始时间的列表
  5. 在第一次在B1中输入此公式,然后按 CTRL + SHIFT + ENTER 进行保存:

=AND((ROUND(Appointments[Start],4)>=ROUND(A1+Length/24,4))+(ROUND(Appointments[End],4)<=ROUND(A1,4)),ROUND(A1-TRUNC(A1),4)<=ROUND((17-Length)/24,4))

然后针对每个时间段填写该公式,对于可用时间段,它将为TRUE。

对于每个可能的时隙,该公式将检查所有现有约会是否在该时隙或该时隙之前完成,或者在该时隙之后2个小时或更长时间开始。它还会检查在每天下午5点结束之前还有至少2个小时的时间。该公式通过更改“长度”单元格中的值来处理新约会所需的不同长度。

添加了ROUND函数,以消除分数/时间的浮点精度问题,这些问题在每次2次相同时并不总是能够正确识别。

enter image description here