Vba 如何使用特定公式拆分单元格中的数据(包含特定字符)?
我在“A”列中有数据,需要将其拆分为四列。比如说 A1数据=Vba 如何使用特定公式拆分单元格中的数据(包含特定字符)?,vba,excel,excel-formula,Vba,Excel,Excel Formula,我在“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也可以。如果您需要使
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也可以。如果您需要使用工作表公式,您可以重复使用
查找
来获取分隔符的位置,然后将它们插入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建议的文本到列
希望这会有所帮助。使用这样的自定义函数,按所选分隔符将值拆分为一个数组,并从该数组中返回所需的位置。此函数应与您选择的任何分隔符一起使用,并容纳可变长度字符串和子字符串
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
字符串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中有我的原始文本,因为您需要公式解决方案,请执行以下操作: 选择范围
C1:F1
,然后单击Excel顶部的公式栏
将以下公式粘贴到公式栏中:
=TRIM(MID(SUBSTITUTE($A1,"~",REPT(" ",99)),COLUMN(A1)*99-98,99))
这不是数组公式
但由于选择了四个单元格,请使用Ctrl+Enter进行确认
现在,根据需要将这四个单元格尽可能向下复制。您愿意使用python吗?我使用这个选项,Sheets(“Formular”)。选择列(“A:A”)。选择Selection.TextToColumns Destination:=范围(“C1”)、数据类型:=xlDelimited、TextQualifier:=xlDoubleQuote、ConcertiveDelimiter:=False、Tab:=False,分号:=False,逗号:=False,空格:=False,其他:=True,其他字符:=“~”,字段信息:=Array(数组(1,1),数组(2,1),数组(3,1),数组(4,1)),\TrailingMinusNumbers:=True需要知道使用公式的方法。Gotcha@pnuts。。。我的wksht公式游戏很弱,我通常用VBA做所有的事情。我会再玩一会儿,然后再修改。@pnuts修改为使用UDF。这很漂亮@pnutst非常感谢你的多种技巧。