3

我有一个 VBA 正则表达式,我想与之结合,VLOOKUP但是如果与VLOOKUP.

这是我执行函数时返回的内容 =udfRegEx(A2,B2)

细绳

Microsoft Windows Server 2003,标准版(64 位)

正则表达式

^([^,]*)

结果

微软视窗服务器 2003

但是,当我执行=IFERROR(VLOOKUP(udfRegEx(A2,RegularExpression!B2),[Sample.xls]Sheet1!$B$2:$E$4177,4,FALSE),0)它时,它仍然返回 Microsoft Windows Server 2003,标准版(64 位)

B2列是正则表达式^([^,]*)

4

4 回答 4

0

尝试使用:

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

盲目猜测。

于 2013-10-10T05:58:01.860 回答
0

我必须这样做以供我个人使用,所以我做了一个 Excel Addin,这里是 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

于 2015-02-13T20:49:50.597 回答
0

您不需要正则表达式来删除第一个逗号后的所有内容。下面的函数做同样的事情:

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")

你得到了预期的结果。

于 2021-07-14T05:39:55.670 回答
0

从 Office 365 开始,有一个新功能 XLookUp,它(最终)完成了您寻找的滚刀。这里解释:https ://www.excelcampus.com/functions/xlookup-explained/

于 2020-02-08T14:16:10.920 回答