Домашняя страница Undo Do New Save Карта сайта Обратная связь Поиск по форуму
МИР MS EXCEL - Гость.xls

Вход

Регистрация

Напомнить пароль

 

= Мир MS Excel/Поиск адреса электронной почты в ячейке - Мир MS Excel

Старая форма входа
  • Страница 1 из 1
  • 1
Модератор форума: китин, _Boroda_  
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Поиск адреса электронной почты в ячейке (Макросы Sub)
Поиск адреса электронной почты в ячейке
Александр Дата: Среда, 17.07.2013, 12:55 | Сообщение № 1
Группа: Гости
Добрый день, друзья. Помогите в моей нелёгкой задачке:
нужно из ячеек столбца А вырезать адрес электронной почты в соответствующие ячейки столбца B.
Адрес электронной почты непременно включает в себя символ СОБАЧКА и не имеет пробелов

ЗЫ: ячейки столбца А имеют произвольное количество символов и представляют из себя набор почтового адреса, номера телефона и адреса электронной почты

Спасибо
 
Ответить
СообщениеДобрый день, друзья. Помогите в моей нелёгкой задачке:
нужно из ячеек столбца А вырезать адрес электронной почты в соответствующие ячейки столбца B.
Адрес электронной почты непременно включает в себя символ СОБАЧКА и не имеет пробелов

ЗЫ: ячейки столбца А имеют произвольное количество символов и представляют из себя набор почтового адреса, номера телефона и адреса электронной почты

Спасибо

Автор - Александр
Дата добавления - 17.07.2013 в 12:55
SkyPro Дата: Среда, 17.07.2013, 12:57 | Сообщение № 2
Группа: Друзья
Ранг: Старожил
Сообщений: 1206
Репутация: 255 ±
Замечаний: 0% ±

2010
Без примера вариант "текст по столбцам".
Если макросом, то [vba]
Код
Sub Main()
       Dim i As Long, j As Integer, a(), b(), c: Application.ScreenUpdating = False
       a = Range([A1], Cells(Rows.Count, 1).End(xlUp)).Value: ReDim b(1 To UBound(a, 1), 1 To 1)
       For i = 1 To UBound(a, 1)
           If a(i, 1) <> "" Then
               c = Split(Application.Trim(a(i, 1)), " ")
               For j = LBound(c) To UBound(c)
                   If InStr(c(j), "@") <> 0 Then b(i, 1) = b(i, 1) & " " & c(j)
               Next: b(i, 1) = Trim(b(i, 1))
       End If: Next: [B1].Resize(UBound(b, 1)).Value = b
End Sub
[/vba]
Найден за минуту поиска в яндексе с запросом "копирование слова по символу vba"
Автор SAS888


skypro1111@gmail.com

Сообщение отредактировал SkyPro - Среда, 17.07.2013, 13:09
 
Ответить
СообщениеБез примера вариант "текст по столбцам".
Если макросом, то [vba]
Код
Sub Main()
       Dim i As Long, j As Integer, a(), b(), c: Application.ScreenUpdating = False
       a = Range([A1], Cells(Rows.Count, 1).End(xlUp)).Value: ReDim b(1 To UBound(a, 1), 1 To 1)
       For i = 1 To UBound(a, 1)
           If a(i, 1) <> "" Then
               c = Split(Application.Trim(a(i, 1)), " ")
               For j = LBound(c) To UBound(c)
                   If InStr(c(j), "@") <> 0 Then b(i, 1) = b(i, 1) & " " & c(j)
               Next: b(i, 1) = Trim(b(i, 1))
       End If: Next: [B1].Resize(UBound(b, 1)).Value = b
End Sub
[/vba]
Найден за минуту поиска в яндексе с запросом "копирование слова по символу vba"
Автор SAS888

