基于2个标准计算唯一文本

时间:2016-08-10 23:49:12

标签: excel vba excel-vba excel-formula

我正在玩几个想法,根据两个标准计算独特的文字。我以为Sumproduct会为我做这件事,但它似乎没有用。我可能需要某种VBA脚本。基本上,我想做以下几点。

1)查看ColumnB中的所有内容以及是否符合条件

2)查看ColumnW中的所有内容以及是否符合条件

3)计算ColumnF中的唯一文本。

几乎是这样的:

= COUNTIFS(W:W,A1,B:B,B1)

然后,根据结果,计算ColumnF中的唯一身份

我认为这应该很简单,但事实证明这很难!

2 个答案:

答案 0 :(得分:1)

您可以使用standard SUMPRODUCT-based pseudo-COUNTUNIQUE,但需要通过在分子中添加条件以及在Demononator中添加反向条件来修改它;后者以避免#DIV/0!错误。这将生成伪COUNTIFSUNIQUE。

=SUMPRODUCT(SIGN((B2:B20="bee")*(W2:W20="double-you"))/
           (COUNTIFS(B2:B20, "bee", W2:W20, "double-you", F2:F20, F2:F20)+(B2:B20<>"bee")+(W2:W20<>"double-you")))

countifsunique

答案 1 :(得分:1)

另一种解决方案是从这里调整公式:Count Unique Text Values in a Range

如果F:FF:F同时保持Crit1,则修改它以匹配Crit2,而不是"No Match"。也就是说,

IF((B:B="Crit1")*(W:W="Crit2"),F:F,"No Match")

然后你对该阵列进行唯一计数。

=SUMPRODUCT(--(FREQUENCY(MATCH(IF((B:B="Crit1")*(W:W="Crit2"),F:F,"No Match"),
                               IF((B:B="Crit1")*(W:W="Crit2"),F:F,"No Match"),0),
                         ROW(F:F)-ROW($F$1)+1)>0))
 -NOT(PRODUCT((B:B="Crit1")*(W:W="Crit2")))

最后的-NOT(PRODUCT(...))是减去"No Match"条目的唯一计数(如果它存在的话)(如果你知道总是会有-1,那么这可以被def f(x, var): tup_list = list(x) for t in tup_list: if t[0] == var: return t[1] return np.NaN df.columns = ['col'] for var in ['A', '-A', 'B', '-B', 'C', '-C', 'D', '-D']: df[var] = df['col'].apply(lambda x: f(x, var)) df2 = df.loc[(df['A'] > 3) & ((df['-A'] < 3) & (df['B'] is not np.NaN)) & (df['-C'] > 2)] 替换不符合这两个标准。)

请注意,这是一个数组公式,必须使用 Ctrl + Shift + Enter 输入。