2016-09-20 2 views
2

Я пытаюсь удалить содержимое строки до определенного слова, содержащегося в строке. НапримерExcel VBA - удалить содержимое строки после слова *

[email protected] 

Я хотел бы использовать VBA для того, чтобы заменить это

master_of_desaster 

Все после того, как «слово» (@) должны быть удалены, в том числе «слова».

Я нашел подобную тему here, но он спрашивает обратное.

+2

найти '@' 'используя функцию Instr'. Затем просто используйте 'Left' исходной строки до результата' Instr' –

+1

Возможный дубликат [VBA, excel вырезать часть из строки] (http://stackoverflow.com/questions/30085441/vba-excel -cut-a-part-from-a-string) – Rosetta

+0

Если вы делаете это на ячейках, простой Find/Replace может быть самым быстрым. – Rory

ответ

2

=split("[email protected]","@")(0)

+0

Если вы добавите к нему комментарии, я приму его в качестве решения. (Я понимаю это, но будут ли другие?) – Black

2

Немного Hacky, но быстро (большинство Windows API принимают нулевые прекращенные строки)

ret = Replace("[email protected]", "@", vbNullChar, , 1) ' Chr(0) 

Я обычно использую метод Split, но с лимитом:

ret = Split("[email protected]", "@", 2)(0) 
2

Просто для удовольствия - регулярное выражение подход.

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 = "[email protected]" 
    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 
1
ret = evaluate("left(" & string & ", search(""@"", " & string & ") - 1)")