我在A列的单元格中有多个文本行。我只想保留一行以特定字母开头的行(请参见:图片1)。例如,首先,我想检查它是否有以“ MB”开头的行。如果可以的话,我只想保留那条线。如果没有,它将连续搜索字母“ SA”,“ PQ”,依此类推。我正在尝试在Excel VBA中实现这一点。
我发现了使用内置函数的一些线索。例如
*删除第一个逗号后的所有内容
=LEFT(A1,FIND(",",A1)-1)
*删除第二次出现逗号之前的所有内容
=RIGHT(SUBSTITUTE(A1, ",", CHAR(9), 2), LEN(A1)- FIND(CHAR(9), SUBSTITUTE(A1, ",", CHAR(9), 2), 1) + 1)
但是,这些不是我正在寻找的解决方案。如果有人可以帮助我,我将非常感激。
关于, 奥利弗
答案 0 :(得分:1)
Google-Sheets
我知道您没有询问Google-Sheets
,但在这种情况下,这也是一个不错的出路(我也不是GS专家,但尝试了一些您觉得有趣的事情)
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)
一样命名并向下拖动...