我在单元格 A1 中有以下字符串:
A1 some text, to be, processed
我想要为 B1、C1、D1 等创建公式,其中:
B1 some text
C1 to be
D1 processed
E1
我已经找到了文本分列功能,但我需要使用公式来完成此操作。
答案1
您可以使用 VBA 创建可用作公式的自定义函数。具体操作如下:
- 打开 Visual Basic (Alt+F11)
- 创建新模块(插入->模块)
- 复制/粘贴以下代码:
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”),您会在“文本”类别下找到这些函数。