Google表格-如果尚未在前一组中计算,则仅按组COUNT个唯一值

时间:2019-05-14 00:38:36

标签: filter google-sheets array-formulas google-sheets-formula

我希望清楚地解释我要做什么。

我在B列中有一些数据,如A列所示进行了分组。

我想为A列中存在的每个组计算唯一值,而不考虑先前组中已经计算的唯一值。

例如,我想:

  • 计算“ proyecto2”中的唯一值,不计算“ proyecto1”中已经存在的唯一值。
  • 计算“ proyecto3”中的唯一值,不计算“ proyecto1”和“ proyecto2”中已经存在的唯一值。
  • 计算“ proyecto4”中的唯一值,不计算“ proyecto1”,“ proyecto2”和“ proyecto3”中已经存在的唯一值。
  • 依此类推...

在下面,即使我不太满意,也可以找到包含我找到的解决方案的Google表格,以轻松显示我的意思。

https://docs.google.com/spreadsheets/d/1x8S76_6dUnHr1NtUbzNzpLTpQtqan6_ohemcrGsrpC0/edit#gid=0

基本上,在A:B列中,我们有输入数据。您可以在A列和B列中添加数据以查看其工作方式(目前,我的方法只有在A列中添加以下组之一时才有效:'proyecto1','proyecto2','proyecto3','proyecto4' ,“ proyecto5”和“ proyecto6”)。

在D:E列中,我们基本上有输出数据,该数据是由组计算的。

在G:W列中,用于处理数据的公式。

很明显,我的方法适用于“ proyecto6”,因为在“处理列”中,我只考虑不超过“ proyecto6”的配方。

一切正常,但我的问题是:您能建议我一种更有活力的方式来实现我想要做的事情吗?还是唯一的方法就是编写一些代码?

1 个答案:

答案 0 :(得分:1)

  • 删除范围 D:Z
  • 中的所有内容
  • 粘贴到 D2 单元格:

    =UNIQUE(A2:A)

  • 粘贴到 E2 单元格:

    =ARRAYFORMULA(IF(LEN(D2:D); 
     MMULT(IFERROR(LEN(G2:Z)/LEN(G2:Z); 0); TRANSPOSE(COLUMN(G2:Z2)^0)); ))

  • 粘贴到 G2 单元格:

    =TRANSPOSE(UNIQUE(FILTER(B$2:B; A$2:A=D2)))

  • 粘贴到 G3 单元格并向下拖动:

    =TRANSPOSE(UNIQUE(FILTER(FILTER(B$2:B; A$2:A=D3);
     NOT(COUNTIF(INDIRECT("G2:"&ROW()-1); FILTER(B$2:B; A$2:A=D3))))))
    0