Excel COUNTIF 匹配目标的变体:LET 解决方案?

Excel COUNTIF match variations of target: LET solution?

这是一个比简单的 =COUNTIF(rng,"*"&value&"*") 稍微复杂的问题,如 here.

我有一个二维数组,其单元格包含如下数据:

..... 以及其他几个变体。 我正在尝试计算“abc”的精确匹配项,但我希望计数包含包含“abc def”和其他类似变体的单元格,但是 我不能只使用上面简单的 COUNTIF 公式,因为“abcdef”不是可接受的匹配项。目标字符串必须独立或通过 chars.

中可接受的字符与其他文本分隔

我想我已经完成了 90%,但我需要帮助的一点是将目标“名称”的所有可能可接受的变体组合到一个平坦范围内,然后我可以检查我的数据源对于 COUNTIF。在引用其他范围时,我尝试了 INDEX(r_1:r_8,idxRow,idxCol) 和其他适用于 sheet 的熟悉解决方案,但我是使用 =LET 函数的新手。当在我的 spreadsheet 上分解成单独的组件时,所有这些都运行良好,但我正在寻找 =LET 的更清洁的解决方案。当前公式见下:

=LET(rg, DataTable[[Q14_1]:[Q14_9]],
   name, AU38,
   chars, {" ",",",";"},
   r, 8,
   r_1, CONCATENATE(name,chars),
   r_2, CONCATENATE(chars,name),
   r_3, CONCATENATE(chars,name,chars),
   r_4, CONCATENATE(name,chars,"*"),
   r_5, CONCATENATE("*",chars,name),
   r_6, CONCATENATE(chars,name,chars,"*"),
   r_7, CONCATENATE("*",chars,name,chars),
   r_8, CONCATENATE("*",chars,name,chars,"*"),
   c, COUNTA(chars),
   mSeq, SEQUENCE(r*c),
   idxRow, 1+MOD(mSeq,r),
   idxCol, INT((SEQUENCE(r*c)-1)/r)+1,
   X, INDEX(**NeedHelpHere**,idxRow,idxCol),
   SUM(COUNTIF(rg,name),COUNTIF(rg,X))
)

试试下面的公式。如果您有更多分隔符,例如 space、逗号和其他分隔符,那么您需要使用更多 SUBSTITUTE() 函数。

=LET(x,FILTERXML("<t><s>"&SUBSTITUTE(SUBSTITUTE(A1:A7," ","</s><s>"),",","</s><s>")&"</s></t>","//s"),y,FILTER(x,x="abc"),SUM(--(y<>"")))

要了解 FILTERXML(),请阅读来自 JvdV 的

我再次考虑了这个问题并发布了一个适合我需要的解决方案。

我不需要将一列潜在匹配索引到 COUNTIF,我可以 COUNTIF 多次。此外,我没有考虑 chars 的不同组合,我只是在 target 的两边搜索相同的 chars(例如“,abc”,而我应该有也一直在寻找“,abc;”)。在一侧转置 chars 数组是解决此问题的一种简单方法。事实证明,"*"&target&"*" 搜索“*target*”和“target”(呃!),所以我进一步简化,消除了重复的可能性。

我的最终公式如下,计算 target(单独或被任何可接受的 chars 包围)在给定的 rng 中出现的次数:

=LET(rng, DataTable[Q14_1]:[Q14_9]]),
  name, $A6,
  chars, {" " , "," , ";"},
  r_1, CONCATENATE(name,chars,"*"),
  r_2, CONCATENATE("*",chars,name),
  r_3, CONCATENATE("*",chars,name,TRANSPOSE(chars),"*"),
  SUM(COUNTIF(rng,name),COUNTIF(rng,r_1),COUNTIF(rng,r_2),COUNTIF(rng,r_3))
  )