使用 Excel 中的公式从逗号分隔的字符串中提取子字符串

使用 Excel 中的公式从逗号分隔的字符串中提取子字符串

我在单元格 A1 中有以下字符串:

A1 some text, to be, processed

我想要为 B1、C1、D1 等创建公式,其中:

B1 some text
C1 to be
D1 processed
E1 

我已经找到了文本分列功能,但我需要使用公式来完成此操作。

答案1

您可以使用 VBA 创建可用作公式的自定义函数。具体操作如下:

  1. 打开 Visual Basic (Alt+F11)
  2. 创建新模块(插入->模块)
  3. 复制/粘贴以下代码:

Public Function custom_split(str As String, num As Long, Optional delimeter As String = " ") As String
    Dim substrs() As String
    substrs = split(str, delimeter)
    If UBound(substrs) < num Then
        custom_split = ""
    Else
        custom_split = Trim(substrs(num))
    End If
End Function

现在关闭 Visual Basic 窗口返回 Excel。

要使用公式,按照您的示例,输入

  • 在 B1 中: =custom_split(A1; 0; ",")
  • 在 C1 中:=custom_split(A1; 1; ",")
  • ETC...

您可以将逗号改为用其他字符进行分隔。

自定义公式的唯一缺点是,每次打开文件时都会收到启用宏的警告。

答案2

我使用Left()备用工作表上的一些列来执行此操作,这些列会计算字符,直到找到逗号。它看起来有点像这样:

    A                          B                C                D
1    Text                    1st Comma        2nd Comma        3rd comma
2 =(cell ref to text)&","   =find(",",a2,0)  =find(",",a2,b2) =find(",",a2,c2)

Referring to your original sheet:
B1: =Left(a1,NewSheet!B2)
C1: =Mid(A1, NewSheet!B2+1, NewSheet!C2-NewSheetB2)
D1: =Mid(A1, NewSheet!(C2+1 NewSheet!d2-Newsheet!c2)

在 NewSheet 中,输入您认为文本中可以包含逗号的列数。如果数量很大,您可能应该使用 VBA 解决方案。

请注意,我在你的字符串末尾加了一个逗号,这样你就不会出错(如果字符串中没有逗号,则为 #value)。你可以测试结果是否大于原始字符串的长度,也可以使用它来=iferror()处理=find()找不到逗号的函数。最后,=Trim()如果字符串不一致,请在逗号后使用空格。

答案3

您可以使用文本函数 Left、Mid 和 Right。Left 允许您从文本字符串的左侧提取一定数量的字符。Right 可从文本字符串的右侧执行相同操作。使用 Mid,您可以从左侧排除一定数量的字符,然后告诉它提取接下来的 x 个字符。

如果您转到“插入函数”对话框(单击公式栏旁边的“fx”),您会在“文本”类别下找到这些函数。

相关内容