【问题标题】:Excel: Identify 2+ Separate Instances of Values in a Row for a Given RangeExcel:在给定范围内连续识别 2+ 个单独的值实例
【发布时间】:2017-12-06 07:33:24
【问题描述】:

上图左侧是工作人员的电子表格,顶部是一年中的日子。周末是蓝色的。

对于给定日期范围内的每一行,我希望实现的是识别两个或多个单独的缺勤事件。有些代码符合缺勤条件,即 IL - 疾病,PR - 个人原因,有些代码不符合条件,即 DE - 牙医,MW - 助产士。

顶行是有两个或多个单独缺席的行的一个很好的例子。

一次缺勤不限于一天,因此如果同时缺勤有点像 MA 示例,那么它们将被视为一次缺勤。虽然 MA 不代表生育。

很抱歉没有提供任何代码,因为我不知道从哪里开始。即使是正确方向的提示也会有所帮助。

【问题讨论】:

  • 我建议把它写成一个协议——比如“对于第一个列表中的每个休假,还有另一个休假与其相隔一天或多天,而不是周末” .可能有人可以提供公式解决方案,但 IMO VBA 会更容易。

标签: excel count excel-formula row


【解决方案1】:

您的数据中需要周末吗?

我有一个使用 SUMPRODUCT 的解决方案,但它不会将周末的缺勤作为单个块(例如 MA 块)处理。 Here is a screenshot of some dummy data based on your request.

AI 列中的公式是基于 AI3 中的:

=SUMPRODUCT((B3:AG3<>"-")*(B3:AG3<>"")*(A3:AF3="-")*1)+SUMPRODUCT((B3:AG3<>"-")*(B3:AG3<>"")*(A3:AF3="")*1)

第一个 sumproduct 公式中的第一项确定范围(B 到 AG)中的哪些列没有缺失(用破折号表示)。

第二项确定哪些列是周末(空白)。

第三项确定之前的哪些列(半天)没有缺席(破折号) - 必须在数据之前有一个空白列(即本例中所示的列 A - 这可以隐藏) .

第二个 sumproduct 公式做同样的事情,但第三个术语处理前半天是周末(空白)。

正如您所见,这适用于除 MA 缺席的单个块之外的所有对象。如果您要删除周末列,则可以简化公式。

【讨论】:

  • 我认为这值得为好的基本想法投票。我可以想象您如何使用 networkdays() 或测试工作日的日期来处理周末,但这会增加很多复杂性。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-12-26
  • 1970-01-01
  • 2017-04-27
  • 1970-01-01
  • 1970-01-01
  • 2013-05-12
  • 1970-01-01
相关资源
最近更新 更多