我在 Excel 中遇到了一些问题需要解决,但我不太清楚该如何解决。我在网上搜索了几次,但并没有找到任何有用的公式。情况如下(为了回答这个问题,略作简化):
我在 AE 列中有数据。我需要将 A 和 B 单元格中的数据与 CE 中的数据进行匹配,并向 F 列返回 TRUE 或 FALSE。
如果出现以下情况则返回 TRUE:
- 在 CE 中的任何字符串中可以找到 A 中的字符串。
或者
- 在 CE 中的任何字符串中可以找到 B 中的字符串。
否则,返回 FALSE。
字符串必须与范围内的全部或部分字符串完全匹配,但匹配函数必须不区分大小写。我截取了一个示例表的屏幕截图以供参考。
我确信我需要在公式的最外层使用 IF 或,后面可能跟着 OR。然后,对于 OR 的参数,我预计会用到 IFERROR。但我不知道该用哪个函数最有效地处理文本字符串搜索。
我认为 VLOOKUP 在这方面非常有限。可能可以进行全字符串与全字符串的比较,但我相当肯定它不会返回部分字符串匹配的准确结果。FIND 和 SEARCH 似乎仅限于单目标搜索,并且区分大小写。我想我可以使用 UPPER 或 LOWER 来强制搜索不区分大小写,但我仍然需要可以进行准确部分匹配的东西和搜索指定范围的細胞。
是否有任何功能或功能组合可以在这里发挥作用?
理想情况下,我希望使用直接的 Excel 公式来完成此操作。我对 VBScript 或类似工具完全不熟悉,也没有时间为这个项目学习它。
答案1
这是我的肮脏的解决方案,我不确定它是不是最好的。
您应该尝试添加一个临时列,然后稍后将其隐藏。并尝试将所有数据转换为小写或大写,然后遵循您已经完成的逻辑。
像这样:
A2: ABcdeF
B2: =lower(A2) --> abcdef
C2: aBc
D2: =lower(C2) --> abc
E2: =find(D2, B2) --> found
F2: =find('poi', B2) --> not found
VLOOKUP函数有一个可选参数:范围查找
逻辑值(仅限 TRUE 或 FALSE),指示您是否希望 VLOOKUP 查找与 lookup_value 完全匹配或近似匹配的值
http://spreadsheets.about.com/od/excelfunctions/ss/vlookup_2.htm
答案2
尝试合并这些单元格文本,这是我的技巧:
A1: a
A2: b
A3: c
B1: ">" & A1 & "<" --> >a<
B2: = B1 & ">" & A2 & "<" --> >a<>b<
B3: = B2 & "<" & A3 & "<" --> >a<>b<>c<
...您可以使用 Excel 实现自动化,相信它只需不到 1 分钟 :-)
所以最后一个单元格应该合并所有单元格中的所有文本
然后进行普通搜索,但请确保在条件中包含“>”和“<”,例如
=find(">" & "abc" & "<", $B$3)
这又是我的阴谋!
答案3
理想情况下,我希望使用直接的 Excel 公式来完成此操作。我对 VBScript 或类似工具完全不熟悉,也没有时间为这个项目学习它。
VBA范围.查找方法只适用于此类任务。不使用它真是太可惜了。:)
句法
范围。寻找(什么之后,看看,看着、搜索顺序、搜索方向、相符、匹配字节、搜索格式)
我们只需要 3 个参数来完成您的任务。其余的参数请忽略
- 范围:搜索范围
- 什么:要搜索的数据
- 看着:可以是一个 xlWhole(完全匹配)或 xlPart(部分匹配)
- 相符:如果为 True,则搜索区分大小写。如果为 False,则搜索不区分大小写
一个简短的例子如下
Set result = Columns(C:E).find(what:=[A1], LookAt:=xlPart, MatchCase:=false)
此代码尊重您的附加条件,例如
- 检查 A 列的数据和B 列。如果其中一个匹配,则返回 true
- 即使部分匹配也返回 true
- 忽略大写或小写
- 返回真的或者错误的在 F 列中
Sub SearchMatches()
For i = 2 To 5
On Error Resume Next
Set checkColA = Columns("C:E").Find(Cells(i, 1), , , xlPart, , , False)
Set checkColB = Columns("C:E").Find(Cells(i, 2), , , xlPart, , , False)
On Error GoTo 0
If checkColA Is Nothing And checkColB Is Nothing Then
Cells(i, 6) = False
Else
Cells(i, 6) = True
End If
Next i
End Sub