如何使用特定的公式分割单元格中的数据(包含特定字符)?

我有“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