将单元格内的任何单词与单元格范围内的任何单词匹配

Posted

技术标签:

【中文标题】将单元格内的任何单词与单元格范围内的任何单词匹配【英文标题】:Match Any Word Inside Cell With Any Word In Range of Cells 【发布时间】:2016-11-17 17:36:21 【问题描述】:

我有一个短语列表。我想检查是否有任何新术语与该列表部分匹配。

我正在寻找代码来实现列表上的模糊匹配以返回具有紧密匹配的单元格。

示例数据:

Phrases,Terms
real term,new words
great work,new term
check phrase,more phrase
example here,great alpha
phrase random,beta new

所需的输出:

Phrases,Term,Match
real term,new words,No match
great work,new term,real term
check phrase,more phrase,check phrase/phrase random
example here,great alpha,great work
phrase random,beta new,No match

我有什么:

如果找到,我尝试使用以下代码匹配单元格:

=IF(ISERROR(MATCH("*" & B2 & "*",A:A, 0)), "No Match", VLOOKUP("*" & B2 & "*",A:A,1,FALSE))

但是,代码只匹配整个单元格。如何使它匹配单元格中的任何单词?这将创建一个模糊匹配。任何积极的意见都受到高度赞赏。

【问题讨论】:

你试过VBA代码了吗? 嘿@CallumDA33,还没有。我对excel代码不是很好。比较精通linux和bash。很乐意尝试/学习你们的建议 :-) 感谢您的关注。 【参考方案1】:

这是您问题的(粗略且现成的)VBA 解决方案。您需要将其插入到 VBA 编辑器中的代码模块中,然后您可以运行宏以获得所需的输出

Sub FindSimilar()
    Dim phrases As Range, phrase As Range
    Dim terms As Range, term As Range
    Dim matches As String
    Dim words() As String

    'ensure this has the correct sheet names for your workbook
    Set phrases = ThisWorkbook.Worksheets("Sheet2").Range("A2:A6")
    Set terms = ThisWorkbook.Worksheets("Sheet1").Range("D2:D6")

    For Each term In terms
        matches = vbNullString
        words() = Split(term.Value)

        For i = 0 To UBound(words, 1)
            For Each phrase In phrases
                If InStr(1, phrase.Value, words(i)) Then
                    matches = matches & phrase & "/"
                End If
            Next phrase
        Next i

        If matches <> vbNullString Then
            term.Offset(0, 5).Value = Left(matches, Len(matches) - 1)
        Else
            term.Offset(0, 5).Value = "No match"
        End If
    Next term
End Sub

【讨论】:

嘿@CallumDA33,这对我的例子很有效。我只是在我们的一些数据上对其进行测试。 2个问题。如何为短语范围引用不同的工作表(Sheet2,相同的工作簿)?而且,我在哪里更改匹配输出的列?我将有效地在 D 列中有术语,并在 I 列(大写 i)中匹配 我已经更新了以下内容的代码: 1. 请参阅set 命令以获取短语和术语引用 - 确保它们指向您的数据。我现在已按照您的要求更改了它们。 2. 在底部看到term.Offset() 行,它们按照要求将D 列(从terms 的定义)偏移5 列——即I 列。尝试确保您了解它的作用,以便您可以在需要时自己进行小的更改 太棒了!现在试试看。是的,我对它很陌生。我确实尝试查找它以了解语法。你的指导很有帮助。非常感谢:-) 我很高兴,非常乐意提供帮助 嘿@CallumDA33,我很确定我的文件名和单元格是正确的,但是,我收到“运行时错误'424':需要对象”。这是否意味着我没有调用正确的单元格?

以上是关于将单元格内的任何单词与单元格范围内的任何单词匹配的主要内容,如果未能解决你的问题,请参考以下文章

Excel VBA函数在单元格范围内查找值

直到最后一行的单元格引用

将 Google Ads 数据导出到特定单元格范围

Vba 代码在单元格范围内复制特定值

一列单元格范围内一串数字中单个数字的总出现次数

匹配字符串中的完整单词