Длинная формула =ПСТР(ЛЕВБ(A1;ПРОСМОТР(99;ПОИСК({".ru";".com";".su"};A1))+ДЛСТР(ПРОСМОТР(99;ПОИСК({".ru";".com";".su"};A1);{"ru";"com";"su"})));ЕСЛИ(ЕОШ(ПОИСК(": ";A1));1;ПОИСК(": ";A1)+3);99)
Function Email(iCell As String)
With CreateObject("vbscript.regexp")
.Pattern = "[A-Z0-9._%-]+@[A-Z0-9.-]+\.[A-Z]{2,4}"
.Global = True
.IgnoreCase = True
If .test(iCell) Then
Email = .Execute(iCell)(0).Value
Else
Email = "Нет в строке электронного адреса"
End If
End With
End Function
Я для себя точно понял как достать правую часть после @ Мы можем поиском найти позицию @ а далее искать " " (пробел). Если " " нет, тогда весь текст до конца. А вот левую часть, до @ думаю достать либо отниманием нного текста от позиции @ или как то еще. вот гадаю.
VBA не хотелось бы использовать. Согласен на длиннющую формулу. (:
Function ExtrEMail(ByVal s As String) As String
Dim objRegExp, a, a0, i As Integer
Set objRegExp = CreateObject("VBScript.RegExp")
objRegExp.Global = True
objRegExp.Pattern = "(\:|\?|\,|\«|""|\»|\/|\!)" 'символы, которые не могут принадлежать адресу
a = Split(objRegExp.Replace(s, " "), "@")
For i = UBound(a) To 1 Step -1 'если emailов несколько, то возвращаются через запятую
a(i) = Split(a(i), " ")(0)
a0 = Split(a(i - 1), " ")
a(i) = a0(UBound(a0)) & "@" & a(i)
If Len(a(i)) Then
If Left(a(i), 1) = "." Then a(i) = Right(a(i), Len(a(i)) - 1)
If Right(a(i), 1) = "." Then a(i) = Left(a(i), Len(a(i)) - 1)
End If
If ExtrEMail = "" Then ExtrEMail = a(i) Else ExtrEMail = a(i) & "," & ExtrEMail
Next
End Function
Sub Пример()
Dim s, m
s = "«Добрый день! Мой адрес: spasibo-za.planetu@excel.ru. Буду ждать звонка.» трали-вали.abc.def.spb@даже.рф: трали-вали попадет в адрес"
m = ExtrEMail(s)
End Sub