在满足特定条件的情况下计算表中的唯一值

时间:2014-06-13 11:36:56

标签: excel vba excel-formula

我有一张类似这样的表:

    Customer ID | Review Flag | Date Received
    London  Official    27-May-14
    London  Official    29-May-14
    Reginald    Official    29-May-14
    Reginald    Official    29-May-14    
    Townie  Official    05-Jun-14
    FHAR_L  Unofficial  05-Jun-14
    Reginald    Official    10-Jun-14
    Akmed   Official    10-Jun-14
    PALNEES Unofficial  11-Jun-14
    Akmed   Official    11-Jun-14
    Woody   Official    11-Jun-14
    Woody   Official    11-Jun-14
    Sarah   Official    11-Jun-14

我想计算过去两周内独特官方案例的数量。因此,例如,此特定表的结果将是5个案例而不是7个案例。

我目前的实现是构建一个数据透视表,将客户ID作为行,然后在值列上运行一个count函数作为输出。这个问题是用户需要每天进入并更改数据透视表上的过滤器,这可能会让人感到困惑,因为我们每天都没有收到案例。例如,由于某些月份有31天,因此如果我们在31日没有收到案件,那么我们就不应该计算在下个月13日我们收到的案件。理想情况下,我希望这个解决方案能够以公式为基础。

我已经读过很多关于在excel中计算唯一身份的内容,但它们似乎都令人困惑和复杂。此外,它们似乎是基于一种条件,使其与COUNTIFS不兼容,这是我在尝试考虑时应该使用的功能' review flag = official'和'日期范围= cell1< x< = cell2'。

当然,我可以在VBA中做到这一点,但我想知道是否有基于公式的解决方案。

1 个答案:

答案 0 :(得分:0)

我已经解决了!感谢这个非常棒的网站,帮助我了解如何破解独特的功能以及计算列表中唯一项目的小SUM(1/COUNTIFS(...))方法。

我得到的公式是:=SUM(IF(("Official"=R18:R1000)*(D18:D1000>TODAY()-14),1/COUNTIFS(R18:R100,"Official",C18:C1000,C18:C1000,D18:D1000,">"&TODAY()-14)),0)

其中列名R =审核标志,D =收到日期,C =客户ID,数据集从第18行开始。

我认为这是如何工作的:我们有一个左侧数组(IF数组)和右侧数组(COUNTIFS)数组。 COUNTIFS数组找出每个绑定发生的次数,即在数组行[10]它会询问" Woody,官方,11-Jun-14&#多少次? 39;一起出现?"。左侧数组查看哪些行符合我们的目标条件,每行返回true或false。 SUM函数然后将右侧数组中的所有行相加,其中左侧数组表示该特定行为TRUE,但正如我们之前1/所做的那样,我们将获得每个绑定总计只有1个,从而模拟出一个独特的。

要记住的重要事项:

使用数组公式时,请确保所有数组的大小相同,否则会出错。

如果我在评论中出错,请纠正我,不要只是投票!