从由“&”分隔的一组三个字符中提取两个子string

我正在尝试从文本中提取数字。 如果我有像12&6&2014这样的条目,我怎样才能提取12 (第一个&之前的数字)和2014 (第二个之后发生的数字)?

要得到第一个号码:

 =LEFT(A1, FIND("&", A1)-1) 

在第二个之后得到最后一个数字:

 =RIGHT(A1, 4) 

否则,如果这并不总是一年:

 =MID(A1, FIND(CHAR(1), SUBSTITUTE(A1, "&", CHAR(1), 2))+1, LEN(A1)) 

你可以遍历string中的每个字符,并检查它是否是数字

 Sub getNumberValues() Dim s As String Dim c As New Collection Dim sNewString As String s = "12&6&2014" For v = 1 To Len(s) If IsNumeric(Mid(s, v, 1)) Then sNewString = sNewString & Mid(s, v, 1) Else c.Add sNewString sNewString = "" End If Next v 'add the last entry c.Add sNewString sNewString = "" For Each x In c sNewString = sNewString & x & Chr(13) Next MsgBox sNewString End Sub 

如果我的理解是正确的,那就是分开的字符以及使用多less个数字,你可能会看到类似这样的东西:

 Function CleanUp(Txt) For x = 1 To 255 Select Case x Case 45, 47, 65 To 90, 95, 97 To 122 Txt = WorksheetFunction.Substitute(Txt, Chr(x), "") <- "" can be replaced End Select with "&" to do a Next x MID() using & as the delimiter CleanUp = Txt End Function 

如果您可以使用VBA,这将用空白replace您的字符,但您可以放入自己的字符,然后使用您的公式从特定的分隔符中分离出来。

原始代码可以在这里find:

http://www.mrexcel.com/forum/excel-questions/380531-extract-only-numbers.html

最简单的可能是以&为分隔符的文本到列,然后删除中间列。 这会覆盖原始数据,所以一个副本可能是适当的。

另一个简单的方法是创build两个副本,并为一个find什么: &*和replace: 没有 ,为另一个find什么: *&和replace为: 什么都没有

另一个公式解决scheme可能是:

 =DAY(SUBSTITUTE($A1,"&","/")) 

 =YEAR(SUBSTITUTE($A1,"&","/"))