找到“是”或N的关键词

时间:2017-02-21 20:04:14

标签: excel-formula

我有一个包含大量数据的专栏,但我想知道如何使用关键词(下面的关键字)找到内容?

*更正,*更改,*合法,*财产,条款,归属,付款,日期,利息,corr,修订,chg,地址,exhiibit,添加,公证,完整,amnt,

没有特别的形式,我需要找到这些,我想知道我是否可以得到一个“是”或“否”类型的答案。

2 个答案:

答案 0 :(得分:1)

如果没有丑陋的公式,可以使用VBA UDF。

Function containsWord(testCell As Range, wordList As String) As Boolean
    'loop through incoming list of words
    For Each testWord In Split(wordList, ",")
        'test to see if word is in the testCell
        If InStr(1, LCase(testCell.Value), LCase(testWord)) Then
            'if it is set the return to true and exit
            containsWord = True
            Exit Function
        End If
    Next testWord
End Function

要使用它,只需创建一个新模块并删除此代码,然后就可以在单元格中使用此功能。如果您正在测试单词的单元格是A1,单词列表是B1(逗号分隔),那么:

=containsWord(A1,B1)

答案 1 :(得分:1)

当他们不笨拙时,我更喜欢只有公式的答案。此答案中的所有公式都是数组公式,因此在退出单元格时需要 CTRL + SHIFT + ENTER 。假设关键字位于名为KywrdTbl的范围内,并且您要在其中搜索关键字的单元格为A1,则以下任一项将确定A1是否包含任何关键字(1表示是; 0表示否):< / p>

>>> s = '{1,2,3}'
>>> s = s[1:-1]
>>> ss = s.split(',')
>>> xs = [int(s) for s in ss]
>>> print(xs)
[1, 2, 3]

将输出转换为是和否:

=MAX(IFERROR(SIGN(FIND(KywrdTbl,$A1)),0))
=MAX(IF(ISERROR(FIND(KywrdTbl,$A1)),0,1))

这将返回找到的关键字的数字

=IF(MAX(IFERROR(SIGN(FIND(KywrdTbl,$A1)),0))=1,"Yes","No")

所以让我们分解这些公式。公式的数组方面允许我们独立检查每个关键字(然后=SUM(IFERROR(SIGN(FIND(KywrdTbl,$A1)),0)) SUM他们的结果。 MAX返回A1中每个关键字的字符索引数组。然后FIND将每个索引减少到1(因为索引不能为负)。然后SIGN在0中交换任何未找到关键字的情况。最后,我们IFERROR增加1的数量,或者使用SUM来确定是否有1个。第一个代码块中的替代方案只是用MAX替换IFERROR(SIGN(...),0),因此明确地为所有找到的索引分配1而不是使用IF(ISERROR(...),0,1)技巧。