Google 工作表 ArrayFormula Countifs 无法正常工作

Google Sheets ArrayFormula Countifs not working correctly

Screenshot

我在数组公式中有一个 countifs,它不能正确处理一行中的数据,而且我终究无法弄清楚原因。数据如下所示:

A   H           I           J       K
1   03/09/2020  08:33 PM        
1   03/11/2020  08:16 PM        
3   03/12/2020  08:00 AM        
4   03/12/2020  09:00 AM        
5   03/12/2020  11:00 AM        

这是我的公式:

={"Priority"; ARRAYFORMULA(if(isblank(J2:J),if(isblank(H2:H)=false,
countifs(J:J,"",H:H,"<="&H2:H)
-countifs(J:J,"",H:H,H2:H,I:I,">"&I2:I),""),""))}

据我所知,第二行在 A 列中的值为 2。当我将第 I 列中的时间更改为 08:17 PM 时,它可以正常工作。我错过了什么吗?

这是我的练习册的副本:https://docs.google.com/spreadsheets/d/10pv5KvQYloxmx_7wQxlySTQslCQBFTcWwAsvkLHop7Y/edit?usp=sharing

您为 "Date Due" 和 "Time Due" 设置了单独的列,并且您正在通过调整日期和时间来创建排名(使用 countifs)。您发现排名出现意外错误,但不知道为什么。

你的公式是" ={"Priority"; ARRAYFORMULA(if(isblank(J2:J),if(isblank(H2:H)=false, countifs(J:J,"",H:H,"<="&H2:H) -countifs(J:J,"",H:H,H2:H,I:I,">"&I2:I),""),""))}


错误是由于独立于日期调整时间而产生的。日期和时间都是日期对象。在 Google 电子表格函数中,两者都计算为相对于纪元 (12/30/1899 0:00:00) 的十进制值,尽管通常使用格式来掩盖这一点。

在您的公式中,您计算​​日期计数(H 列)减去时间计数(I 列)之间的调整。但是,这假定两个值都存在于相同的序列中——事实并非如此。这些 Times 与其 Date 对应物无关 - 它们独立存在,因此计算受其相对值(而不是绝对值)的影响。


解决问题的方法有两个:
- 将截止日期记录为 Date/Time 和

  • 仅基于Date/Time字段使用COUNIFS(删除元素-countifs(J:J,"",H:H,H2:H,I:I,">"&I2:I)

  • 使用RANK函数(降序排序)。


此 table 显示了与作为 Date/Time 值相比,单独采用时对时间的十进制值的影响。

逻辑和推理是正确的。提议的解决方案也有效。

还在。人们可以遵循一种不同的方法
问题是,在你的第二个 COUNTIFS 条件下,你混合了日期和时间,因此不兼容给出了错误的结果。

通过稍微调整您的公式即可轻松更正

您只需要将列 I 的两次提及替换为 H+I

={"Priority"; 
   ARRAYFORMULA(if(isblank(J2:J),
                    if(isblank(H2:H)=false,
                        countifs(J:J,"",H:H,"<="&H2:H)
                       -countifs(J:J,"",H:H,H2:H,H:H+I:I,">"&H2:H+I2:I) ,""),""))}

通过这种方式,您可以创建虚拟时间戳,同时考虑给定日期和日期时间(避免使用额外的辅助列删除第二个 COUNTIFS 或使用 RANK 函数从根本上改变你的公式).
作为额外的奖励,您可以保持所有列的完整性,因为您“需要将这些列分开以实现工作簿其余部分的功能”


虚拟时间戳 有效,因为使用例如。 H194+I194 (其中 H194 是日期 03/09/2020I194 是时间 8:33:00 PM, Google 工作表足够聪明,不仅可以将这两个单元格作为数值添加,还可以将它们连接起来并创建时间戳 3/9/2020 20:33:00