vba - Excel VBA 中的循环单词匹配函数

标签 vba loops excel match

我有一个关键字列表,想查看一个单元格是否包含这些单词中的任何一个。例如,如果我的关键字列表是(猫、狗、乌龟),则如果该函数正在查找“Mr. Dogs Magic Land”内部,则该函数将返回 MATCH。我在网上找到了一个很好的 UDF 用作该函数,但是当我尝试循环它以测试我的关键字列表中的每个单词时,我得到#VALUE!。第一个函数是我的循环,第二个是在互联网上找到的 UDF 匹配函数(抱歉不记得在哪里,但支持它的制作者。)我尝试过单词匹配函数的变体,例如 InStr,但没有成功。

Function StringFind(rng(), source)
For I = LBound(rng) To UBound(rng)
StringFind = MyMatch(rng(I), source)
If StringFind = "MATCH" Then Exit Function
Next I
StringFind = "NO MATCH"
End Function  

Function MyMatch(FindText As String, WithinText As Variant) As String
     '
    Dim vntFind As Variant
    Dim vntWithin As Variant

    For Each vntFind In Split(UCase(FindText), " ")
        If Len(Trim(vntFind)) > 0 Then
            For Each vntWithin In Split(UCase(WithinText), " ")
                If Len(Trim(vntWithin)) > 0 Then
                    If vntFind = vntWithin Then
                        MyMatch = "MATCH"
                        Exit Function
                    End If
                End If
            Next
        End If
    Next
    MyMatch = "NO MATCH"
End Function

最佳答案

1) 公式

我首先会针对这个特定问题提供非 VBA 解决方案,因为实际上并不需要 VBA。这个数组公式会做同样的事情。按 CTRL-SHIFT-ENTER 输入数组,您将看到公式周围出现大括号 { }。然后就可以复制下来了。

'=IF(OR(ISNUMBER(SEARCH($F$1:$F$3, A1))), "匹配", "不匹配")

2) UDF

使用与您相同的语法,以下是我如何使用 UDF 来解决此问题。

enter image description here

Function MySearch(MyRNG As Range, MyStr As String) As String
Dim cell As Range

    For Each cell In MyRNG
        If LCase(MyStr) Like LCase("*" & cell & "*") Then
            MySearch = "Match"
            Exit Function
        End If
    Next cell

    MySearch = "No Match"
End Function

关于vba - Excel VBA 中的循环单词匹配函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9944175/

相关文章:

javascript - 如何使用 Javascript 简单地循环遍历数组?

java - SwingWorker(不工作),循环在第一次迭代后结束

xml - 从解压缩的 xml 文件夹重新创建 excel .xlsx 文件

excel - Access 换行符成为_x000D_

VBA - 图书馆中的专有名称管理

通过自定义按钮运行宏时出现 VBA 错误 'Wrong number of arguments or invalid property assignments'

vba - 如何使数组函数从 vba excel 中的数字创建序列月份?

mysql - 外部循环不起作用

mysql与vb脚本的连接(来自excel宏)

vba - 运行时错误 13 : Type Mismatch on code when I add certain lines of code