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

时间:2015-10-09 00:12:06

标签: excel vba excel-vba excel-formula

我在列#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推荐一些没问题的东西。

4 个答案:

答案 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)

截图:

enter image description here

@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中也有原始文本