【问题标题】:Check range of times in excel to ensure they are within core hours检查 excel 中的时间范围以确保它们在核心小时内
【发布时间】:2022-01-25 16:13:18
【问题描述】:

我正在尝试检查图片中的以下时间是否在军事时间 0930 - 1430 的某个核心小时内。这会中断,因为您没有在 930 打卡,因此错过了半小时的核心时间。

目前我正在使用 min/max 来检查那些在本示例之前有效的列。任何想法都会很棒!

这是一个例子:

这是输出的样子(即使数学是错误的。

应该说 CR Missed=1.5(核心时间从 930 开始,打卡时间是 11)。

我正在使用的当前代码

=IF(AND(COUNTA(J8:J12)<>0,COUNTA(K8:K12)<>0),IF(AND($AQ$15>=MIN(J8:J12),$AR$15<=MAX(K8:K12)),"","CR Missed = "),"")

编辑:总和不相关(它只是添加时间)AQ=0930 和 AR=1430(“核心时间”的范围)

基本上,您可以在每一行中输入不同的时间,我试图确保您在 0930 和 1430 的所需时间之间“登录”。目前,最小/最大方程有效,但不涵盖所示示例我实际上错过了 30 分钟(在 0900 注销并在 1000 重新登录)。

我觉得我缺少一些逻辑或命令。抱歉,希望对您有所帮助。

来自评论并增加清晰度,添加了输出示例

  1. 可以有更多行;我最多有 5 个(只是隐藏)
  2. 时间不一定要按顺序排列,但通常是这样输入的。
  3. 不,这些在技术上是不同的时间码(请假/病假/常规),例如,您不会重叠病假和请假

已解决

感谢大家的帮助!

我最终使用的函数是 Ron 的示例,但有所不同。正如他的例子所示,在一个时间范围内工作了多少小时;我想显示有多少人失踪了;而且由于可能会发生多次签入/签出,因此我只覆盖了所有可用的插槽。

=ABS((5-(MAX(MIN(EndTime,K9)-MAX(StartTime,J9),0)*24))-(5-(MAX(MIN(EndTime,K10)-MAX(StartTime,J10),0)*24)))

因此,这将为我提供多次入住和退房所需时间间隔之间错过的小时数。

【问题讨论】:

  • 您能否详细说明应该发生的事情,您的IF 声明目前是做什么的?总和是否相关?另外,AQ15 和 AR15 指的是什么?
  • 我更新了我的主要帖子,但基本上该代码应该显示“错过的核心时间”,如果您输入的时间不包括 0930-1430 间隔,如果您没有错过它们,那么它显示为空白
  • 好的,所以 9:30 到 14:30 之间的每一分钟都需要被“RG”、“TS”和“LG”覆盖。而且因为 9:00 和 10:00 之间有间隔,所以 30 分钟不是“核心时间”。好的,我再试一次。
  • 需要更多信息:是否可以多于(或少于)3 行时间?它们总是按时间顺序排列吗?一行的开始时间可以早于前一行的结束时间吗?
  • 对不起,不够清晰 1.) 可以有更多的行;我最多有 5 个(只是隐藏) 2.)时间不必按顺序排列,但通常就是这样输入的。 3.) 不,这些在技术上是不同的时间代码(请假/生病/常规)例如,您不会重叠生病和请假

标签: excel time


【解决方案1】:

我不清楚你想要输出什么。也许这会让你开始。

Start=> End 计算落入特定范围内的小时数(例如:Core Time):

=MAX(MIN(TIME(14,30,0),End)-MAX(TIME(9,30,0),Start),0)

所以你可以这样做:

【讨论】:

  • 这是让我走上正轨的那个。我认为我的问题最初是我的方法。我从所有的开始时间(寻找最小值)和所有的结束时间(寻找最大值)开始,这让我很难过谢谢你的时间!这让我得到了我需要的方法:我将编辑我的主要帖子以显示修改。
  • @AdamZeid 如果您想计算缺失的核心小时数,只需减去即可。类似=5/24-sum(Core) (Excel 将时间存储为一天的一小部分。所以5/24 = 5 hours
【解决方案2】:

前言

我的方法是寻找第一个覆盖开始时间(9:30)的时间段。

如果我们找到像 (7:00 - 10:00) 这样的时间段,我们需要检查下一个时间段是否从 10:00 开始。

如果下一个时间段覆盖10:00,我们将检查下一个时间段的结束时间。

然后我们重复这个过程,直到检查完所有时隙。如果我们结束的时间大于您的“核心结束时间”(14:30),那么我们知道核心时间的所有时间都已连续覆盖,没有休息(甚至可能更多)。

相反,如果它更小,我们最终得到的值,是他们连续工作没有任何间隙的最后一个时间点。

公式和解释

  • 在 D1 中插入开始时间,在 E1 中插入结束时间。

  • 在 C2 及以下为:=IF(AND($B2&gt;$D1;$D1&gt;=A2);$B2;$D1)

    这是检查我们正在寻找的时间是否在此时间间隔内,如果是,则此值将更改为时隙的结束时间。如果没有,它将保持以前的状态 - 这就是让我们知道并非所有核心时间都已涵盖的原因。

  • D2 及以下的内容很简单:=MAX(D1;C2)(这可以包含在 C1 中,但为了便于阅读和理解,我将其作为单独的列。

  • 最后E4,无论是否已涵盖所有核心时间是:=C4&gt;=E1,即变为TRUEFALSE。如果你想要“CR Missed”,那很简单:=IF(E4;"";"CR Missed")

我意识到这不是很动态,所以如果你有更多的时间段,你将不得不进一步复制公式。

所以,也许这不是最终的解决方案,而是完成这项工作,也许就足以让您扩展。

最好的问候! ^_^

【讨论】:

  • 首先!谢谢你的反馈!我现在正在玩它。如果可能,我会尝试将此检查包含在一行中。一件事,我猜你代码中的分号应该是逗号?
  • 很高兴听到。是的,根据您的 Excel 版本,您可能无法将其放入 1 个单元格中。但就像我提到的,您可以将MAX() 移动到C 列中。关于分号,因为我是瑞典人,所以我用逗号来表示小数。所以为了分隔参数,我们使用分号代替。所以你只需用逗号替换它们就可以了:)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-05-03
  • 1970-01-01
  • 1970-01-01
  • 2021-05-09
  • 2020-07-28
  • 2018-06-22
  • 2023-04-05
相关资源
最近更新 更多