我在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
由于乐队的名字中包含不同数量的单词,因此按空格分割并不起作用。任何帮助将不胜感激。
答案 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