在单元格范围内查找不区分大小写的文本字符串

在单元格范围内查找不区分大小写的文本字符串

我在 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

在此处输入图片描述

相关内容