Excel:如何提取文本字符串中的文本直到分隔符

标签 excel vba excel-formula extract

我有一个简单的问题,我希望用一个非常简单的 Excel 函数来解决。

我有一个包含多行(全部在一列中)的列表,其中包含属性及其对应的值,每行都用 | 分隔。它基本上看起来像这样:

Color:Red|Size:M|COD:United States|Price:50.84
Color:Blue|Category:Jeans|COD:China|Price:29.95

现在,我想在单独的列中提取每个属性之后的字符串,并且仅在值存在时才填充该列。最后它应该是这样的:

<表类="s-表"> <头> 长格式 颜色 尺寸 类别 化学需氧量 价格 <正文> 颜色:... 红色 M 美国 50.84 颜色:... 第二个 牛仔裤 中国 29.95

我找到了使用以下代码的解决方案,但它只适用于第一列:

=TEIL(LEFT($A2;MID("|";$A2)-1);FIND(B$1;$A2)+1+LEN(B$1);LEN($A2))

如果您知道解决该问题的 VBA 解决方案,也将不胜感激!

最佳答案

每个属性一个 UDF

为您的 5 个类别中的每一个创建一个 UDF 并像往常一样使用公式,其中输入只是您的 LONGFORM 值。以下是 Color 的示例。您将为每个属性创建一个副本,并将 Color 替换为适当的名称。

注意:对于价格,您需要将函数输出声明为 Double 而不是 String

Public Function Get_Color(Target As Range) As String

Dim i As Long, Temp
Temp = Split(Target, "|")

For i = LBound(Temp) To UBound(Temp)
    If InStr(Temp(i), "Color") Then
        Get_Color = Split(Temp(i), ":")(1)
        Exit Function
    End If
Next i

End Function

一个带有属性参数的UDF

您还可以全面使用一个 UDF,并在公式 (LONGFORM & ATTRIBUTE) 中提供两个输入,其中属性是颜色、尺寸、类别、COD、价格。理想情况下,您只需将第二个参数设置为感兴趣的标题并向下拖动。值得注意的是,在当前形式中,属性参数是区分大小写的,不能容忍拼写错误。

Public Function Get_Attribute(Target As Range, Element As String)

Get_Attribute = ""
Dim i As Long, Temp
Temp = Split(Target, "|")

For i = LBound(Temp) To UBound(Temp)
    If InStr(Temp(i), Element) Then
        Get_Attribute = Split(Temp(i), ":")(1)
        If IsNumeric(Get_Attribute) Then Get_Attribute = CDbl(Get_Attribute)
        Exit Function
    End If
Next i

End Function

这是第二种解决方案的示例以及您将如何调用该函数。它与 One Attribute : One UDF 方法类似,只是您将为每一列调用不同的函数但只提供一个输入

enter image description here

关于Excel:如何提取文本字符串中的文本直到分隔符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65359613/

相关文章:

excel - 用值覆盖过滤表

excel - 在 VBA 中执行脚本后退出 Cmd 窗口

excel - 如何查看单元格内图片的名称?

excel - 如何使用 countif 对多列进行计数

excel - 在纯Excel中,如何引用范围中的列(无VBA)

excel - 使用条件格式按类别交替设置数据格式

vba - Excel VBA - 为大量单元格着色的有效方法

excel - 为什么VBA excel公共(public)属性在出错后得到空值

vba - 使用 VBA 复制和粘贴格式很慢。我怎样才能加快速度?

excel - 使用数据从最右边的列中提取单元格的公式(知道行号)