【问题标题】:Countifs Formula with Multiple Criteria具有多个条件的 Countifs 公式
【发布时间】:2017-08-08 12:34:37
【问题描述】:

我知道这里有很多类似的主题提出了类似的问题,但实际上找不到我在寻找什么。

现在我有一个这样的数据数组;

Data Sample

A列和B列分别是公司的进出时间,格式为“时间”。

C 列也被格式化为“时间”并使用以下公式计算:

IF(B1>A1,B1-A1,IF(B1<A1,B1-A1,0))

使用数组中的进入和退出小时数来计算一个人工作了多少小时。

D 列的格式为 General,包含工作人员的公司名称,我只需要。

我尝试做的是这样的表;

Result Table

这里的 A 列是人们一天工作的小时数,从每天 5 小时开始。

要计算每天工作一定小时数的人数,我必须选择小时范围,例如每天 5 小时,我说“从 4:45 到 5:14 工作的人。所以任何人在这之间的时间应该算作他们每天工作 5 小时。我对其他时间采取了类似的方法。

现在我为 R4 列创建的公式是;

COUNTIFS('06.08.2017'!$C$1:$C$300,">="&TIME(4,45,0),'06.08.2017'!$C$1:$C$300,"<="&TIME(5,14,0),'06.08.2017'!$D$1:$D$300,"COMP1")

对于 T4;

 COUNTIFS('06.08.2017'!$C$1:$C$300,">="&TIME(4,45,0),'06.08.2017'!$C$1:$C$300,"<="&TIME(5,14,0),'06.08.2017'!$D$1:$D$300,"COMP2")

我在每个时间间隔重复一次,然后得到一个结果。它非常相似。事实上,COMP2 的总人数是正确的。但它们不适用于 COMP1。

我检查了几乎所有想到的东西,但找不到我犯错的地方。

更新:我试图找出问题所在,并将其缩小到它不计算的值。结果是;我找到了其中一个问题,但找不到第二个问题。

以下是新图片:

第一个问题是第 208 行。在第 208 行,时间是 00:19,使用我在上面 C 列中提到的公式,结果类似于 #####。所以我不得不手动添加日期 01/01/1990 以使公式给我结果。我得到的结果是你可以看到的 15:52:00,这是正确的。但是我在结果页面中使用的COUNTIFS 公式不计算在内,所以我不得不手动编写这个日期以使其计数。因此,我得到了 1 个失踪者。如果您能帮我解决这个问题以自动解决它而不是先更改添加 01/01/1990 然后手动写入时间,我将不胜感激。

现在结果表中缺少另一个人。由于数据范围较小,我手动对每个时间范围进行了颜色分类,并与结果表进行了比较。

问题单元格是R10,这个数字应该是4。但是它是3。所以我手动检查了哪个没有从数据表中计算出来,它来自第222行。我的第一个想法是它是相关的随着时间的推移,所以我尝试了相同范围内的各种时间,但它没有改变。但是当我在 D222 中重写“COMP1”时,它起作用了。

但是为什么呢?那是我的问题。我有很多这样的数据范围需要处理,所以每次尝试捕捉这样的问题对我来说太费时间了,所以我需要找到根本原因。我使用宏来生成 D 列。公司中有两组人,一组名为“XYZ”,另一组为“XYZ-B”,我想将他们转换为一个名为“COMP1”的公司。这是宏:

Sub ChangeCompanies()
'
' ChangeCompanies Macro
'

'
    ActiveCell.Offset(0, 0).Columns("A:A").EntireColumn.Select
    Selection.Replace what:="XYZ'", replacement:="COMP1", lookat:=xlPart, _
        SearchOrder:=xlByRows, MatchCase:=True, SearchFormat:=False, _
        ReplaceFormat:=False
    Selection.Replace what:="XYZ-B", replacement:="COMP1", lookat:=xlPart, _
        SearchOrder:=xlByRows, MatchCase:=True, SearchFormat:=False, _
        ReplaceFormat:=False

End Sub

为什么它对其他所有单元都有效,但对这个无效?

【问题讨论】:

  • comp1 的总人数有什么问题?是不是太多了,太少了?
  • 您显示了 T4 的公式。 R5中真正的公式是什么?
  • @Luuklag 似乎有人失踪了。不多,8个人。我试图按照一个模式来看看我是否能看到这 8 个人有什么特别的“东西”,但没能做到。
  • @EganWolf 是的,我修正了错字,你说得对,R5 实际上是 T4。 R5的公式是; COUNTIFS('06.08.2017'!$C$1:$C$300,"&gt;="&amp;TIME(5,15,0),'06.08.2017'!$C$1:$C$300,"&lt;="&amp;TIME(5,44,0),'06.08.2017'!$D$1:$D$300,"COMP1")
  • 您的数据样本仅显示 COMP1 的 7 个条目,因此要么更新数据样本以包含用于构建结果表的所有条目,要么根据数据中的条目创建一个新的结果表样本。

标签: excel excel-formula


【解决方案1】:
  1. 编辑问题以提供更多详细信息(如 R5 中的公式,在 cmets 中很难阅读它们(尤其是未格式化为代码)。
  2. 您在任何地方都使用不严格的不等式(例如&lt;=)。我建议将其更改为一方面的严格不等式。您可能看不到它,但您的时间可能只有几秒钟。

在 R5 中:

COUNTIFS('06.08.2017'!$C$1:$C$300,">"&TIME(5,14,0),'06.08.2‌​017'!$C$1:$C$300,"<=‌​"&TIME(5,44,0),'06.0‌​8.2017'!$D$1:$D$300,‌​"COMP1")
                                   ^          ^

【讨论】:

  • 如果找到的结果太多,使用严格的不等式会很有帮助,以避免重复计算某些条目。但是,当找到的结果太少时,它就无济于事了。
  • @Luuklag 是的,也不是。 OP 使用不严格的不等式并更改标准的值。他们每个范围都可能错过一分钟。
  • 啊,是的,我明白了。您可能会错过从 5,44,0 到 5,45,0 的所有内容。
  • 让我试试
  • 更新了问题部分。
猜你喜欢
  • 1970-01-01
  • 2020-05-22
  • 1970-01-01
  • 1970-01-01
  • 2015-10-21
  • 1970-01-01
  • 2017-01-20
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多