如何使用特定的公式分割单元格中的数据(包含特定字符)?
我有“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的情况下做到这一点。 但即使你可以build议使用Excel VBA,这将是好的。
如果您需要使用工作表公式,可以重复使用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))
公式很快变得丑陋,所以我的第一个select就是@pnutsbuild议的文本到列。
希望有所帮助。
使用像这样的自定义函数,将所选分隔符的值拆分为数组,然后从该数组中返回所需的位置。 这个函数应该和你select的任何分隔符一起工作,并且容纳可变长度的string和子string。
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也提出了这个简单的macros,它将在整个列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
既然你想要一个公式解决scheme,那么这样做:
select范围C1:F1
,然后单击Excel顶部的公式栏。
将以下公式粘贴到公式栏中:
=TRIM(MID(SUBSTITUTE($A1,"~",REPT(" ",99)),COLUMN(A1)*99-98,99))
这不是一个数组公式。
但是由于select了四个单元格,请用Ctrl + Enter确认 。
现在将这四个单元格按需要复制下来。
string1:
=LEFT($M20,FIND("~", $M20, 1)-1)
string2:
=LEFT(REPLACE($M20, 1, LEN($N20)+1, ""), FIND("~",REPLACE($M20, 1, LEN($N20)+1, ""), 1)-1)
string3:
=LEFT(REPLACE($M20, 1, LEN($N20)+LEN($O20)+2, ""), FIND("~",REPLACE($M20, 1, LEN($N20)+LEN($O20)+2, ""), 1)-1)
string4:
=REPLACE($M20, 1, LEN($N20)+LEN($O20)+LEN($P20)+3, "")
如果你不能使用UDF的一些奇怪的原因…显然,我有我的原始文本在M20