将文本拆分为Excel中的列

时间:2015-10-19 00:47:12

标签: excel text cell

我在Excel中有一个专栏,其中包含以下格式的数据:" BAND专辑标题"。我想把这个单元分成两个 - 一个用于全帽乐队的名字,另一个用于专辑标题。以下是数据中的一些示例:

Column A
ABSORBED Demo '98 
ABSTRACT CELL THEORY Act
ABSTRACT SATAN Elite 7512 
ABSTRACT SATAN Aryan Blitzkrieg Union 
ABSTRACT SATAN Satanic Blood Circle 
ABSTRACT SHADOWS Symphony of Hakel 

由于乐队的名字中包含不同数量的单词,因此按空格分割并不起作用。任何帮助将不胜感激。

2 个答案:

答案 0 :(得分:2)

这是一个公式解决方案。无需VBA。

假设您的列表在单元格A1中开始,请在单元格B1中输入以下公式:

=LEFT(A1,MATCH(,--(CODE(MID(A1,ROW(OFFSET($A$1,,,LEN(A1))),1))<96),)-3)
  

这是一个数组公式,必须使用 Ctrl + Shift + Enter 确认。

然后在单元格C1中输入:

=MID(A1,MATCH(,--(CODE(MID(A1,ROW(OFFSET($A$1,,,LEN(A1))),1))<96),)-1,99)
  

这是一个数组公式,必须使用 Ctrl + Shift + Enter 确认。

现在选择范围B1:C1并根据需要向下复制。

以下是他们的工作方式。我们将讨论第一个公式。

MID函数将单元格A1的值拆分为单个字符。 CODE函数返回每个char的ASCII代码。我们测试每个代码号以查看它是否小于96,这是“a”第一个小写字母。

这给了我们一个布尔值数组(TRUE或FALSE),单元格A1中每个char的一个Booelan值。

我们通过双一元( - )将布尔值转换为ONES和ZEROES。

我们使用MATCH函数在数组中搜索第一个ZERO的位置。

连续大写字母的结尾是MATCH返回的位置之前的三个字符位置。

就是这样。

使所有这一切成为可能的是由ROW / OFFSET组合产生的公式的核心数组。结合LEN函数,这个组合产生一个向量数组,看起来像{1; 2; 3; 4; 5; 6; 7; 8; 9; 10; 11}。该数组的最后一个和最大数字等于单元格A1中值的长度。

<强>更新

以下是一个示例工作簿,显示这些公式适用于问题的示例数据:http://www.excelhero.com/samples/torentino_excelhero.xlsx

答案 1 :(得分:0)

这样的事情可能会从专辑中分割出乐队名称。

Sub splt()
    Dim rw As Long, p As Long, r As Long, sp As Long, v As Long
    Dim bnd As String, ttl As String, tmp As Variant

    With Worksheets("Sheet1")
        For rw = 2 To .Cells(Rows.Count, 1).End(xlUp).Row
            p = 1
            bnd = vbNullString
            ttl = Trim(.Cells(rw, 1).Value2) & Chr(32)
            tmp = Split(ttl)
            For v = LBound(tmp) To UBound(tmp)
                If UCase(tmp(v)) = tmp(v) Then
                    bnd = Join(Array(bnd, tmp(v)), Chr(32))
                Else
                    Exit For
                End If
            Next v
            .Cells(rw, 2) = bnd
            .Cells(rw, 3) = Trim(Right(ttl, Len(ttl) - Len(bnd)))
        Next rw
    End With
End Sub