Google 工作表 - 按组计算唯一值(仅当尚未计入上一组时)

Google Sheets - COUNT UNIQUE values by group ONLY IF NOT already counted in previous group

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

我在 B 列中有一些数据,按 A 列所示分组。

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

例如,我想:

下面你可以找到一个 Google Sheet 我找到的解决方案,即使我对它不是很满意,也很容易表明我的意思。

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',因为在 "processing columns" 中,我只考虑了 'proyecto6'.

的公式

一切正常,但我的问题是:您能否建议我采用一种更动态的方式来实现我想要做的事情?或者唯一的办法就是写一些代码?

  • 删除 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:B; A:A=D2)))
    

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

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