Я пытался использовать онлайн-инструменты, доступные в Интернете, но они бесполезны / они извлекают только первый доступный адрес электронной почты в поле Excel.
Есть ли способ извлечь несколько адресов электронной почты из ячейки Excel
Требуемый вывод - извлеките электронные письма и сохраните их в отдельной электронной таблице или в соседнем столбце
=========================
Формат ввода 3
#
Для следующего HTML-кода, присутствующего в ячейке Excel, я могу извлечь только первое полученное письмо, но не все упомянутые несколько адресов электронной почты.
Да, есть несколько способов сделать это. `kutools` должен работать для нескольких адресов электронной почты. Какие еще варианты вы пробовали и в чем проблема. Какой из различных тегов (`unix`,` vba`, `google-spreadsheets`,` excel`) вы хотите использовать? Какой вывод вы хотите?
Ron Rosenfeld 6 лет назад
0
@RonRosenfeld Обязательный вывод - извлекать электронные письма и сохранять их в отдельной электронной таблице или в соседнем столбце. Я хотел бы использовать Excel VBA или какой из них легче
Matt 6 лет назад
0
1 ответ на вопрос
1
Ron Rosenfeld
Эта пользовательская функция (UDF) будет возвращать массив существующих адресов электронной почты в указанной ячейке.
Затем отдельные адреса могут быть получены различными способами:
Используйте функцию INDEX
Введите функцию как массив из нескольких ячеек
Используйте его в макросе для выполнения специальных действий, которые могут вам потребоваться.
Символ адреса электронной почты определяется шаблоном регулярных выражений sPatи подробно описан ниже.
Вы помещаете UDF в обычный модуль
Option Explicit Function ExtrEmail(S As String) As String() Dim sTemp() As String Dim RE As Object, MC As Object, M As Object Const sPat As String = "\b[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]\b" 'Regex for emails Dim I As Long 'Initialize Regex engine Set RE = CreateObject("vbscript.regexp") With RE .Pattern = sPat .Global = True .ignorecase = True If .test(S) = True Then Set MC = .Execute(S) ReDim sTemp(1 To MC.Count) I = 0 For Each M In MC I = I + 1 sTemp(I) = M Next M End If End With ExtrEmail = sTemp End Function
Один из способов его использования показан на скриншоте ниже (с помощью функции INDEX). Формула вводится B1и заполняется вправо и вниз. Предложение IFERRORзаставляет его возвращать пустую строку, если совпадений меньше, чем заполненных ячеек.
Изменить: изображение изменилось, чтобы показать все три примера
Regex Pattern Объяснение
Адрес электронной почты
\b[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]\b
Опции: без учета регистра; ^ $ не совпадают при переносе строки
@ Matt Если это работает для вас, не могли бы вы отметить мой ответ как принятый? Пожалуйста, прочитайте [Что мне делать, когда кто-то отвечает на мой вопрос?] (Https://superuser.com/help/someone-answers)
Ron Rosenfeld 6 лет назад
0
Я пробовал ваше решение для формата ввода 3. К сожалению, ваше решение не работает. Он извлекает только первое появление письма. Не все множественные электронные письма, присутствующие в ячейке, извлекаются. Не уверен, что проблема связана с входными данными или я выполняю их неправильно - = IFERROR (INDEX (ExtrEmail ($ A1), COLUMNS ($ A: A)), "")
Matt 6 лет назад
0
@Matt Кажется, что здесь хорошо работает с только что добавленными вами входными данными формата 3. И ваша формула выглядит нормально, при условии, что ваши данные A1. Я выложу скриншот моих результатов со всей вашей информацией
Ron Rosenfeld 6 лет назад
0