Google sheets Google Sheets ArrayFor公式计数无法正常工作

Google sheets Google Sheets ArrayFor公式计数无法正常工作,google-sheets,google-sheets-formula,array-formulas,ranking,countif,Google Sheets,Google Sheets Formula,Array Formulas,Ranking,Countif,我在数组公式中有一个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

我在数组公式中有一个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时,它工作正常。我错过什么了吗


这是我的工作手册的副本:

您有单独的到期日期和到期时间列,您正在通过调整日期和时间使用countifs创建排名。你发现排名产生了意想不到的错误,不知道为什么

你的公式是 ={优先级;数组FORMULAIFISBLANKJ2:J,ifisblankH2:H=false, countifsJ:J,,H:H,&I2:I,,}

该错误是由于调整了与日期无关的时间而产生的。日期和时间都是日期对象。在Google电子表格函数中,两者都是相对于纪元12/30/1899 0:00:00计算的十进制值,尽管格式可以经常用于掩盖这一点

在您的公式中,计算日期计数列H减去时间计数列I之间的调整。但是,这假设两个值存在于同一序列中-情况并非如此。这些时间与其日期对应的时间无关-它们是孤立存在的,因此计算受其相对值而不是绝对值的影响

这个问题的解决方案有两个方面: -将到期日记录为日期/时间,以及

基于日期/时间字段使用countifs仅删除元素-countifsJ:J、、H:H、H2:H、I:I、>&I2:I

使用秩函数进行降序排序

此表显示了与作为日期/时间值时相比,单独获取时间对十进制值的影响

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

还是。人们可以采用不同的方法。 问题是,在第二种COUNTIFS情况下,您混合了日期和时间,因此不兼容会产生错误的结果

通过稍微调整您的公式即可轻松更正。 您只需要用H+I替换两次提到的列I

通过这种方式,您可以创建一个虚拟时间戳,同时考虑给定的日期和日期的时间,避免在删除第二个countif的同时使用额外的helper列,或使用RANK函数彻底更改公式。 作为额外的奖励,您可以保持所有列的完整性,因为在工作簿的其余部分中,您需要将这些列分开


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

我的数组公式中有一个countifs,它工作不正常。请您解释一下场景以及countifs打算分析的结果。该表是一份校对工作日志,该公式的目的是按到期时间对未完成的工作进行排序。第J列是作业返回的日期,因此公式应仅对该列为空的作业进行排序。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) ,""),""))}