我正在尝试根据第B
列中的值进行搜索,并在第A
列中查找字符串,例如:
列A
abc, cde | abc, 1234 | cde | abc, etc
列B
abc, cde
我正在尝试使用第B
列中的值,并在第A
列中搜索和匹配,并在第C
列中返回匹配/不匹配的值。
我尝试使用MATCH(B1,A:A)
函数并返回匹配或不匹配的值,但它都返回不匹配,并且它没有搜索列A
上具有 |
我可以使用任何公式?
如果你想要的是获取一个布尔值,即TRUE
或FALSE
,它会告诉你单元格B1
中的字符串是否在单元格A1
的字符串值中的某个地方,你可以这样做
=NOT(ISERR(SEARCH(B1,A1)))
SEARCH
函数获取单元格A1
中的值,并尝试在单元格B1
中包含的字符串值中找到它。我说"trie",因为如果什么也没找到,它可能会返回错误。
因此,ISERR(SEARCH(...))
检查错误并返回TRUE
如果有错误,在这种情况下,这意味着单元格B1
中的 velue 与单元格A1
中的 velue 不匹配。
最后,为了将函数ISERR
的输出转换为你想要的布尔答案,我们通过执行NOT(ISERR(...))
来否定它。
例 1
检查第
B
列中的每个字符串值是否在单元格A1
的字符串值中包含ED
A B C
1 abc, cde | abc, 1234 abc, cde =NOT(ISERR(SEARCH($B1,$A$1)))
2 zyy | xww =NOT(ISERR(SEARCH($B2,$A$1)))
. ... ...
10 abc, 1234 =NOT(ISERR(SEARCH($B10,$A$1)))
它返回单元格C1
中的TRUE
,FALSE
单元格C2
中的TRUE
和单元格C10
中的。
后记:选择Bioschaf的评论可能会帮助您概括这个概念。
例 2
检查列
B
的每个单元格的字符串值是否包含ED列A
的相邻单元格中的字符串值
或者使用您的示例。
A B C
1 abc | cde abc =NOT(ISERR(SEARCH($B1,$A1)))
2 cde | bsd xxx =NOT(ISERR(SEARCH($B2,$A2)))
3 aaa | abc bsd =NOT(ISERR(SEARCH($B3,$A3)))
例 3
使用数组公式检查每列
A
的值是否包含ED列B
的范围$B$1:$B$11
中的某个位置
A B C
1 abc abc | cde =NOT(NOT(SUM(--NOT(ISERR(SEARCH($A1,$B$1:$B$11))))))
. ... ... ...
1000 aaa =NOT(NOT(SUM(--NOT(ISERR(SEARCH($A1000,$B$1:$B$11))))))
您可以从中删除NOT(NOT(...))
部分,以查看出现次数,而不是将其转换为布尔值。
例 4
使用数组公式检查每列
B
的值是否包含S列D
的范围$D$2:$D$5
中的至少一个字符串值
使用您在评论中提供的数据。并在您在评论中提到的列中显示它们,因此我们有
B C D
1
2 hardware|information services|information technology hardware
3 hardware mobile
4 apps|mobile 3d
5 computer
因此,如果我们想检查第B
列中的每个值是否包含一个写在D2:D5
范围内的单词,我们可以做的是(比如在 E 列中):
E
1
2 =NOT(NOT(SUM(--NOT(ISERR(SEARCH($D$2:$D$5,$B2))))))
4 =NOT(NOT(SUM(--NOT(ISERR(SEARCH($D$2:$D$5,$B3))))))
3 =NOT(NOT(SUM(--NOT(ISERR(SEARCH($D$2:$D$5,$B4))))))
5
其中,上述每个公式都必须通过按 CTRL+SHIFT+ENTER 作为矩阵公式进行验证。这样做将呈现:
E
1
2 TRUE
4 TRUE
3 TRUE
5
在E2
我们有TRUE
,因为hardware|information services|information technology
包含单词hardware
,实际上位于D2
.
在E3
我们有TRUE
,因为hardware
包含(确切地)单词hardware
,实际上位于D2
.
在E4
我们有TRUE
,因为apps|mobile
包含单词mobile
,实际上位于D3