在Excel中搜索多个特定单词

时间:2014-07-09 03:03:10

标签: excel vba search text excel-formula

我已经看过几个可以在单元格中搜索多个单词的Excel公式示例:

=IF(SUMPRODUCT(--(NOT(ISERR(SEARCH({"mail","post"},A4)))))>0,1,"")

=OR(NOT(ISERR(SEARCH("mail",A4))),NOT(ISERR(SEARCH("post",A4))))

但是,结果将会收集" mail" (即" mail"或" email")或" post" (即"帖子"或"姿势")。有没有办法搜索多个单词,只列出列出的特定单词?

1 个答案:

答案 0 :(得分:1)

遵循该计划:

enter image description here

该公式考虑搜索一些字符结尾的字符,例如"。" (在数组中)。
在之前搜索此字符,在之后搜索以尝试定义完整字词 如果您只需要搜索第一次出现,可以使用EXCEL:

B3 -> =IF(IFERROR(VLOOKUP(MID(A2;SEARCH(B2;A2)+LEN(B2);1);{" ";"-";".";",";";";":"};1;);FALSE)=FALSE;FALSE;TRUE)
B4 -> =OR(SEARCH(B2;A2)=1;IF(IFERROR(VLOOKUP(MID(A2;SEARCH(B2;A2)-1;1);{" ";"-";".";",";";";":"};1;);FALSE)=FALSE;FALSE;TRUE))
B5 -> =AND(B3;B4)

如果您需要搜索每次出现,最好使用VBA:

Public Function FindWords(xx As Range, Stri As String) As Boolean
    For i = 1 To Len(xx.Value)
        If Mid(xx.Value, i, Len(Stri)) = Stri Then
            If (i = 1) Then
                If InStr(1, " ,.-;:_", Mid(xx.Value, i + Len(Stri), 1)) > 0 Or (i + 1 + Len(Stri) > Len(xx.Value)) Then
                    FindWords = True
                    Exit Function
                End If
            ElseIf (InStr(1, " ,.-;:_", Mid(xx.Value, i - 1, 1)) > 0) Then
                If InStr(1, " ,.-;:_", Mid(xx.Value, i + Len(Stri), 1)) > 0 Or (i + Len(Stri) > Len(xx.Value)) Then
                    FindWords = True
                    Exit Function
                End If
            End If
        End If
    Next
    FindWords = False
End Function

在模块中添加功能:

B7 -> =FindWords(A2;B2)