text to columns:拆分值中的第一个数字

时间:2014-10-31 09:33:56

标签: excel-vba split excel-2010 vba excel

我有一列有大约60个具有值或不同长度的单元格。每个(或至少大多数)值都在值中包含数字字符。我想将列单元格拆分成更多列,我通常会使用excel的'tekst to columns'函数。

但是此函数没有在第一个数字字符处拆分值的高级选项。基于空格,逗号等分割是可能的,但这对我没有帮助。

有没有办法将单元格划分为单元格中第一个数字的2列?

我已经查看了许多其他问题,但没有一个(或其他互联网论坛)帮助我将值拆分为第一个单元格值。

感谢#quantum285的答案。如果字符串包含一个数字,则此例程有效。我将teststring更改为firstpart323secondpart。 然后part1返回'firstpart32',part2返回secondpart。

我试图了解此代码中发生的情况,如果我错了,请纠正我:

首先,确定字符串的长度。

其次,检查此字符串中的每个位置是否为数字。但是从右到左这个检查是不是?因此,在 firstpart323secondpart:的情况下,长度为22 然后isnumeric()检查1到22之间的每个位置(如果它是数字)并在找到数字时停止?

如果是这样,第1部分是值 i 之前的tekst,其中<​​em> i 是找到数字的字符串中从右到左的第一个位置。

然后

和第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

这几乎完美无缺(除了一些在数值上有多个数字组合的细胞(如:汤10g 20盒)。但由于这些只是少数,我可以手工调整。

谢谢!

1 个答案:

答案 0 :(得分: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

在你的循环中使用这样的东西。