excel - 改进 Excel 中的模糊匹配过滤器
问题描述
我使用一种模糊匹配过滤器,基于带有过滤器列表的附加列。公式为:
=IF(SUMPRODUCT(COUNTIF(A2,"*"&B$2:$B$22&"*"))>0,"Delete","Keep")
事实上,有两个公式,它们作用于同一种类型——它们是在实验中创建的。第二个是:
=IF(SUMPRODUCT(--ISNUMBER(SEARCH($B$2:$B$22,A2))),"Delete","Keep")
- A 列包含要过滤的数据,
- B 列(从 B2 到 B22)包含过滤器列表,
- 在 C 列中,如果 A 列中的值与 B 列中的值没有部分匹配,我写“保留”,如果有任何部分匹配,则写“删除”。
问:如何写而不是“删除”列 B 中的匹配值?我无法在这两个公式中完成这项工作。
更新 @Jerry 翻译公式后
=IFERROR(INDEX($B$2:$B$22,MATCH(9^99,SEARCH($B$2:$B$52,A2))),"Keep")
到
=WENNFEHLER(INDEX($B$2:$B$22;VERGLEICH(9^99;SUCHEN($B$2:$B$52;A2)));"Keep")
使用这个翻译工具(在其他情况下对我有用),我得到以下结果:
这是另一个,而不是杰里的结果。
解决方案
如果只能有 1 个匹配项,则可以在数组公式中使用和(使用INDEX
++ ,如果操作正确,您将在公式栏中的公式周围看到花括号):MATCH
CtrlShiftEnter
=IFERROR(INDEX($B$2:$B$22,MATCH(9^99,SEARCH($B$2:$B$22,A2))),"Keep")
如果有多个匹配项,您将使用上述公式获得最后一个匹配项。如果您希望在这种情况下返回第一个公式,您将不得不使用--ISNUMBER
搜索功能,使用 1 作为第一个参数MATCH
并使用精确匹配(即使用0
/FALSE
作为MATCH
.
当然,COUNTIF(A2,"*"&B$2:$B$22&"*")
在这种情况下,您可以在公式的内部使用而不是--ISNUMBER(...)
.
推荐阅读
- python - Python:检查文件中是否有特定的文本行
- javascript - Chart.js yAxes Ticks stepSize 不起作用(小提琴)
- c - Why lex invokes yyerror while parsing comma separated values?
- java - How do i get this Hex string converted to Date in java
- flutter - Flutter Get closest timestamp to now from List
- java - Disable Wiretap during testing
- javascript - How to get children of a div
- regex - Spring - YAML 文件中的 @Pattern 正则表达式值。(Javax | 休眠)
- c - 不明白为什么 head = head->next 有效
- matlab - 在 Octave|MATLAB 中生成单位三角矩阵