Автор - SkyPro
Дата добавления - 17.07.2013 в 12:57
Александр Дата: Среда, 17.07.2013, 13:03 | Сообщение № 3
Группа: Гости
Например, в А1 содержится: 664033 Россия, г. Иркутск, ул. Лермонтова, 132, оф.9; (3952) 51-06-86, 609-809; tretyakov_ko@mail.ru
в А2: 305023, г.Курск, ул. 1-я Прогонная, д.65, тел. (4712) 50-25-93, т./ф. 50-25-89,FSK_Perspektiva@bk.ru

Нужно из А1 вырезать электронную почту в B1, из А2 в В2
 
Ответить
СообщениеНапример, в А1 содержится: 664033 Россия, г. Иркутск, ул. Лермонтова, 132, оф.9; (3952) 51-06-86, 609-809; tretyakov_ko@mail.ru
в А2: 305023, г.Курск, ул. 1-я Прогонная, д.65, тел. (4712) 50-25-93, т./ф. 50-25-89,FSK_Perspektiva@bk.ru

Нужно из А1 вырезать электронную почту в B1, из А2 в В2

Автор - Александр
Дата добавления - 17.07.2013 в 13:03
Александр Дата: Среда, 17.07.2013, 13:25 | Сообщение № 4
Группа: Гости
Спасибо! Работает!!

Но как сделать чтобы не копировал а вырезал эту почту и вставил во второй столбик?!
И как добавить в условие чтобы макрос смотрел не только по пробелу, а по запятой тоже?
 
Ответить
СообщениеСпасибо! Работает!!

Но как сделать чтобы не копировал а вырезал эту почту и вставил во второй столбик?!
И как добавить в условие чтобы макрос смотрел не только по пробелу, а по запятой тоже?

Автор - Александр
Дата добавления - 17.07.2013 в 13:25
AndreTM Дата: Среда, 17.07.2013, 13:40 | Сообщение № 5
Группа: Друзья
Ранг: Старожил
Сообщений: 1762
Репутация: 500 ±
Замечаний: 0% ±

2003 & 2010
Как, как... Регэкспами.
Впрочем, я бы просто находил СОБАЧКУ smile и искал бы по набору ограничителей слева и справа.
Вот только фантазии пользователей доходят до того, что они и букву "Ы" перед адресом готовы считать разделителем...

Между прочим, некоторые почтовые сервисы бывают не готовы считать подчёркивание за самостоятельны валидный символ... smile


Skype: andre.tm.007
Donate: Qiwi: 9517375010
 
Ответить
СообщениеКак, как... Регэкспами.
Впрочем, я бы просто находил СОБАЧКУ smile и искал бы по набору ограничителей слева и справа.
Вот только фантазии пользователей доходят до того, что они и букву "Ы" перед адресом готовы считать разделителем...

Между прочим, некоторые почтовые сервисы бывают не готовы считать подчёркивание за самостоятельны валидный символ... smile

Автор - AndreTM
Дата добавления - 17.07.2013 в 13:40
SkyPro Дата: Среда, 17.07.2013, 13:44 | Сообщение № 6
Группа: Друзья
Ранг: Старожил
Сообщений: 1206
Репутация: 255 ±
Замечаний: 0% ±

2010
Для одноразового решения можно просто заменить все запятые и точки с запятой пробелами. После чего запустить макрос.
В адресе почты не может быть запятых и точек с запятой. Останется только проблема с точками smile

В макросе, подозреваю, вот эта строка отвечает за разделитель :
[vba]
Код
c = Split(Application.Trim(a(i, 1)), " ")
[/vba]
Попробуйте в несколько циклов. Сначала один разделитель, потом второй и т.д. У меня так получилось.


skypro1111@gmail.com

Сообщение отредактировал SkyPro - Среда, 17.07.2013, 13:53
 
Ответить
СообщениеДля одноразового решения можно просто заменить все запятые и точки с запятой пробелами. После чего запустить макрос.
В адресе почты не может быть запятых и точек с запятой. Останется только проблема с точками smile

В макросе, подозреваю, вот эта строка отвечает за разделитель :
[vba]
Код
c = Split(Application.Trim(a(i, 1)), " ")
[/vba]
Попробуйте в несколько циклов. Сначала один разделитель, потом второй и т.д. У меня так получилось.

