Vba 宏以查找数组中的所有值是否存在于选定单元格中

Vba 宏以查找数组中的所有值是否存在于选定单元格中,vba,excel,Vba,Excel,我有一张名为“受让人”的表格,里面有一些人的名字。我有另一个名为Raw的工作表,其中包含多行包含文本字符串。我的要求是找出单元格中是否存在“工作表受让人”中的任何姓名,如果存在,该单元格中的姓氏是哪个。要详细说明,请参见以下示例 受让人名单包括A1单元的Vivek S.Panicker、A2单元的John Smith和A3单元的William Dezuza Margeret。原始表单A1单元格包含一个文本字符串,如:约翰·史密斯昨晚与我会面,询问威廉·德祖扎·玛格丽特的情况。这个字符串中的姓氏是

我有一张名为“受让人”的表格,里面有一些人的名字。我有另一个名为Raw的工作表,其中包含多行包含文本字符串。我的要求是找出单元格中是否存在“工作表受让人”中的任何姓名,如果存在,该单元格中的姓氏是哪个。要详细说明,请参见以下示例


受让人名单包括A1单元的Vivek S.Panicker、A2单元的John Smith和A3单元的William Dezuza Margeret。原始表单A1单元格包含一个文本字符串,如:约翰·史密斯昨晚与我会面,询问威廉·德祖扎·玛格丽特的情况。这个字符串中的姓氏是William Dezuza Margeret,我需要使用VBA代码提取它。由于这需要在多行中完成,因此非常感谢带有循环的宏。

再次感谢您的帮助。这个函数似乎只返回John Smith,而不是最后一个。你能核实一下吗?@VivekS.Panicker我不知道为什么它不适合你。我刚刚对它进行了测试,并返回了William Dezuza Margaret,因为它在句子中最后一次使用。有时,它似乎返回了0,即使值是在前面返回的。你知道为什么会这样吗?
Function LastUsedName(rng As Range) As Variant

    Dim names As Variant
    names = Sheets("Assignee").Range("A1:A" & Sheets(2).Range("A" & Rows.Count).End(xlUp).Row)

    Dim v As Variant
    For Each v In names
        If InStr(1, rng, v, vbTextCompare) Then
            Dim pos As Long
            pos = InStrRev(rng, v, -1, vbTextCompare)
            LastUsedName = Mid(rng, pos, Len(v))
            Exit Function
        End If
    Next

End Function