Excel索引匹配 - 包含多个结果的部分字符串

时间:2015-07-16 08:45:08

标签: excel

我试图调整我在网上的示例电子表格中找到的这段代码,但我无法理解它。

原始电子表格基本上基于用户定义的查找执行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,但我无法理解它。请帮忙!

2 个答案:

答案 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的代码上稍加构建,需要做一些调整以供自己使用(当前正在工作的项目)。

我所做的调整:

  1. 返回与我的索引中的搜索条件匹配的单元格
  2. 使该单元在二维上可拖动,因此我可以为多个列建立索引以获取特定信息
  3. 使“第n个”计数器垂直而不是水平(因为我的应用程序是各种数据库,并且每一列都是一个单独的条目。每列的顶部是基于搜索词填充的5行[在我的情况下,商店号])

最终结果是:

=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的代码!