Автор - SkyPro
Дата добавления - 17.07.2013 в 13:44
AndreTM Дата: Среда, 17.07.2013, 13:53 | Сообщение № 7
Группа: Друзья
Ранг: Старожил
Сообщений: 1762
Репутация: 500 ±
Замечаний: 0% ±

2003 & 2010
Останется только проблема с точками
А если разрешат пробелы в адресе?? cool
В результате - задача превращается в квест.
Нет, чтобы сразу определить ввод данных в базу по полям... Ну, по сущностям в базе - и контроль ввода прямо на клиенте.


Skype: andre.tm.007
Donate: Qiwi: 9517375010
 
Ответить
Сообщение
Останется только проблема с точками
А если разрешат пробелы в адресе?? cool
В результате - задача превращается в квест.
Нет, чтобы сразу определить ввод данных в базу по полям... Ну, по сущностям в базе - и контроль ввода прямо на клиенте.

Автор - AndreTM
Дата добавления - 17.07.2013 в 13:53
SkyPro Дата: Среда, 17.07.2013, 14:34 | Сообщение № 8
Группа: Друзья
Ранг: Старожил
Сообщений: 1206
Репутация: 255 ±
Замечаний: 0% ±

2010
Ну в том примере, что указал ТС есть только запятая и точка с запятой.
Остальное вручную.

По поводу удаления мейла из А:А :
[vba]
Код
Sub Main()
        Dim razdelitel$, i As Long, j As Integer, a(), b(), c: Application.ScreenUpdating = False
        a = Range([A1], Cells(Rows.Count, 1).End(xlUp)).Value: ReDim b(1 To UBound(a, 1), 1 To 1)
       razdelitel = InputBox(prompt:="Введите разделитель:", Title:="Разделитель")
        For i = 1 To UBound(a, 1)
            If a(i, 1) <> "" Then
                c = Split(Application.Trim(a(i, 1)), razdelitel)
                For j = LBound(c) To UBound(c)
                    If InStr(c(j), "@") <> 0 Then b(i, 1) = b(i, 1) & " " & c(j)
                Next: b(i, 1) = Trim(b(i, 1))
        End If: Next: [B1].Resize(UBound(b, 1)).Value = b
           
           
            Dim rCell As Range, rBB As Range, text$, rA As Range
       Set rBB = ActiveSheet.Range([B1], Cells(Rows.Count, 2).End(xlUp))
           For Each rCell In rBB
               text = rCell.Value
                   If text <> "" Then
                   Set rA = rCell.Offset(0, -1)
                   rA.Replace What:=text, Replacement:="", LookAt:=xlPart, SearchOrder:=xlByRows
                   End If
           Next
End Sub
[/vba]


skypro1111@gmail.com

Сообщение отредактировал SkyPro - Среда, 17.07.2013, 15:11
 
Ответить
СообщениеНу в том примере, что указал ТС есть только запятая и точка с запятой.
Остальное вручную.

По поводу удаления мейла из А:А :
[vba]
Код
Sub Main()
        Dim razdelitel$, i As Long, j As Integer, a(), b(), c: Application.ScreenUpdating = False
        a = Range([A1], Cells(Rows.Count, 1).End(xlUp)).Value: ReDim b(1 To UBound(a, 1), 1 To 1)
       razdelitel = InputBox(prompt:="Введите разделитель:", Title:="Разделитель")
        For i = 1 To UBound(a, 1)
            If a(i, 1) <> "" Then
                c = Split(Application.Trim(a(i, 1)), razdelitel)
                For j = LBound(c) To UBound(c)
                    If InStr(c(j), "@") <> 0 Then b(i, 1) = b(i, 1) & " " & c(j)
                Next: b(i, 1) = Trim(b(i, 1))
        End If: Next: [B1].Resize(UBound(b, 1)).Value = b
           
           
            Dim rCell As Range, rBB As Range, text$, rA As Range
       Set rBB = ActiveSheet.Range([B1], Cells(Rows.Count, 2).End(xlUp))
           For Each rCell In rBB
               text = rCell.Value
                   If text <> "" Then
                   Set rA = rCell.Offset(0, -1)
                   rA.Replace What:=text, Replacement:="", LookAt:=xlPart, SearchOrder:=xlByRows
                   End If
           Next
