仅当第 1 列中的值包含第 2 列中的特定单词时,才从具有 2 列的范围中提取值

Extract values from a range with 2 columns only if the value in column 1 contains a specific word in the column 2

我需要从不包含某个 activity(项目)的列表中提取每个人。听起来很简单,但我无法完全理解它。

请查看 Sheet 2 上的示例: https://docs.google.com/spreadsheets/d/1qjbjXFCYj1qXrVVGNnhOj11asxT_o1xHWXerRqAl1UQ/edit#gid=2105763617

这是逻辑。 首先,我试图查看个体是否只出现一次,以及 Activity 是否不是 "Project"

=IF(A2<>"",IF(and(COUNTIF(A:A,A2)=1,B2<>"Project"),0,1),"")

那我就提取满足这个条件的名字:

=query(ARRAYFORMULA(iF(I2:I=0,A2:A,"")), "where Col1 <>'' ")

这是有效的,除了同一个人可能有多个作业不包含 activity "Project",我的公式没有考虑到它也不是简单的动态数组公式。

=UNIQUE(FILTER(A2:A, B2:B<>"Project"))


=UNIQUE(QUERY(A2:B, "select A where B <>'Project'", 0))


=UNIQUE(FILTER(A2:A, B2:B<>"Project", 
 NOT(REGEXMATCH(A2:A, "^"&TEXTJOIN("$|^", 1, FILTER(A:A, B:B="Project"))&"$"))))

虽然@player0 的回答解决了这个问题,但它在 sheet 的行数超过 1000 时对性能造成了很大的影响。 相反,我提取了所有包含 "Project" 的名称,然后提取了所有不包含 "Project" 的名称,然后从第一个数组中减去所有名称以消除两者中的名称。

=UNIQUE(FILTER(UNIQUE(FILTER(A2:A, B2:B<>"Project")), ISNA(MATCH(UNIQUE(FILTER(A2:A, B2:B<>"Project")), UNIQUE(FILTER(A2:A, B2:B="Project")),0))))

你也可以试试这个:

{=IFERROR(INDEX($A:A,MATCH(0,IF($C<>$B:$B,COUNTIF($F:$F1,$A:$A), ""), 0)),"")}

N.B.

  • Cell C1 具有条件 Project,使用单元格引用生成公式 动态而非硬编码。
  • 在单元格 F2 中输入此公式,使用 Ctrl+Shift+Enter 完成, 并向下填充。