我在列#34; A"并需要将其拆分为四列。例如
A1数据= 1234567~00001.00~H~SX01
我只分别在C1,D1,E1和F1中使用以下四个公式:
=LEFT(A4,7)
=MID(A4,9,8)
=MID(A4,18,1)
=MID(A4,20,8)
但问题是某些单元格包含的数据如下:1234567~-2.00~H~XX02
。
我想知道使用数据单元格中包含的分隔符~
拆分数据的可能性。
我想在没有VBA的情况下这样做。但即使你可以使用Excel VBA推荐一些没问题的东西。
答案 0 :(得分:2)
如果您需要使用工作表公式,可以重复使用FIND
获取分隔符的位置,然后将其插入MID
:
=MID(MyText,1,FIND("~",MyText,1)-1)
=MID(MyText,FIND("~",MyText,1)+1,FIND("~",MyText,FIND("~",MyText,1)+1)-FIND("~",MyText,1)-1)
=MID(MyText,FIND("~",MyText,FIND("~",MyText,1)+1)+1,FIND("~",MyText,FIND("~",MyText,FIND("~",MyText,1)+1)+1)-FIND("~",MyText,FIND("~",MyText,1)+1)-1)
=MID(MyText,FIND("~",MyText,FIND("~",MyText,FIND("~",MyText,1)+1)+1)+1,LEN(MyText)-FIND("~",MyText,FIND("~",MyText,FIND("~",MyText,1)+1)+1))
公式很快变得难看,所以我的第一选择是@pnuts建议的Text to Columns。
希望有所帮助。
答案 1 :(得分:2)
使用这样的自定义函数,将所选分隔符的值拆分为数组,并从该数组中返回所需的位置。此函数应与您选择的任何分隔符一起使用,并适应可变长度字符串和子字符串。
Function GetSplitValue(val As String, delimiter As String, position As Long)
Dim values
values = Split(val, delimiter)
GetSplitValue = values(position - 1)
End Function
在B栏:
=GetSplitValue(A1, "~", 1)
在C栏:
=GetSplitValue(A1, "~", 2)
在D栏:
=GetSplitValue(A1, "~", 3)
在E栏:
=GetSplitValue(A1, "~", 4)
截图:
@pnuts还建议这个简单的宏将在整个A列上执行文本到列的操作:
Sub MyTextToColumns()
Sheets("Formular").Columns("A:A").TextToColumns _
Destination:=Range("c1"), _
DataType:=xlDelimited, _
Other:=True, OtherChar:="~", _
FieldInfo:=Array(Array(1, 1), Array(2, 2), Array(3, 2), Array(4, 2))
End Sub
答案 2 :(得分:2)
由于您需要公式解决方案,请执行以下操作:
选择范围C1:F1
,然后单击Excel顶部的公式栏。
将以下公式粘贴到公式栏中:
=TRIM(MID(SUBSTITUTE($A1,"~",REPT(" ",99)),COLUMN(A1)*99-98,99))
这不是数组公式。
但由于选择了四个单元格,请使用 Ctrl + Enter 确认。
现在根据需要将这四个单元格复制下来。
答案 3 :(得分:1)
字符串1:
=LEFT($M20,FIND("~", $M20, 1)-1)
字符串2:
=LEFT(REPLACE($M20, 1, LEN($N20)+1, ""), FIND("~",REPLACE($M20, 1, LEN($N20)+1, ""), 1)-1)
字符串3:
=LEFT(REPLACE($M20, 1, LEN($N20)+LEN($O20)+2, ""), FIND("~",REPLACE($M20, 1, LEN($N20)+LEN($O20)+2, ""), 1)-1)
字符串4:
=REPLACE($M20, 1, LEN($N20)+LEN($O20)+LEN($P20)+3, "")
如果您出于某种奇怪的原因无法使用UDF ... 显然我在M20中也有原始文本