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/2020
而 I194
是时间 8:33:00 PM
), Google 工作表足够聪明,不仅可以将这两个单元格作为数值添加,还可以将它们连接起来并创建时间戳 3/9/2020 20:33:00
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/2020
而 I194
是时间 8:33:00 PM
), Google 工作表足够聪明,不仅可以将这两个单元格作为数值添加,还可以将它们连接起来并创建时间戳 3/9/2020 20:33:00