使用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将特定文本行保留在单元格中以获取特定起始字母的主要内容,如果未能解决你的问题,请参考以下文章

如何从包装的文本单元格中提取特定的文本行?

excel中怎样用vba使单元格在特定条件下才可以编辑?

Excel VBA宏获取分号前的文本子字符串

VBA Excel UDF保留原始值

成都APP软件EXE开发:EXCEL VBA的基本知识和入门引导V2

将单元格数据复制到宏中以避免更新宏