Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vba 如何使用特定公式拆分单元格中的数据(包含特定字符)?_Vba_Excel_Excel Formula - Fatal编程技术网

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

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也可以。如果您需要使

我在“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也可以。

如果您需要使用工作表公式,您可以重复使用
查找
来获取分隔符的位置,然后将它们插入
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非常感谢你的多种技巧。