使用Excel公式将单元格拆分为多个列

时间:2013-12-27 10:38:42

标签: excel excel-formula

我有一个包含以下内容的单元格:

     A
1    text1;text2;text3;text4;text5

我想把它分成五个单元格,每次出现;一个,如下所示:

     B      C      D      E      F
1    text1  text2  text3  text4  text5

我知道Excel有一个“Text to columns”功能,但我需要将其自动化,所以这不是一个选项。我在B1

中输入了此内容
=left(A1;FIND(";";A1;1)-1)

这让我text1,这就是我想要的。对于下一个单元格,我需要text2。我试过这个:

=right(A1;len(A1)-len(B1)-1)

我的表现在看起来像这样:

     B      C
1    text1  text2;text3;text4;text5

我现在的问题是,我需要在第一个;之后删除所有内容,但我似乎无法弄明白。有什么想法吗?

3 个答案:

答案 0 :(得分:1)

如果您希望公式等效于文本到列,A1包含要解析的文本,则在B1中输入:

= TRIM(MID(SUBSTITUTE($ A1,“;”,REPT(“”,999)),COLUMNS($ A:B)* 999-998,999))并复制。

答案 1 :(得分:0)

在执行Text to Columns时录制宏可以完成这项工作。 ;)

我的记录:

Sub Macro1()
'
' Macro1 Macro
'

'
    Selection.TextToColumns Destination:=Range("A1"), DataType:=xlDelimited, _
        TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=False, _
        Semicolon:=True, Comma:=False, Space:=False, Other:=False, FieldInfo _
        :=Array(Array(1, 1), Array(2, 1), Array(3, 1), Array(4, 1), Array(5, 1)), _
        TrailingMinusNumbers:=True
End Sub

清理后:

Sub SplitAndScatter()
    With Range("A:A")
        .TextToColumns Destination:=Range("A1"), DataType:=xlDelimited, Semicolon:=True
    End With
End Sub

设置向上:

enter image description here

<强>结果:

enter image description here

希望这有帮助! :)

答案 2 :(得分:0)

这是一种克服上面单元格公式给出的字符限制的方法。

  1. 在B1中创建一个助手行,以(尽可能向右)列出从0到安全的“最大”列表元素数量的数字。

  2. 将逗号分隔的列表放入A2:A,然后将单个逗号连接到单元格的末尾,例如='sheet 1'!A1&","

  3. 行B将处理第一个列表项。在B2中使用以下内容

    =LEFT($A2,FIND(",",$A2,1)-1)

  4. C行和右侧将分隔其余元素。在C2中使用以下公式,其中〜是永远不会使用的唯一字符,而SUBSTITUTE($A2,"," ...的每个实例的第二个参数中的逗号是您要分割的字符。

=IFERROR(MID($A2,FIND("~",SUBSTITUTE($A2,",","~",C$1))+1,FIND("~",SUBSTITUTE($A2,",","~",D$1))-FIND("~",SUBSTITUTE($A2,",","~",C$1))-1),"")

  1. find()函数+1-1之后调整偏移量以匹配空格或其他偏移量。
  2. 从C2处向右填充,然后从B2处向下填充所有内容。完成!

示例 Demo Image

故障:

MID($A2,  [PART 1]  ,  [PART 2]  )

第一个参数$A2是带有定界文本的单元格,第二个参数是定界符的第 n 个实例的字符数(即起始位置减去一个第 n 个列表项),第三个是 n +1和 n 列表项之间的字符数。

[PART 1]

FIND("~",SUBSTITUTE($A2,",","~",C$1))+1

首先让我们分解内部替换部分:

SUBSTITUTE($A2,",","~",B$1)

第一个参数是您要分割的文本。第二个参数是定界符,在此示例中为逗号。第三个参数是一个随机的唯一字符(如果需要真正唯一的字符,请使用char(160)之类的字符),最后一个参数是您要替换的定界符(在这种情况下为“”,“')。 / p>

FIND("~",SUBSTITUTE($A2,",","~",C$1))+1

在上面的替代函数的开头添加查找将找到您刚刚替代的唯一字符(在此示例中为"~")的位置编号,从而有效地告诉您第二个列表的“起始位置”在哪里项目是。为方便起见,此方法单独处理第一个列表项,因为第一个定界符在第一个列表项之后。 +1是为了确保不包括左侧定界符本身。

[PART 2]

FIND("~",SUBSTITUTE($A2,",","~",D$1))-FIND("~",SUBSTITUTE($A2,",","~",C$1))-1)

这将通过获取 n + 1 分隔符位置来找到列表项的长度,并从 n 分隔符位置中减去它,然后再减去1,因为结尾的分隔符位置本身不应该包含在内。