使用excel vba

时间:2019-06-24 11:23:03

标签: excel vba

我在A列的单元格中有多个文本行。我只想保留一行以特定字母开头的行(请参见:图片1)。例如,首先,我想检查它是否有以“ MB”开头的行。如果可以的话,我只想保留那条线。如果没有,它将连续搜索字母“ SA”,“ PQ”,依此类推。我正在尝试在Excel VBA中实现这一点。

1

我发现了使用内置函数的一些线索。例如

*删除第一个逗号后的所有内容

=LEFT(A1,FIND(",",A1)-1)

*删除第二次出现逗号之前的所有内容

=RIGHT(SUBSTITUTE(A1, ",", CHAR(9), 2), LEN(A1)- FIND(CHAR(9), SUBSTITUTE(A1, ",", CHAR(9), 2), 1) + 1)

但是,这些不是我正在寻找的解决方案。如果有人可以帮助我,我将非常感激。

关于, 奥利弗

1 个答案:

答案 0 :(得分:1)

Google-Sheets

我知道您没有询问Google-Sheets,但在这种情况下,这也是一个不错的出路(我也不是GS专家,但尝试了一些您觉得有趣的事情)

enter image description here

B2中的公式:

=IFERROR(ARRAYFORMULA(TRANSPOSE(REGEXEXTRACT(A2,"\b"&TRANSPOSE($B$1:$D$1)&"[^\s]+"))),"")

通过这种方式,您可以扩展您感兴趣的部分(扩展范围B1:D1),并且它将为您提供输入中所有可用的正则表达式匹配项。

向下拖动公式。

Excel

在Excel中,您可以考虑使用REGEX编写UDF,这是一个简单的示例:

Function GetRegEx(str As String)

Dim regex As Object
Set regex = CreateObject("VBScript.RegExp")
Dim MyArr() As String
MyArr = Split("MB,PQ,SA", ",")

For X = LBound(MyArr) To UBound(MyArr)
    With regex
        .Pattern = "\b" & MyArr(X) & "[^\s]+"
        .Global = True
    End With
    Set matches = regex.Execute(str)
    If matches.Count > 0 Then
        GetRegEx = matches(0).Value
        Exit Function
    End If
Next X
End Function

=getregex(A2)一样命名并向下拖动...

enter image description here