【问题标题】:count unique text values based on condition in another column between date criteria根据日期条件之间另一列中的条件计算唯一文本值
【发布时间】:2016-07-06 07:45:56
【问题描述】:

我需要的是根据 FIAP/Medium & Year 列的标准计算 TITLE 中唯一值的公式。

这需要首先查看工作表列 M/Year 中的日期,范围是 23/03/13 - 01/06/16。然后它需要检查 I/FIAP Medium 列以查找 'Digital',最后计算 A/Title 中的唯一图像。

这是工作表列

   Title              FIAP/Medium      Year
  Conors Push        Digital         3/23/2013
  Conors Push        Digital         4/1/2013
  Flippin Hell       Digital         4/1/2013
 Narrowing the Gap   Digital         4/1/2013
 The Perfect Storm   Digital         4/8/2013
 Conors Push         Digital         4/12/2013
 Splash and Dash     Digital         4/12/2013
 Wind Power          Digital         4/12/2013
 Conors Push           -             4/28/2013
 Eyes On The Ball      -             4/28/2013
 Narrowing the Gap     -             4/28/2013
 The Bunkers Demise    -             4/28/2013
 A Few Inches More   Digital         5/1/2013
 Entwined            Digital         5/1/2013
 Conors Push         Digital         5/14/2013
 Fosbury Delight     Digital         5/14/2013
 Narrowing The Gap   Digital         5/14/2013
 Sprint For The Lin  Digital         5/14/2013

我想出了公式

=SUM(--(FREQUENCY(IF(International!M2:M1000>="6/1/2016",IF(International!M2:M1000<="3/23/2013",IF(International!I2:I1000<>"",IF(International!I2:I1000="Digital",MATCH(International!A2:A1000,International!A2:A1000,0))))),ROW(International!A2:A1000)-ROW(International!A2)+1>0)))

但它显示零值。可能是因为日期条件需要一列两个条件。

请帮助我使用此公式或任何其他方法来根据此条件计算唯一性。特殊日期

【问题讨论】:

  • 列表中是否经常添加/删除?您是否必须不断修改公式并更改范围?

标签: excel excel-formula excel-2010


【解决方案1】:

基于 SUMPRODUCTCOUNTIF 函数的伪 COUNTUNIQUE¹ 有一种相当常见的方法,如下所示。

=SUMPRODUCT(1/COUNTIF(A2:A19, A2:A19&""))

但这确实弥补了这些条件。要添加条件,您需要更改为COUNTIFS function。此外,除法运算的分子和分母都必须根据条件和条件的倒数进行调整,以便在#DIV/0! 不出错的情况下返回真实计数。

=SUMPRODUCT(((C$2:C$19>=F2)*(C$2:C$19<=G2)*($B$2:$B$19=E2))/
             (COUNTIFS(A$2:A$19, A$2:A$19&"", C$2:C$19, ">="&F2, C$2:C$19, "<="&G2, $B$2:$B$19, E2)+
              (C$2:C$19<F2)+(C$2:C$19>G2)+($B$2:$B$19<>E2)))

  

现在该公式很难维护,因为行数会不断添加和删除。要创建动态范围,我们可以INDEX 每一整列,并使用MATCH 定位最后日期作为每一列的终止符。

=SUMPRODUCT(((C$2:INDEX(C:C, MATCH(1E+99,C:C ))>=F2)*(C$2:INDEX(C:C, MATCH(1E+99,C:C ))<=G2)*($B$2:INDEX(B:B, MATCH(1E+99,C:C ))=E2))/
    (COUNTIFS(A$2:INDEX(A:A, MATCH(1E+99,C:C )), A$2:INDEX(A:A, MATCH(1E+99,C:C ))&"", C$2:INDEX(C:C, MATCH(1E+99,C:C )), ">="&F2, C$2:INDEX(C:C, MATCH(1E+99,C:C )), "<="&G2, B$2:INDEX(B:B, MATCH(1E+99,C:C )), E2)+
      (C$2:INDEX(C:C, MATCH(1E+99,C:C ))<F2)+(C$2:INDEX(C:C, MATCH(1E+99,C:C ))>G2)+($B$2:INDEX(B:B, MATCH(1E+99,C:C ))<>E2)))

是的,这看起来很乱,但它会动态地添加和减去 SUMPRODUCT 函数处理的行,因此计算效率非常重要。


¹ 有关其工作原理的说明,请参阅Count Unique with SUMPRODUCT() Breakdown

【讨论】:

  • 它实际上只是看起来复杂,因为重复的 MATCH 函数需要截断包含最后日期的行的完整列引用。除非您通过计算周期获得报酬,否则绝不应将 SUMPRODUCT 与完整列引用一起使用。 1,000 甚至 25,000 行可能看起来很多,但两者都远少于 1,048,576 行。可以使用动态命名范围简化公式,但这将是另一个问题。
【解决方案2】:

您的公式经过一些调整即可工作:

  1. 需要使用 DateValue() 函数将日期字符串转换为日期值

  2. 日期的比较运算符互换(应该是 = 2013 日期)

  3. 与“数字”的比较需要颠倒过来

  4. 对于条件失败的情况,最里面的 IF 语句需要一个零作为值

  5. 我删除了不需要的最外层括号

这是修改后的版本:

=FREQUENCY(IF(International!M2:M1000=DATEVALUE("3/23/2013"),IF(International! I2:I1000"",IF(International!I2:I1000"Digital",MATCH(International!A2:A1000,International!A2:A1000,0),0)))),ROW(International!A2: A1000)-ROW(国际!A2)+1>0)

【讨论】:

  • 正确答案应该是什么?我按照您在问题中显示的方式设置了工作表,并且公式有效;我通过更改一些值进行了测试,并看到计数发生了适当的变化。您可能没有提到影响解决方案的某些方面。无论如何,如果@Jeeped 的回答对你有用,那么无论如何你都很好。
猜你喜欢
  • 2019-08-27
  • 2018-12-05
  • 1970-01-01
  • 1970-01-01
  • 2018-07-30
  • 2020-10-30
  • 1970-01-01
  • 2018-02-12
  • 1970-01-01
相关资源
最近更新 更多