這是一個公式解決方案。不需要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
嗨Excel的英雄,你能解釋一下在B1公式?我無法理解邏輯。謝謝。 – Sergio
@Sergio請參閱我的答案的更新下半部分的解釋。 –
@ExcelHero謝謝但由此產生的分裂無法正常工作。我結束了兩個單元格,但原始單元格中的BAND NAME專輯標題在一個單元格中轉換爲BD NA,而另一個單元格中沒有專輯標題。 – torentino