我试图调整我在网上的示例电子表格中找到的这段代码,但我无法理解它。
原始电子表格基本上基于用户定义的查找执行INDEX / MATCH,并在连续列表中整齐地列出匹配。示例电子表格的输出如下所示:
http://i.stack.imgur.com/DyahB.png - 示例Excel输出(注意第一和第二场比赛之间没有差距)
基础算法是:
=IF(ISERROR(INDEX($A$1:$B$8,SMALL(IF($A$1:$A$8=$E$1,ROW($A$1:$A$8)),ROW(1:1)),2)),"",INDEX($A$1:$B$8,SMALL(IF($A$1:$A$8=$E$1,ROW($A$1:$A$8)),ROW(1:1)),2))
现在,我希望查找代替检索 PARTIAL 匹配,此外,水平生成输出:
http://i.stack.imgur.com/ShED0.png - 根据部分匹配水平生成输出
我不知道怎么会这样做。似乎我会以某种方式尝试改变IF条件以在部分匹配时返回true,但我无法理解它。请帮忙!
答案 0 :(得分:2)
假设通过"部分匹配"你的意思是开始的文字与L1
中的值,然后在N1
中使用此公式
=IFERROR(INDEX($I$2:$I$8,SMALL(IF(LEFT($H$2:$H$8,LEN($L$1))=$L$1,ROW($I$2:$I$8)-ROW($I$2)+1),COLUMNS($N1:N1))),"")
用 CTRL确认 + SHIFT + ENTER 并复制
对于文本中的匹配任何地方,您可以使用此版本
=IFERROR(INDEX($I$2:$I$8,SMALL(IF(ISNUMBER(SEARCH($L$1,$H$2:$H$8)),ROW($I$2:$I$8)-ROW($I$2)+1),COLUMNS($N1:N1))),"")
这两个公式都不区分大小写,但您可以通过将SEARCH
更改为FIND
来轻松制作后者
使用IFERROR
功能意味着您不需要重复进行错误处理 - 需要Excel 2007
或更高版本
答案 1 :(得分:0)
我在Barry的代码上稍加构建,需要做一些调整以供自己使用(当前正在工作的项目)。
我所做的调整:
最终结果是:
=IFERROR(INDEX(A$8:A$295,SMALL(IF(ISNUMBER(SEARCH('Store History'!$F$2,A$8:A$295)),ROW(A$8:A$295)-ROW(A$8)+1),ROWS(A$2:A2))),"")
值得重复的是,这是一个数组公式,需要使用 CTRL + SHIFT + ENTER
输入此文件放置在单元格A2中,并且在水平和垂直方向上都进行了拖动(在我的情况下,随着我向数据库中添加更多条目,水平在不断扩展)。
我添加此评论(即使它是一个很长的不活动线程)的目的是,尝试使它成为Google上更相关的搜索结果,以“ excel索引匹配具有多个结果的部分字符串”或其他形式。我花了数小时的时间寻找该解决方案,并且它功能强大且优雅。我要感谢OP,尤其是感谢Barry的代码!