【问题标题】:Extract two substrings from a set of three separated by ampersands从由&符号分隔的三个子字符串中提取两个子字符串
【发布时间】:2014-01-05 15:20:37
【问题描述】:

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

【问题讨论】:

  • 到目前为止你有没有尝试过?查看 LEFT、RIGHT、MID 和 SEARCH/FIND。
  • 你好 :) 我可以弄清楚如何在某个符号之后或之前提取数字,但不能在第 n 个符号之后/之前提取数字
  • 有时数字不一定是 1 位或 2 位数字,所以变得棘手
  • 我可以看到你的文字是一个日期,对吧?你可以使用=RIGHT(A1, 4),对吧?否则,您将不得不同时使用SUBSTITUTELEN

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


【解决方案1】:

获取第一个数字:

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

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

=RIGHT(A1, 4)

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

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

【讨论】:

    【解决方案2】:

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

    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】:

      如果我的理解是正确的,即分隔的字符不同以及使用了多少位数,您可能会查看如下内容:

      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

      【讨论】:

      • 这与杰瑞的回答相结合应该得到你想要的。
      【解决方案4】:

      最简单的可能是以&amp;为分隔符的Text to Columns,然后删除中间的列。这会覆盖原始数据,因此可能需要一个副本。

      另一种简单的方法是创建两个副本,一个查找内容:&amp;* 并替换为:nothing,另一个查找内容:*&amp; 并替换为:没什么

      另一种公式解决方案可能是:

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-02-10
        • 2018-02-05
        • 2021-09-28
        • 1970-01-01
        • 2019-07-07
        • 2012-04-27
        • 2021-09-26
        • 1970-01-01
        相关资源
        最近更新 更多