【问题标题】:Excel COUNTIFS: Trying to count delinquent dates for tasks that have not been completedExcel COUNTIFS:尝试计算未完成任务的逾期日期
【发布时间】:2019-10-19 00:51:51
【问题描述】:

我正在尝试计算“计划”日期早于“今天日期”但没有“实际完成日期”的未完成任务的数量。这是我正在处理的数据示例(列用逗号分隔):

Today's Date, 07/23/2013

Item 1, Plan Date, 07/01/2013
Item 1, Expected Completion Date, 08/02/2013
Item 1, Actual Completion Date,
Item 2, Plan Date, 07/01/2013
Item 2, Expected Completion Date, 08/02/2013
Item 2, Actual Completion Date, 12/01/2013
Item 3, Plan Date, 08/23/2013
Item 3, Expected Completion Date, 08/23/2013
Item 3, Actual Completion Date,

我尝试使用 Excel 中的“COUNTIFS”函数来计算没有“实际完成日期”但在“今天日期”(2013 年 7 月 23 日)之前有“计划日期”的项目。在上面的示例数据中,我希望计算返回“1”(因为只有项目 1 满足此条件)。但是,我没有成功创建一个可以工作的“COUNTIFS”函数。

有人可以帮忙吗? 我正在尝试使用 VBA 来解决这个问题。

这是一个我尝试过但不起作用的“COUNTIFs”函数示例(返回“0”):

=COUNTIFS(B4:B12,"Actual Completion Date",C4:C12,"",B4:B12,"Plan Date",C4:C12,"<"&$C$2)

Column 'B' is for 'Plan Date', 'Expected Completion Date', and 'Actual Completion Date'.
Column 'C' is for dates corresponding to 'Plan Date', 'Expected Completion Date', and 'Actual Completion Date'.
Cell C2 is 'Today's Date' (07/23/2013).

【问题讨论】:

  • 每个项目是否总是有 3 行,这些行是否总是按顺序排列?

标签: excel excel-formula excel-2010


【解决方案1】:

不需要 VBA,您可以使用 SUMPRODUCT 公式。

=SUMPRODUCT(--($A$3:$A$11=A17),--($B$3:$B$11=" Plan Date"),--($C$3:$C$11<$B$1))*SUMPRODUCT(--($A$3:$A$11=A17),--($B$3:$B$11=" Actual Completion Date"),--($C$3:$C$11<1))

我复制了您的 csv 并粘贴到从单元格 A1 开始的新工作表中。在单元格 A17-19 中,我分别有“第 1 项”、“第 2 项”和“第 3 项”,我的公式在单元格 B17-19 中。

这个公式中实际上有两个 SUMPRODUCT 实例。

第一个检查包含“项目 1”和“计划日期”的行以及日期是否小于单元格 B1 中的今天日期。由于满足所有条件,我得到 TRUE 值 1。

第二个实例查找项目和“实际完成日期”并且日期列中没有日期(日期

然后我将两个结果相乘 1*1=1。

然后我将公式复制下来,以便检查第 2 项和第 3 项。第 2 项返回 0,因为第二个条件失败(存在完成日期),第 3 项失败,因为第一个条件失败(开始日期晚于今天的日期)

【讨论】:

    【解决方案2】:

    如果所有条件都为真,Countifs 会返回一个值。在您的计数中 B4:B12,"Actual Completion Date" 和 B4:B12,"Plan Date" 不能同时为真,这就是您得到 0 的问题。

    在 vba 中,您可以尝试此基本代码,假设您始终有 3 行,3 个日期的顺序相同,并且您从第 4 行开始。

    Sub check()
    Dim rng As Range, cell As Range, n As Integer, m As Integer, cont As Integer
    Set rng = Range("B4:B12")
    n = 0
    m = 1
    For Each cell In rng
        n = n + 1
        If (n = 3 * m) Then
        m = m + 1
             If (Range("D" & 3 + n).Value = "") Then
                If (Range("D" & 3 + n - 2).Value >= "&C2") Then
                    cont = cont + 1
                End If
            End If
        End If
    Next cell
    Debug.Print (cont)
    

    结束子

    【讨论】:

      猜你喜欢
      • 2022-07-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-03-14
      • 2021-08-07
      • 1970-01-01
      • 2022-01-12
      相关资源
      最近更新 更多