在单元格中搜索子字符串并返回矩阵的值

问题描述 投票:1回答:2

给出以下excel表:

Sheet01 字符串:A 输出:B

+---------------------+--------------+
|       String        |    Output    |
+---------------------+--------------+
| ABC Test01          | It is Test01 |
| DEF Test01          | It is Test01 |
| Test01 GHI          | It is Test01 |
| Hellow Test02 World | Wow Test02   |
| Test02 Sum Sing     | Wow Test02   |
+---------------------+--------------+

Sheet02 搜索标准:A 输出:B

+-----------------+--------------+
| Search Criteria |  OutputThis  |
+-----------------+--------------+
| Test01          | It is Test01 |
| Test02          | Wow Test02   |
+-----------------+--------------+

所以基本上我想知道Sheet02中的字符串中是否可以找到Sheet02中的搜索条件。 如果是,则显示OutputThis(Sheet02)的Output(Sheet01)值。

以下作品完全匹配:

=INDEX(Sheet02!B:B,MATCH(A2,Sheet02!A:A,0))

现在我只是尝试放入没有任何意义的类似操作符。因为excel现在无法在搜索条件中找到String的哪个部分。

我正在寻找的是什么

=New_Function(SearchCriteriaMatrix, SearchCell, OutputMatrix)

编辑:

我只是使用以下代码,它以某种方式工作:

=INDEX(Sheet02!B:B,Match(A2,Sheet02!A:A,-1)) 关键是“-1”。它会将标准从完全匹配更改为广泛匹配。至少这是我想要它做的,但它不能很好地锻炼。也许有人可以使用它并提供帮助。

excel string excel-vba substring excel-2010 vba
2个回答
0
投票

这是一个单元格数组公式:

  1. 在单元格Sheet01!B2类型: =INDEX(Sheet02!B:B,MATCH(1,IF(ISERROR(SEARCH(Sheet02!A:A,A2)),0,1),0))
  2. 按ctrl + shift + enter键将公式作为单细胞数组公式完成
  3. 将此单元格复制到剩余范围Sheet01!B3:B6

注意:它给出匹配的第一个Sheet02搜索条件的输出,而不是字符串中找到的第一个。所以字符串Test02 and Test01将输出It is Test01,因为Test01Test02之前列出Sheet02


1
投票

SEARCHFIND可以在字符串中找到子字符串。所以类似于:

=LOOKUP(2,1/SEARCH(srchCritTbl[Search Criteria],A2),srchCritTbl[OutputThis])

将工作。

我将你的sheet2表变成了一个“真正的”表,我正在使用结构化引用,但它也适用于离散引用,但引用应该只包含数据表的活动部分,而不是整个列。

这是一个显示结果的屏幕截图:

enter image description here

如果您对Sheet02上的表使用直接引用,它将如下所示:

=LOOKUP(2,1/SEARCH(Sheet02!$A$2:$A$3,
Sheet01!$A2),Sheet02!$B$2:$B$3)

这种方式的工作方式:

  • SEARCH返回一个数字或错误的数组,具体取决于是否在表1中的引用单元格中找到table2的内容。
  • 然后1/Search(...将返回错误或某个必须不大于1的数字。
  • 使用2作为LOOKUP中的查找标准可以保证它将大于lookup_vector中返回的任何值。
  • 如果LOOKUP函数找不到lookup_value,则该函数匹配lookup_vector中小于或等于lookup_value的最大值。编辑:正如@Gregory指出的那样,如果lookup_vector按升序排序,则适用。如果不是,那么小于或等于lookup_value的最后一个条目将匹配。
  • 由于result_vector引用了OutputThis列,因此将返回该列中的匹配条目。

在这种情况下,人们还可以保证lookup_value将大于lookup_vector中的任何值,使用非常大的数字,并消除1/...部分:

=LOOKUP(9.9E+307,SEARCH(srchCritTbl[Search Criteria],Sheet01!$A2),srchCritTbl[OutputThis])

我习惯使用另一种形式,因为它更有用。

© www.soinside.com 2019 - 2024. All rights reserved.