2014-10-31 22 views
-1

我有1列,大約60個數值或不同長度的單元格。每個(或至少大部分)值都有一個數字字符。我想將列單元格拆分爲更多的列,我通常會使用excel的'tekst to columns'函數來處理這些列。text to columns:在值中的第一個數字拆分

但是,此功能沒有在第一個數字字符處拆分值的高級選項。基於空格,逗號等分裂是可能的,但這並不能幫助我。

是否有任何方法可以將單元格中的第一個數字分成2列?

我看了很多其他問題,但沒有一個(或其他互聯網論壇)幫助我在單元格值的第一個數字處分割值。

感謝#quantum285的答案。如果字符串包含一個數字,則此例程有效。我將測試字符串更改爲firstpart323secondpart。 然後part1返回'firstpart32',part2返回secondpart。

我試圖理解這些代碼是如何發生的,請糾正我,如果我錯了:

首先,字符串的lenght確定。

其次,檢查該字符串中的每個位置是否爲數字。但是這張支票是從右到左的嗎?因此,如果是第一部分329秒部分:長度爲22.
然後isnumeric()檢查從1到22的每個位置是否爲數字,並在找到數字時停止?

如果是這樣,第1部分是所述值,其中是從右側的第一個位置,其中多個被發現字符串中向左前的tekst。

然後第2部分是從這個相同位置右邊的字符串。

不過,我找這找由左到右起第一個程序(或最後的位置從右到左),其中一個號碼是......

所以我現在改變了套路,簡單地調節for i = 1 to行:

Sub test() 
For j = 4 To Cells(Rows.Count, 4).End(xlUp).Row 
For i = Len(Cells(j, 4)) To 1 Step -1 
    If IsNumeric(Mid(Cells(j, 4), i, 1)) Then 
     Cells(j, 5) = Left(Cells(j, 4), i - 1) 
     Cells(j, 6) = (Right(Cells(j, 4), Len(Cells(j, 4)) - i + 1)) 
    End If 
Next i 
Next j 

End Sub 

這近乎完美地工作(除了在的值(如具有多個數字組合幾個細胞:湯10克20boxes)但是,因爲這些都是隻有少數,我可以調整他們用手。

謝謝!

回答

4
Sub test() 
testString = "firstpart3secondpart" 
For i = 1 To Len(testString) 
    If IsNumeric(Mid(testString, i, 1)) Then 
     part1 = Left(testString, i - 1) 
     part2 = (Right(testString, Len(testString) - i)) 
    End If 
Next i 
MsgBox (part1) 
MsgBox (part2) 
End Sub 

在你的循環中使用這樣的東西。