在一系列单元格中查找不区分大小写的文本字符串


3

我在Excel中遇到了一些问题,我不太清楚如何去做。我在网上做了一些搜索,并没有真正找到任何看似有用的公式。这是情况(为了这个问题,简化了一点):

我在A-E栏中有数据。我需要匹配A和B中单元格中的数据,C-E中的数据,并返回TRUE或FALSE到F列。

如果以下情况返回TRUE
- A中的字符串位于C-E中的任何字符串中。
要么
- B中的字符串位于C-E中的任何字符串中。

否则,返回FALSE。

字符串必须与范围内的整个或部分字符串完全匹配,但匹配函数必须不区分大小写。我拍了一张示例表的截图供参考。

enter image description here

我很确定我需要使用IF或在公式的最外层,可能后面跟着OR。那么,对于OR的参数,我预计会有一些使用IFERROR。但我不知道的是我能够最有效地使用的函数来处理文本字符串搜索。

我认为VLOOKUP在这方面非常有限。它 可以 可以在全字符串比较中使用整个字符串,但我相当肯定它不会返回部分字符串匹配的准确结果。 FIND和SEARCH似乎仅限于单目标搜索,并且也区分大小写。我想我可以使用UPPER或LOWER在搜索中强制不区分大小写,但我仍然需要能够进行准确的部分匹配的东西 搜索指定的 范围 细胞

是否有任何功能或功能组合可以在这里工作?

理想情况下,我想用直接的Excel公式来做这件事。我对VBScript或类似工具一点也不熟悉,也没有时间为这个项目学习它。

Answers:


2

这是我的肮脏解决方案,我不确定它是最好的解决方案。

您应该尝试添加临时列,然后可以稍后隐藏它。并尝试将所有数据转换为小写或大写,然后按照您已经完成的逻辑。

像这样:

A2: ABcdeF
B2: =lower(A2) --> abcdef
C2: aBc
D2: =lower(C2) --> abc
E2: =find(D2, B2) --> found
F2: =find('poi', B2) --> not found

VLOOKUP函数有一个可选参数: range_lookup

一个逻辑值(仅限TRUE或FALSE),指示您是否希望VLOOKUP查找与lookup_value完全匹配或近似匹配的值

http://spreadsheets.about.com/od/excelfunctions/ss/vlookup_2.htm


我以前用TRUE和FALSE值运行VLOOKUP,并找到了“近似匹配” 办法 关闭。我认为他们正在使用一些 自由意义的“近似”一词。
Iszi

这是我的伎俩,请尝试告诉我。请在这个主题中阅读我的其他答案
Truong Ha

0

尝试将这些单元格文本组合起来,这是我的诀窍:

A1: a
A2: b
A3: c
B1: ">" & A1 & "<" --> >a<
B2: = B1 & ">" & A2 & "<" --> >a<>b<
B3: = B2 & "<" & A3 & "<" --> >a<>b<>c<

...你可以使用excel自动化,只需要不到1分钟:-)

所以最终的单元格应该结合所有单元格的所有文本

然后进行普通搜索,但请确保包含“&gt;”和“&lt;”符合你的标准

=find(">" & "abc" & "<", $B$3)

再一次,这是我的诡计!


有趣的想法。但是如何用Excel“自动化”这个呢?我有近900行要处理。
Iszi

哎呀,只需简单地拖动B3,excel就会自动复制公式并更新其他单元格。或者您甚至可以将鼠标指向B3单元格的右下角并双击它(您应该看到鼠标光标转到十字架+)
Truong Ha

0

理想情况下,我想用直接的Excel公式来做这件事。我对VBScript或类似工具一点也不熟悉,也没有时间为这个项目学习它。

VBA的 Range.Find 方法仅适用于此类任务。不使用它将是一种耻辱。 :)

句法

范围 。找( 什么 ,之后,LookIn, 看着 ,SearchOrder,SearchDirection, 相符 ,MatchByte,SearchFormat)

我们只需要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

enter image description here


我知道这个问题已经有3年了,但也许其他人会觉得这个问题很有用
nixda
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.