从由&符号分隔的三个集合中提取两个子字符串

时间:2013-12-17 17:55:12

标签: string excel excel-vba excel-formula worksheet-function vba

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

4 个答案:

答案 0 :(得分:4)

获取第一个号码:

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

要获取第二个&之后的最后一个数字:

=RIGHT(A1, 4)

否则,如果那不总是一年:

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

答案 1 :(得分:0)

如果我理解的是正确的,那就是分开的字符和使用的数字有所不同,你可能会看到这样的事情:

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,这将使用空白替换您的字符,但您可以放入自己的字符,然后使用公式将其与特定分隔符分开。

原始代码可以在这里找到:

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

答案 2 :(得分:0)

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

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

答案 3 :(得分:0)

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

另一个简单的方法是创建两个副本,一个查找内容:&*和替换为:,另一个查找内容:*&和替换与:没有

替代公式解决方案可能是:

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

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