Данный макрос предназначен для поиска адресов электронной почты на листе Excel, с последующим выводом найденных адресов на отдельный лист.В прикреплённом файле, на первом листе ("исходные данные"), ячейки заполнены неструктурированной информацией (смесь фамилий, адресов почты, прочей ненужной информации) Макрос вычленяет из текста ячеек адреса электронной почты, и выводит все найденные адреса email в таблицу на втором листе ("результат")Конечно, не помешало бы ещё проверить все найденные адреса почты на корректность (на соответствие стандартам RFC 5322 и RFC 5321), Для поиска адресов email используются регулярные выражения (RegExp) Dim coll As Collection Sub EmailsList() Dim cell As Range: Application.ScreenUpdating = False Set coll = New Collection ' перебираем все заполненные ячейки на листе в поисках адресов почты For Each cell In shs.UsedRange.SpecialCells(xlCellTypeConstants).Cells ParseAddresses cell.Text ' проверяем очередную ячейку Next cell ' выводим найденные номера на второй лист For Each Item In coll shres.Range("a" & shres.Rows.Count).End(xlUp).Offset(1) = Item Next End Sub Sub cl(): shres.[a4:a65000].ClearContents: End Sub ' очистка таблицы Sub ParseAddresses(ByVal txt As String) ' ищет в тексте txt адреса электронной почты, ' все найденные адреса добавляются в коллекцию coll repl1$ = "ZZZXXXZZZ": repl2$ = "ZZZYYYZZZ": On Error Resume Next txt = Replace(txt, ".", repl1$): txt = Replace(txt, "-", repl2$) Set RegExp = CreateObject("VBScript.RegExp"): RegExp.Global = True RegExp.Pattern = "[\w]{1,}@[\w]{1,}" & repl1$ & "[\w]{1,}" If RegExp.test(txt) Then Set objMatches = RegExp.Execute(txt) For i = 0 To objMatches.Count - 1 addr = objMatches.Item(i).Value addr = Replace(addr, repl1$, "."): addr = Replace(addr, repl2$, "-") coll.Add addr, addr ' только уникальные адреса Next End If End Sub
|
|||||||

Комментарии
По стоимости:
1 пункт - недорого, особенно, если не надо проверять очередной адрес на наличие в текстовом файле
Зависит также от того, встраивать код в конкретный файл, или в надстройку, и требуются ли какие настройки вывода в текстовый файл.
По 2 пункту - всё сложнее. Сайты очень сильно отличаются друг от друга, поэтому для каждого из сайтов нужно своё решение.
Перебирать все страницы сайта - не вариант (число страниц может достигать миллионов)
Кроме того, для этих целей существуют специализированные программы.
1) Сколько будет стоить доработка программы таким образом чтоб я мог получать найденные емайлы в строчку через запятую в обычном текстовом документе ?
2) Можете написать программу для поиска емайлов не в текстовом документе а на сайте ?
Если да то стоимость работ ?
Улучшить макрос, конечно же, можно, - и в виде надстройки реализовать, и т.д. и т.п.
Но времени свободного у меня сейчас мало - так что сделаю это, только если вы готовы оплатить работу.
Я же, но уже точнее запрос (просьба). Можно ли чуть улучшить данный макрос (сделать его более удобным в работе):
1. Сделать в виде модуля
2. Перебор по всем листам книги (или выбор листов)
3. При отсутствии емейл на листе выдает ошибку
Заранее спасибо, Очень интересный сайт
Отличный маккрос, спасибо...Но макрос работает только в этой книге и переносить объемы информации на лист ИСХОДНЫЕ ДАННЫЕ не удобно. Как сделать, что бы это было в виде надстройки и работало в любой книге не зависимо от названия листов ?
Отправить комментарий