用多个标准识别公式

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

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

数据样本

A,B栏分别为公司进出口时间,格式为“时间”。

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

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

计算一个人在arrays中使用入场和出场时间的工作时间。

D列格式化为一般,包括我只需要工作的人的公司名称。

我试图做的就是这样一张桌子,

结果表

这里的A列是一天中从5个小时开始工作的小时数。

要计算每天工作一定时间的人数,我不得不select小时数,例如每天5小时,我说:“工作时间为4:45小时到5:14的人,因为他们每天工作5个小时,应该算作小时数,其他小时我也采用了类似的方法。

现在我为此创build的公式为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。

我查了几乎一切都进入了我的脑海,但无法find我犯的错误。

更新:我试图抓住问题的地方,并缩小到它不计算的值。 结果是; 我发现其中一个问题,但我找不到第二个问题。

这里是新的图片:

更新的数据范围

更新结果页面

第一个问题是第208行。在第208行中,时间是00:19,使用上面C列中提到的公式,结果就像是#####。 所以我不得不手动添加date01/01/1990使公式给我结果。 我得到的结果是你可以看到15:52:00,这是正确的。 但是,在结果页面中使用的COUNTIFS公式不计算这个,所以我不得不手工编写这个date来计算。 因此,我find了一个失踪的人。 如果你能帮我解决这个问题,而不是先改变01/01/1990,然后再手动写入时间,我将不胜感激。

现在结果表中还有一个人失踪了。 由于数据范围很小,我用一种颜色对每个时间范围进行了手动分类,并将其与结果表进行比较。

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

但为什么? 这是我的问题。 我有很多这样的数据范围需要处理,所以每次尝试捕捉像这样的问题都耗费太多时间,所以我需要find根本原因。 我用一个macros来生成D列。公司里有两个人名叫“XYZ”,另外一个是“XYZ-B”,我想把他们转换成一个叫做“COMP1”的公司。 这是macros:

 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. 编辑问题放置更多细节(如R5中的公式,很难在注释中阅读它们(特别是没有格式化为代码))。
  2. 你在任何地方都不使用严格的不平等(如<= )。 我build议把它改变为严格的不平等。 你可能看不到它,但你的时间可能会有几秒钟。

在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") ^ ^