Excel用户定义的函数:使用正则expression式匹配一个string,循环传递给函数的几个值作为范围
我有几行数据需要与另一个表单中的数据匹配,然后将匹配列中find的值input到同一个表单中。 问题是这样设置的:
我有一些input数据,如下面的截图所示。
对于“名称”字段(B列)中的每个条目,我想要到达另一个表单,我将其称为“参考表”,其结构如下所示:
然后循环访问列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数据可以在这里下载
- 使用embedded式dobule引号和逗号对单个RegExexpression式进行解码
- 如何将caputure匹配string的一部分? 非捕获组
- 如何在Excel中使用Excelreplace<*>如在Excel中? (常用expression)
- Excel UDF用于捕获字符中的数字
- TCL_REGEXP ::如何使用TCL正则expression式从variables中search5个不同的单词。 如何发送输出到Excel表格的每一列?
- VBAsearch使用正则expression式重复单个字符
- dynamicreplace编辑器中的string
- Excel VBA正则expression式匹配位置
- 比较两个文件