End Sub
[/vba]

Автор - SkyPro
Дата добавления - 17.07.2013 в 14:34
Александр Дата: Среда, 17.07.2013, 16:42 | Сообщение № 9
Группа: Гости
Спасибо!
Действительной, пробел после запятой поставить проще через ctrl+F
 
Ответить
СообщениеСпасибо!
Действительной, пробел после запятой поставить проще через ctrl+F

Автор - Александр
Дата добавления - 17.07.2013 в 16:42
SkyPro Дата: Среда, 17.07.2013, 16:59 | Сообщение № 10
Группа: Друзья
Ранг: Старожил
Сообщений: 1206
Репутация: 255 ±
Замечаний: 0% ±

2010
[vba]
Код
Sub Main()
          Dim i As Long, j As Integer, a(), b(), c: Application.ScreenUpdating = False
Columns("A:A").Replace What:=",", Replacement:=", "
Columns("A:A").Replace What:=";", Replacement:="; "
          a = Range([A1], Cells(Rows.Count, 1).End(xlUp)).Value: ReDim b(1 To UBound(a, 1), 1 To 1)
          Range([A1], Cells(Rows.Count, 1).End(xlUp)).Replace What:=";", Replacement:="; ", LookAt:=xlPart, SearchOrder:=xlByRows
          For i = 1 To UBound(a, 1)
              If a(i, 1) <> "" Then
                  c = Split(Application.Trim(a(i, 1)), " ")
                  For j = LBound(c) To UBound(c)
                      If InStr(c(j), "@") <> 0 Then b(i, 1) = b(i, 1) & " " & c(j)
                  Next: b(i, 1) = Trim(b(i, 1))
          End If: Next: [B1].Resize(UBound(b, 1)).Value = b
           
           
              Dim rCell As Range, rBB As Range, text$, rA As Range
      Set rBB = ActiveSheet.Range([B1], Cells(Rows.Count, 2).End(xlUp))
          For Each rCell In rBB
              text = rCell.Value
                  If text <> "" Then
                  Set rA = rCell.Offset(0, -1)
                  rA.Replace What:=text, Replacement:="", LookAt:=xlPart, SearchOrder:=xlByRows
                  End If
          Next
End Sub
[/vba]


skypro1111@gmail.com
 
Ответить
Сообщение[vba]
Код
Sub Main()
          Dim i As Long, j As Integer, a(), b(), c: Application.ScreenUpdating = False
Columns("A:A").Replace What:=",", Replacement:=", "
Columns("A:A").Replace What:=";", Replacement:="; "
          a = Range([A1], Cells(Rows.Count, 1).End(xlUp)).Value: ReDim b(1 To UBound(a, 1), 1 To 1)
          Range([A1], Cells(Rows.Count, 1).End(xlUp)).Replace What:=";", Replacement:="; ", LookAt:=xlPart, SearchOrder:=xlByRows
          For i = 1 To UBound(a, 1)
              If a(i, 1) <> "" Then
                  c = Split(Application.Trim(a(i, 1)), " ")
                  For j = LBound(c) To UBound(c)
                      If InStr(c(j), "@") <> 0 Then b(i, 1) = b(i, 1) & " " & c(j)
                  Next: b(i, 1) = Trim(b(i, 1))
          End If: Next: [B1].Resize(UBound(b, 1)).Value = b
           
           
              Dim rCell As Range, rBB As Range, text$, rA As Range
      Set rBB = ActiveSheet.Range([B1], Cells(Rows.Count, 2).End(xlUp))
          For Each rCell In rBB
              text = rCell.Value
                  If text <> "" Then
                  Set rA = rCell.Offset(0, -1)
                  rA.Replace What:=text, Replacement:="", LookAt:=xlPart, SearchOrder:=xlByRows
                  End If
          Next
