regex 如何在vlookup中合并正则表达式函数?

sbtkgmzw  于 2022-12-14  发布在  其他
关注(0)|答案(4)|浏览(135)

我有一个VBA正则表达式,我想将其与VLOOKUP合并,但是如果与VLOOKUP一起使用,它不会返回基于正则表达式的值。
这是我执行函数=udfRegEx(A2,B2)时返回的结果

字符串

Microsoft Windows Server 2003标准版(64位)

正则表达式

^([^,]*)

结果

微软 windows 服务器2003
但是,当我执行=IFERROR(VLOOKUP(udfRegEx(A2,RegularExpression!B2),[Sample.xls]Sheet1!$B$2:$E$4177,4,FALSE),0)时,它仍然返回Microsoft Windows Server 2003标准版(64位)
列B2是正则表达式^([^,]*)

8yparm6h

8yparm6h1#

请尝试使用:

=IFERROR(udfRegEx(VLOOKUP(udfRegEx(A2,RegularExpression!B2),[Sample.xls]Sheet1!$B$2:$E$4177,4,FALSE),RegularExpression!B2),0)

瞎猜。

rmbxnbpk

rmbxnbpk2#

我不得不这样做我的个人用途,所以我做了一个Excel加载项,这里是GitHub地址.
https://github.com/BlueTrin/BlueXL
如果你需要的话我可以托管一个编译的版本。它添加了一个叫做BXLookup的函数,这个函数支持Regex,你也可以选择你执行查找的列,然后选择要打印的列。
我为你做了一个二进制:
https://bintray.com/bluetrin/BlueXL/BlueXL/0.1.0/view?sort=&order=#
当然,如果你只想使用VBA,这是行不通的,但如果你不介意使用插件,在GitHub上的电子表格中有一个例子。
请澄清您在以下方面的内容:[Sample.xls]Sheet1!$B$2:$E$4177

9cbw7uwe

9cbw7uwe3#

从Office 365开始,有了新的功能XLookUp,它(最终)可以完成你所寻找的铁架。https://www.excelcampus.com/functions/xlookup-explained/

ckocjqey

ckocjqey4#

您不需要正则表达式来移除第一个逗号之后的所有内容。下面的函数也可以做到这一点:

MID(A1,1,SEARCH(",",A1)-1)

也就是说,以下代码至少可以在Office 365上运行(未在早期版本上测试):

Public Function RegExpGroup(R As String, S As String, IMatch As Integer, IGroup As Integer) As Variant
    Dim RegExp As Object, Matches As Object, SubMatches As Object
    Set RegExp = CreateObject("VBScript.RegExp")
    With RegExp
        .Global = True
        .MultiLine = True
        .IgnoreCase = False
        .Pattern = R
    End With
    Set Matches = RegExp.Execute(S)
    If Matches.Count >= IMatch Then
        Set SubMatches = Matches.Item(IMatch - 1).SubMatches
        If SubMatches.Count >= IGroup Then
            RegExpGroup = SubMatches.Item(IGroup - 1)
        Else
            RegExpGroup = CVErr(xlErrValue)
        End If
    Else
        RegExpGroup = CVErr(xlErrValue)
    End If
End Function

现在,将值设置为:

以及A4、A5中的公式:

=RegExpGroup(A2,A1,1,1),C1:D2,2,FALSE)
=IFERROR(VLOOKUP(RegExpGroup(A2,A1,1,1),C1:D2,2,FALSE),"Not found")

您会得到预期的结果。

相关问题