Excel用户定义的函数:使用正则expression式匹配一个string,循环传递给函数的几个值作为范围

我有几行数据需要与另一个表单中的数据匹配,然后将匹配列中find的值input到同一个表单中。 问题是这样设置的:

我有一些input数据,如下面的截图所示。

input_sheet

对于“名称”字段(B列)中的每个条目,我想要到达另一个表单,我将其称为“参考表”,其结构如下所示:

regex_column

然后循环访问列E中的条目以及匹配的任何地方,select列A,B中的值和匹配的行号,并将其作为附加列插入到input表中。 结果将如下所示:

结果

请注意,input数据“名称”字段包含不是“干净”的条目,但仍包含将出现在“参考工作表”的其中一行中的string。 在这个例子中,第3行包含与“参考表”中的E6和E8相匹配的条目“Rostock A”。 由于这个原因,我想使用regex并写了一个VBA函数,目前,它并没有做我期望的事情:

 Public Function test_regex_func(input_cell As Range, _ regex_range As Range _ ) As Variant On Error GoTo ErrHandl Dim regexpr As Object Set regexpr = CreateObject("VBScript.RegExp") Dim arrOutputValues() As Variant Dim i As Integer i = 1 For Each regex_entry In regex_range regexpr.Pattern = regex_entry If regexpr.test(input_cell.Value) Then ' get the row number of the match arrOutputValues(i) = regex_entry.Row i = i + 1 'increment array index only if there is a match End If Next regex_entry test_regex_func = arrOutputValues ErrHandl: test_regex_func = CVErr(xlErrValue) End Function 

现在,我只是试图返回“参考表”的匹配行的行号,但我只是得到一个#VALUE! 错误。 所以我的问题是:

  • 我在哪里错了?
  • 我怎样才能扩展这个函数来返回列A和B的值?

testing数据可以在这里下载