【问题标题】:Countif dates in two table columns are different计算两个表列中的日期不同
【发布时间】:2021-06-22 10:21:01
【问题描述】:

我有一点问题。不然我为什么会在这里? ;)

我有一个表 (table1),在这个表中,如果日期不同,我想计算两列(任务截止日期和任务完成日期)。我想做的是计算逾期或按时交付的任务。 (是的,我知道有免费模板可用,这主要是为了了解更多使用 Excel 的知识)

在我的计算表中,我要数数:

  1. 任务完成日期早于或等于 (
  2. 超过 (>) 任务截止日期的任务完成日期数量

我认为问题在于COUNTIF 语句,因为它似乎只接受一个数组(计数数组),然后出现似乎不处理数组的标准。

我也试过 =SUMPRODUCT(COUNTIF(Table1[Task complete date];"<=" & Table1[Task due date])) 但这给了我一个值 8(虽然我有两个可能的匹配项)

根据This tutorial,我应该得到一个返回值 1 和 0,但看看我得到的计算步骤:SUMPRODUCT({1;1;2;2;2;0;0;0;0;0}) 这当然是 8 值的来源。

有没有办法解决这个问题?我是否需要添加某种if 声明或某种预检查?

Here is a link to the excel document with some test data

哦,顺便说一句:在我的国家,逗号分隔符是;,而不是真正的逗号。这就是为什么有些人会在半列中使用逗号的原因。

任何帮助将不胜感激。提前谢谢大家。

提努斯

【问题讨论】:

  • 您是否也有一个示例表可以使用?
  • 样本表?输入它。
  • 我添加了指向原始文档的链接。提前致谢。

标签: excel countif sumproduct


【解决方案1】:

您可以在“项目任务”表的 M 列中添加日期检查:=IF(COUNTBLANK(F4)+COUNTBLANK(K4)=0,IF([@[Task due date]]<=[@[Task complete date]],"On time","Past Due"),"")

那么您可以在“数据”表的 K 列中使用 =COUNTIF(Table1[Date check],[@[on time/past due]])

附:如果您需要给定函数的翻译,可以查看https://de.excel-translator.de/

【讨论】:

  • 这似乎可以解决问题。但是,由于我必须创建更多检查,因此我希望阻止这些检查列,因为它需要大量检查列。
  • 您可以使用 PowerQuery 吗?它可以让您轻松编写所有这些检查,而无需使用任何公式。
  • 这是我自己的文档,所以我想是的,我可以使用 powerquery。我主要是想获得更多关于 Excel 的知识,如果我能找到这个项目跟踪工具的好用处,那就太好了。
  • 我上传了一个 Excel 文件,我在其中使用 PowerQuery 进行了检查:tmpfiles.org/dl/58823/projectstatustrackerpq.xlsx>(它只能使用一小时)。转到功能区“数据”,然后单击“查询和连接”之类的内容。这将显示一个带有两个条目的侧栏(如果还没有的话)。单击“check_date”,PowerQuery 编辑器将打开。
【解决方案2】:

您获得高于 1 的值的原因是您的 COUNTIF 实际上是比较 Table1[Task complete date] 中的每个值与 Table1[Task due date] 中的每个值强>。例如如果 [任务完成日期] 是 1 月 1 日,它将计算有多少 [任务截止日期] 值大于或等于 1 月 1 日,例如,可能是 2。然后它移动到 [任务完成日期] 中的下一个值并执行相同操作。

所以你需要这样做:

任务完成日期早于或等于 (

=SUM(--(Table1[Task complete date]<=Table1[Task due date]))

超过 (>) 任务截止日期的任务完成日期数量

=SUM(--(Table1[Task complete date]>Table1[Task due date]))

附加说明

对于 2019 之前的 Excel 版本或 Excel 365,以上公式必须以数组公式的形式输入,因此您必须使用 CTRL+SHIFT+ENTER 输入。对于您的 Google 表格版本,这些也必须是数组公式,但您还需要一些额外的过滤以使其忽略空白单元格。你可以这样做:

=ArrayFormula(SUM((K4:K24<=F4:F24)*(K4:K24>0)))

=ArrayFormula(SUM((K4:K24>F4:F24)*(K4:K24>0)))

【讨论】:

  • 有趣的解决方案,我不知道两个减号运算符。不存在“任务完成数据”的情况如何处理?
  • 这给了我一个 0 的值,而根据测试值我应该得到 1
  • @Qualia -- 被称为“强制”。您可以通过将布尔值乘以另一个布尔值或数字值将布尔值 TRUE/FALSE 强制为 1/0。由于没有什么可以将这些值相乘,因此您可以将它们乘以它们自己,方法是取它们的负数,然后再将其转换回正数,因此:--.
  • @tinus087 我直接回答了为什么=SUMPRODUCT(COUNTIF(Table1[Task complete date];"&lt;=" &amp; Table1[Task due date])) 会生成 {1;1;2;2;2;0;0;0;0;0} 以及你能做什么将该公式替换为。如果您使用的是 GSheets 或 Excel 2019 之前的版本,那么您需要将我建议的公式输入为数组公式(CTRL+SHIFT+ENTER)。我将在答案中添加关于 Google 表格的评论,因为它需要的不仅仅是建议的 Excel 方法。
  • @markfitzpatrick:非常感谢您的解释。我真的很感激他们。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-09-14
  • 1970-01-01
  • 2020-01-18
  • 2020-09-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多