Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vba 函数,该函数基于单词列表从多个列返回精确的字符串匹配_Vba_Excel_String Matching - Fatal编程技术网

Vba 函数,该函数基于单词列表从多个列返回精确的字符串匹配

Vba 函数,该函数基于单词列表从多个列返回精确的字符串匹配,vba,excel,string-matching,Vba,Excel,String Matching,我希望在编辑这段有用的代码时得到帮助: Function ListSearchB(text As String, wordlist As String, Optional caseSensitive As Boolean = False) Dim strMatches As String Dim res As Variant Dim arrWords() As String arrWords = Split(wordlist) On Error Resume Next Err.Clear For

我希望在编辑这段有用的代码时得到帮助:

Function ListSearchB(text As String, wordlist As String, Optional caseSensitive As Boolean = False)
Dim strMatches As String
Dim res As Variant
Dim arrWords() As String
arrWords = Split(wordlist)
On Error Resume Next
Err.Clear
For Each word In arrWords
    If caseSensitive = False Then
        res = InStr(LCase(text), LCase(word))
    Else
        res = InStr(text, word)
    End If
    If res > 0 Then
        strMatches = strMatches & word
    End If
Next word
If Len(strMatches) <> 0 Then
    strMatches = Right(strMatches, Len(strMatches))
End If
ListSearchB = strMatches
End Function
函数ListSearchB(文本作为字符串,单词列表作为字符串,可选区分大小写作为布尔值=False)
模糊的字符串
作为变体的Dim-res
将单词()设置为字符串
arrWords=Split(单词列表)
出错时继续下一步
呃,明白了
每一个字,每一个字
如果区分大小写=False,则
res=仪器(LCase(文本),LCase(文字))
其他的
res=仪表(文本、文字)
如果结束
如果res>0,则
stratches=stratches&word
如果结束
下一个词
如果Len(stratches)为0,则
stratches=右(stratches,Len(stratches))
如果结束
ListSearchB=stratches
端函数
这段代码对于它当前所做的工作非常有效。首先,它选择要比较的文本字符串,然后选择要查找匹配项的逗号分隔单词数组。如果文本字符串中的任何单词与数组中的某个单词匹配,它将返回该匹配项

我希望添加的是能够选择第一个包含文本的单元格,然后选择第二个包含文本的单元格,然后选择数组本身,并从两个选定的匹配单元格返回任何和所有匹配项

我一整天都在试着让它工作,但每次都会出错

示例如下所示:

苹果比桔子好吃

草莓是最好的浆果

C1(数组):苹果、草莓、蓝莓、桃子、桔子


D1(输出):苹果橙子草莓

一些功能可以帮助您:

'To check if an element is within a specific Array, Object, Range, String, etc.
Public Function isInArray(ByVal itemSearched As Variant, ByVal aArray As Variant) As Boolean
Dim item As Variant

If VarType(aArray) >= vbArray Or VarType(aArray) = vbObject Or VarType(aArray) = vbDataObject Or TypeName(aArray) = "Range" Then
    For Each item In aArray
        If itemSearched = item Then
            isInArray = True
            Exit Function
        End If
    Next item
    isInArray = False
ElseIf VarType(aArray) = vbString Then
    isInArray = InStr(1, aArray, itemSearched, vbBinaryCompare) > 0 'Comparing character by character
Else
    On Error Resume Next
    isInArray = Not IsError(Application.Match(itemSearched, aArray, False)) 'Slow on large arrays
    Err.Clear: On Error GoTo 0
End If

End Function

'To check if a word is within a sentence-like string
Public Function isInStrArray(ByVal itemSearched As Variant, ByVal strSource As Variant) As Boolean
Dim strArr As Variant

isInStrArray = False
If VarType(itemSearched) = vbString And VarType(strSource) = vbString Then
    itemSearched = Trim(itemSearched): strSource = Trim(strSource)
    If Len(itemSearched) > 0 And Len(strSource) > 0 Then
        strArr = Split(strSource) 'Splitting at each space
        isInStrArray = isInArray(itemSearched, strArr)
        Erase strArr
    End If
End If

End Function

您的输入总是2个单元格吗?您需要做的就是连接(使用空格分隔符)要测试的字符串。e、 g:
=ListSearchB(连接(A1,”,B1),C1)