Excel COUNTIF 匹配目标的变体:LET 解决方案?
Excel COUNTIF match variations of target: LET solution?
这是一个比简单的 =COUNTIF(rng,"*"&value&"*")
稍微复杂的问题,如 here.
我有一个二维数组,其单元格包含如下数据:
- abc
- def
- abc def
- ghi
- abc,def,ghi
- abcdef
- ghi;定义
..... 以及其他几个变体。 我正在尝试计算“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))
)
这是一个比简单的 =COUNTIF(rng,"*"&value&"*")
稍微复杂的问题,如 here.
我有一个二维数组,其单元格包含如下数据:
- abc
- def
- abc def
- ghi
- abc,def,ghi
- abcdef
- ghi;定义
..... 以及其他几个变体。 我正在尝试计算“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))
)