End Sub
[/vba]

Автор - SkyPro
Дата добавления - 17.07.2013 в 16:59
vsalitanov Дата: Пятница, 14.03.2014, 10:28 | Сообщение № 11
Группа: Пользователи
Ранг: Прохожий
Сообщений: 4
Репутация: 0 ±
Замечаний: 0% ±

Excel 2013
Добрый день.
А как быть если у меня одна ячейка с e-mail адресами ( zzzzzz@mail.ru ; сссссс@mail.com; и тд)
Как мне из эту ячейку превратить в столбец с отдельными адресами?
 
Ответить
СообщениеДобрый день.
А как быть если у меня одна ячейка с e-mail адресами ( zzzzzz@mail.ru ; сссссс@mail.com; и тд)
Как мне из эту ячейку превратить в столбец с отдельными адресами?

Автор - vsalitanov
Дата добавления - 14.03.2014 в 10:28
Hugo Дата: Пятница, 14.03.2014, 10:50 | Сообщение № 12
Группа: Друзья
Ранг: Участник клуба
Сообщений: 3255
Репутация: 707 ±
Замечаний: 0% ±

2019
Всё давно уже написано... Это извлечение эмайлов - раз уж тут пока небыло решения на regexp.
[vba]
Код
Function em(S As String)
        Dim v, el, t$
        Dim EML_PTRN$

        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 el In v
            t = t & ", " & el
        Next
        em = Mid(t, 3)
End Function
[/vba]

vsalitanov - Ваш вопрос к теме не относится, Вам нужно создать свою тему. Т.к. судя по Вашему примеру - извлекать именно емайлы тут не нужно, это не суть задачи.


excel@nxt.ru
webmoney: E265281470651 Z422237915069
 
Ответить
СообщениеВсё давно уже написано... Это извлечение эмайлов - раз уж тут пока небыло решения на regexp.
[vba]
Код
Function em(S As String)
        Dim v, el, t$
        Dim EML_PTRN$

        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 el In v
            t = t & ", " & el
        Next
        em = Mid(t, 3)
End Function
[/vba]

vsalitanov - Ваш вопрос к теме не относится, Вам нужно создать свою тему. Т.к. судя по Вашему примеру - извлекать именно емайлы тут не нужно, это не суть задачи.

Автор - Hugo
Дата добавления - 14.03.2014 в 10:50
ikki Дата: Суббота, 15.03.2014, 20:40 | Сообщение № 13
Группа: Друзья
Ранг: Старожил
Сообщений: 1906
Репутация: 504 ±
Замечаний: 0% ±

Excel 2003, 2010
"[A-Z0-9._%-]+@[A-Z0-9.-]+\.[A-Z]{2,4}"
не совсем хороший шаблон :(
в частности, допускает, чтобы части адреса до собаки и после собаки начинались с минуса.

впрочем, полный regexp email-адреса в соответствии с RFC822 выглядит довольно устрашающе :D
кто хочет сильно испугаться - милости прошу:
http://instantbadger.blogspot.ru/2006....il.html


помощь по Excel и VBA
ikki@fxmail.ru, icq 592842413, skype alex.ikki
 
Ответить
Сообщение
"[A-Z0-9._%-]+@[A-Z0-9.-]+\.[A-Z]{2,4}"
не совсем хороший шаблон :(
в частности, допускает, чтобы части адреса до собаки и после собаки начинались с минуса.

впрочем, полный regexp email-адреса в соответствии с RFC822 выглядит довольно устрашающе :D
кто хочет сильно испугаться - милости прошу:
http://instantbadger.blogspot.ru/2006....il.html

Автор - ikki
Дата добавления - 15.03.2014 в 20:40
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Поиск адреса электронной почты в ячейке (Макросы Sub)
  • Страница 1 из 1
  • 1
Поиск:

Яндекс.Метрика Яндекс цитирования
© 2010-2024 · Дизайн: MichaelCH · Хостинг от uCoz · При использовании материалов сайта, ссылка на www.excelworld.ru обязательна!