使用excel vba将特定文本行保留在单元格中以获取特定起始字母
Posted
技术标签:
【中文标题】使用excel vba将特定文本行保留在单元格中以获取特定起始字母【英文标题】:Keeping Specific Text line in a cell for specific starting letters with excel vba 【发布时间】:2019-06-24 11:23:03 【问题描述】:我在 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)
但是,这些不是我正在寻找的解决方案。如果有人可以帮助我,我将不胜感激。
问候, 奥利弗
【问题讨论】:
你考虑过正则表达式吗?看起来这可能对您的情况有所帮助。否则,SPLIT()
你的字符串到数组中也可以很好地工作。
@Jvdv 你能解释一下吗?我有一个可变范围,因此我想在宏中实现它。
正则表达式将测试您的字符串的特定字符组合,并返回匹配的结果。此外,SPLIT()
将使用分隔符(在您的情况下为换行符)分割您的字符串并将它们存储到您可以循环的数组中。这两个选项都可以很容易地在用于动态范围的 UDF(用户定义函数)中实现。我打赌周围有多个例子:)
【参考方案1】:
Google 表格
我知道你没有问过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)
并向下拖动...
【讨论】:
以上是关于使用excel vba将特定文本行保留在单元格中以获取特定起始字母的主要内容,如果未能解决你的问题,请参考以下文章