2015-10-19 151 views
0

我在Excel中有一列,其中包含以下格式的數據:「NAME OF BAND Album Title」。我想將這個單元分成兩個 - 一個用於全部大寫的樂隊名稱,另一個用於專輯標題。以下是一些數據示例:將文本分割爲Excel中的列

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

這是一個公式解決方案。不需要VBA。

假設你的列表開始於單元格A1,在單元格B1輸入以下公式:

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

這是一個陣列式,並且必須以Ctrl鍵 + 移位來確認 + 輸入

然後在小區C1,輸入:

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

這是一個陣列式,並且必須以Ctrl鍵 + + 輸入來確認。

現在選擇範圍B1:C1,並根據需要向下複製。

以下是他們是如何工作的。我們將討論第一個公式。

MID函數將單元格A1的值拆分爲單個字符。 CODE函數返回每個字符的ASCII碼號碼。我們測試每個代碼的編號,看它是否小於96,這是第一個小寫字母「a」。

這給了我們一個布爾值(真或假)的數組,一個單元格A1中每個char的Booelan值。

我們通過雙重一元( - )將布爾轉換爲ONES和ZEROES。

我們使用MATCH函數在數組中搜索第一個ZERO的位置。

連續大寫字母的結尾是由MATCH返回的位置之前的三個char位置。

就是這樣。

什麼使得所有可能的是數組在ROW/OFFSET組合產生的公式的核心。結合LEN函數,該組合生成一個類似{1; 2; 3; 4; 5; 6; 7; 8; 9; 10; 11}的向量數組。該數組的最後一個和最大數字等於單元格A1中值的長度。

UPDATE

這裏正顯示出這些公式樣本的工作簿上的問題的示例數據工作:http://www.excelhero.com/samples/torentino_excelhero.xlsx

+0

嗨Excel的英雄,你能解釋一下在B1公式?我無法理解邏輯。謝謝。 – Sergio

+0

@Sergio請參閱我的答案的更新下半部分的解釋。 –

+0

@ExcelHero謝謝但由此產生的分裂無法正常工作。我結束了兩個單元格,但原始單元格中的BAND NAME專輯標題在一個單元格中轉換爲BD NA,而另一個單元格中沒有專輯標題。 – torentino

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