使用过滤器和 VSTACK 进行部分匹配

使用过滤器和 VSTACK 进行部分匹配

在本网站的一些建议的帮助下,我从几个工作表中提取了以下公式:

=FILTER(VSTACK(FRR:SOD!G3:M200),
  (VSTACK(FRR:SOD!K3:K200)<>"")*
  (VSTACK(FRR:SOD!K3:K200)="ABC XXXX"))

有没有办法过滤“ABC XXXX”中的部分匹配项?将 ABC 视为一个位置,将 XXXX 视为该位置的工作/职位。我希望能够将分配给 ABC 的所有人拉到新的工作表中,然后按工作/职位进行过滤。这可能吗?

答案1

以下是其中一种方法:

=LET(
     α, VSTACK(FRR:SOD!G3:M200), 
     δ, INDEX(α,,5), 
     FILTER(α, (δ<>"")*(1-ISNA(XMATCH("ABC *",δ,2))),"Not Found"))

  • 使用LET()函数有助于定义变量,并且更容易阅读,而无需重复相同的公式。
  • α变量定义为使用将多个工作表数据附加到由工作表VSTACK()范围组成的一个工作表中,并G3:M200FRRSOD
  • δ变量定义为使用函数从返回的数组中INDEX()提取5thα
  • XMATCH()与通配符运算符一起使用Asterix*表示Zero任意数量的字符。在此用例中,它使用位置并检查是否有任何位置以数组中分配的相同位置ABC *开头ABC和结尾。job/positionδ
  • 如果找到匹配项,那么我们可以使用ISNUMBER()返回TRUE1-ISNA()也可以使用执行相同操作,即首先ISNA()返回错误TRUE的位置,#N/A然后从结果中减去错误,TRUE这与执行的操作相同ISNUMBER()
  • 最后,在FILTER()函数内进行包装以提取其中的内容TRUE

笔记:

• Excel 具有3 个通配符可以在公式中使用:

  1. 星号( *) --> 零个或多个字符。
  2. 问号( ?)-->任何一个字符。
  3. 波浪符号( ~) --> 转义文字字符 ( ~*)、文字问号 ( ~?) 或文字波浪号 ( ~~)。

答案2

如果部分匹配,应该有很多种组合,下面是我想与大家分享的一种。

=FILTER(VSTACK(FRR:SOD!G3:M200),
  (VSTACK(FRR:SOD!K3:K200<>"")*
  ((ISNUMBER(SEARCH("NEW*", VSTACK(FRR:SOD!K3:K200)))) +
  (ISNUMBER(SEARCH("*MANAGER", VSTACK(FRR:SOD!K3:K200)))) > 0))
  • 现在让我解释一下((ISNUMBER(SEARCH(“NEW*”
  • 此处的 NEW* ,, * 是通配符,假定多个字符。
  • 它可能假设新德里、纽约、新泽西等地点。
  • 另一个是 (ISNUMBER(SEARCH("*MANAGER" ,其中 *MANAGER 可能假设为 EDP MANAGER、SALES MANAGER 和其他人。

注意:

  • 您可以使用另一个通配符 按需要。

  • 此外检查此链接

答案3

我感谢大家的意见,尽管其中一些有点复杂,因为我还在一点一点地学习。另一个论坛上的这个公式完全符合我的需要,而且我很容易理解:

=FILTER(VSTACK(FRR:SOD!G3:M200),LEFT(VSTACK(FRR:SOD!K3:K200),3)="ABC")

感谢你的帮助!

相关内容