用多个标准确定公式

时间:2017-08-08 12:34:38

标签: excel excel-formula

我知道这里有很多类似的主题,问过类似的问题,但实际上找不到我想要的东西。

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

Data Sample

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

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

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

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

D列的格式为“常规”,包括工作人员的公司名称,我只需要。

我尝试做的是这样的表格;

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。

我检查了几乎所有的东西都浮现在我的脑海中,却找不到我弄错的地方。

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

以下是新图片:

Updated Data Range

Updated Result Page

第一个问题是,行208.在行208中,时间是00:19并且使用上面在C列中提到的公式,结果类似于#####。所以我不得不手动添加日期01/01/1990以使公式给我结果。我得到的结果是你可以看到15:52:00,这是正确的。但是我在结果页面中使用的COUNTIFS公式不计算这个,所以我必须手动编写这个日期以使其计数。因此我得到了一个失踪者。如果你可以帮我解决这个问题,而不是先改变添加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

为什么它适用于其他所有细胞但不适用于此细胞?

1 个答案:

答案 0 :(得分:1)

  1. 编辑问题以提供更多详细信息(例如R5中的公式,很难在评论中阅读它们(特别是未格式化为代码))。
  2. 你到处都没有使用严格的不等式(比如<=)。我建议将其改为严格的不平等。你可能看不到它,但你的时间可能会有几秒钟。
  3. 在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")
                                       ^          ^