【问题标题】:Excel VBA - delete string content after *word*Excel VBA - 删除 *word* 之后的字符串内容
【发布时间】:2016-09-20 11:35:30
【问题描述】:

我正在尝试删除字符串中包含的某个单词之前的字符串内容。例如

master_of_desaster@live.de

我想使用 VBA 来替换它

master_of_desaster

“单词”(@) 之后的所有内容都应删除,包括“单词”本身。

我发现了一个类似的话题here,但他问的相反。

【问题讨论】:

  • 使用Instr函数找到@。然后,只需使用原始字符串的Left 直到Instr 的结果
  • 如果您在单元格上执行此操作,简单的查找/替换可能是最快的。

标签: vba excel


【解决方案1】:
email = "master_of_desaster@live.de"

ret = Left(email, InStr(1, email, "@") - 1)

结果:master_of_desaster

感谢Shai Rado

【讨论】:

    【解决方案2】:

    =split("master_of_desaster@live.de","@")(0)

    【讨论】:

    • 如果您添加 cmets,那么我将接受它作为解决方案。 (我理解,但其他人会这样做吗?)
    【解决方案3】:

    只是为了好玩 - 一种正则表达式方法。

    Public Sub reg()
    
        Dim re_pattern As String
        Dim re As RegExp
        Dim email As String
        Dim match As Object
    
        Set re = New RegExp
    
        email = "master_of_desaster@live.de"
        re_pattern = "(.*)@.*"
    
        With re
            .Global = True
            .MultiLine = True
            .IgnoreCase = False
            .Pattern = re_pattern
        End With
    
        Set match = re.Execute(email)
    
        Debug.Print match.Item(0).SubMatches(0)
    
    End Sub
    

    【讨论】:

      【解决方案4】:

      有点 hacky 但很快(大多数 Windows API 接受零终止字符串)

      ret = Replace("master_of_disaster@live.de", "@", vbNullChar, , 1) ' Chr(0)
      

      我通常使用 Split 方法,但使用 Limit:

      ret = Split("master_of_disaster@live.de", "@", 2)(0)
      

      【讨论】:

        【解决方案5】:
        ret = evaluate("left(" & string & ", search(""@"", " & string & ") - 1)")
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2015-03-02
          • 1970-01-01
          • 1970-01-01
          • 2012-10-19
          • 2012-08-29
          • 2019-02-11
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多