Использую данный код с формулой =ExtractEmailFun(A1), адреса извлекаются, но так как их несколько не могу их потом разбить на столбцы. Как изменить код, чтобы адреса извлекались из текста, скажем через точку с запятой? буду очень признательна за ответ
Код
'извлечение адреса
Function ExtractEmailFun(extractStr As String) As String
'Update by extendoffice
Dim CharList As String
On Error Resume Next
CheckStr = "[A-Za-z0-9._-]"
outStr = ""
Index = 1
Do While True
Index1 = VBA.InStr(Index, extractStr, "@")
getStr = ""
If Index1 > 0 Then
For p = Index1 - 1 To 1 Step -1
If Mid(extractStr, p, 1) Like CheckStr Then
getStr = Mid(extractStr, p, 1) & getStr
Else
Exit For
End If
Next
getStr = getStr & "@"
For p = Index1 + 1 To Len(extractStr)
If Mid(extractStr, p, 1) Like CheckStr Then
getStr = getStr & Mid(extractStr, p, 1)
Else
Exit For
End If
Next
Index = Index1 + 1
If outStr = "" Then
outStr = getStr
Else
outStr = outStr & Chr(10) & getStr
End If
Else
Exit Do
End If
Loop
ExtractEmailFun = outStr
End Function
Function em(s As String)
Dim v
Const EML_PTRN = "[A-Z0-9._%-]+@[A-Z0-9.-]+\.[A-Z]{2,4}"
'https://www.regular-expressions.info/email.html http://www.regular-expressions.info/regexbuddy/email.html
With CreateObject("vbscript.regexp")
.Pattern = EML_PTRN
.Global = True
.IgnoreCase = True
Set v = .Execute(s)
End With
em = v(0).Value
End Function
P.S. писал когда ещё не было поста. Этот код легко доработать.
Function emAll(s As String)
Dim v, x$, m
Const EML_PTRN = "[A-Z0-9._%-]+@[A-Z0-9.-]+\.[A-Z]{2,4}"
'https://www.regular-expressions.info/email.html http://www.regular-expressions.info/regexbuddy/email.html
With CreateObject("vbscript.regexp")
.Pattern = EML_PTRN
.Global = True
.IgnoreCase = True
Set v = .Execute(s)
End With
For Each m In v
x = x & ", " & m
Next
emAll = Mid(x, 3)
End Function
написал: но так как их несколько не могу их потом разбить на столбцы
я взял наобум 2 email и объединил в строку через пробел: "info@akademia-excel.runews@news.ozon.ru" А как в строке один адрес от другого отделен в Вашем случае?
Всё сложное - не нужно. Всё нужное - просто /М. Т. Калашников/
news@news.ozon.ruinfo@akademia-excel.ru у меня получается без пробела, но вроде как два абзаца в одной ячейке, но потом не могу их разбить по столбцам все равно. я думаю может через точку с запятой получится
OL_IS написал: Но формула не работает с последним кодом все равно(
- докажете? У меня работают обе, только первая выводит один первый емайл, вторая все через запятую. Дайте файл с несколькими емайлами (фейковыми!) и покажите что из чего пытаетесь получить. Приложил мой файл, где всё работает как я представил задачу.
Hugo, Спасибо огромнейшее!!!!! все получилось как нужно Только некоторые адреса в конце обрезаются несколько букв, уже после @, почему такое может быть?? и когда я удаляю пробел вот тут, то у первого адреса первая буква обрезается:
Код
x = x & "; " & m
Код
Function emAll(s As String)
Dim v, x$, m
Const EML_PTRN = "[A-Z0-9._%-]+@[A-Z0-9.-]+\.[A-Z]{2,4}"
'Извлечь адрес электронной почты из текстовой строки
With CreateObject("vbscript.regexp")
.Pattern = EML_PTRN
.Global = True
.IgnoreCase = True
Set v = .Execute(s)
End With
For Each m In v
x = x & "; " & m
Next
emAll = Mid(x, 2)
End Function
- подозреваю что дубли не нужны. Можно доработать коллекцией или словарём. P.S. доработал, разделитель и повторы опционально - если не указывать то будет | и без повторов.