Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Excel
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Закрытая тема
Ваша тема закрыта, почему это могло произойти? Возможно,
Нет наработок или кода, если нужно готовое решение - создайте тему в разделе Фриланс и оплатите работу.
Название темы включает слова - "Помогите", "Нужна помощь", "Срочно", "Пожалуйста".
Название темы слишком короткое или не отражает сути вашего вопроса.
Тема исчерпала себя, помните, один вопрос - одна тема
Прочитайте правила и заново правильно создайте тему.
 
Опции темы Поиск в этой теме
Старый 26.01.2009, 14:13   #1
NooDle
 
Регистрация: 08.01.2009
Сообщений: 9
По умолчанию Копирование email адреса из строки

Добрый день. Столкнулся с таким заданием. В приложенном файле, нужно скопировать из строки только e-mail адрес, в отдельный столбец. То есть из столбца A, все e-mail адреса перенести в столбец C.

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

Код:
Sub Index()

    CurrentRow = 2 'начальная строка
    EndRow = 50 'конечная строка
    CellValue = ""
    
    AddressColumn = "a" ' столбец с адресом
    PostalCodeColumn = "b" ' столбец куда будет переноситься индекс(6 знаков)
    
Dim oMatches, oMatch
    Dim RegEx As Object
    Set RegEx = CreateObject("vbscript.regexp")

    While CurrentRow <= EndRow
    
        CellValue = CStr(Cells(CurrentRow, AddressColumn).Value)
        
        With RegEx
            .Global = False
            .IgnoreCase = True
            
            .Pattern = "^(\d{6})[^\d]|[^\d](\d{6})[^\d]|[^\d](\d{6})$"
        
             .MultiLine = True
             
   
        End With
        
        If RegEx.Test(CellValue) Then
            Set oMatches = RegEx.Execute(CellValue)
            Set oMatch = oMatches(0)
             Cells(CurrentRow, PostalCodeColumn).Value = "'" & _
                IIf(IsEmpty(oMatch.SubMatches(0)), IIf(IsEmpty(oMatch.SubMatches(1)), oMatch.SubMatches(2), oMatch.SubMatches(1)), oMatch.SubMatches(0)) 'oMatch.SubMatches(0)
             CellValue = RegEx.Replace(CellValue, " ")
        Else
            Cells(CurrentRow, PostalCodeColumn).Value = ""
        End If
            
           
        Cells(CurrentRow, AddressColumn).Value = CellValue
        
        CurrentRow = CurrentRow + 1
      
        
    Wend


End Sub
Вложения
Тип файла: rar 123.rar (8.6 Кб, 17 просмотров)

Последний раз редактировалось NooDle; 26.01.2009 в 15:46.
NooDle вне форума
Старый 26.01.2009, 14:55   #2
EducatedFool
Программист VBA
СуперМодератор
 
Аватар для EducatedFool
 
Регистрация: 13.07.2008
Сообщений: 6,858
По умолчанию

Вот весь макрос:

Код:
Sub test()
    Application.ScreenUpdating = False: Dim cell As Range
    For Each cell In ActiveSheet.UsedRange.EntireRow.Columns(1).Cells
        cell.Offset(, 5) = GetEMail(cell.Value)
    Next
    ActiveSheet.Columns(6).AutoFit
End Sub

Function GetEMail(ByVal txt As String) As String
    txt = Replace(txt, ",", ", ")
    posDOG = InStrRev(txt, "@", , vbTextCompare): If posDOG = 0 Then Exit Function
    posSPACE = InStrRev(txt, " ", posDOG, vbTextCompare): If posSPACE = 0 Then Exit Function
    GetEMail = Mid$(txt, posSPACE + 1)
End Function
Посмотрите вложение:
Вложения
Тип файла: rar 123.rar (12.1 Кб, 31 просмотров)
EducatedFool вне форума
Старый 26.01.2009, 19:08   #3
IgorGO
Новичок
СтарожилДжуниор
 
Аватар для IgorGO
 
Регистрация: 05.02.2008
Сообщений: 9,487
По умолчанию

или формулами...
Вложения
Тип файла: rar Книга45.rar (8.7 Кб, 55 просмотров)
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете
IgorGO вне форума
Старый 27.01.2009, 01:41   #4
cent
Пользователь
 
Аватар для cent
 
Регистрация: 26.12.2008
Сообщений: 73
По умолчанию

Цитата:
Сообщение от IgorGO Посмотреть сообщение
или формулами...
Браво! Не перестаю удивляться возможностям Excel и Вашими знаниями в области его формул
Четко сформулированная задача - половина решения!
<= Спасибо оставляем в отзывах
cent вне форума
Старый 27.01.2009, 12:32   #5
NooDle
 
Регистрация: 08.01.2009
Сообщений: 9
По умолчанию

Цитата:
Сообщение от EducatedFool Посмотреть сообщение
Вот весь макрос:

Код:
Sub test()
    Application.ScreenUpdating = False: Dim cell As Range
    For Each cell In ActiveSheet.UsedRange.EntireRow.Columns(1).Cells
        cell.Offset(, 5) = GetEMail(cell.Value)
    Next
    ActiveSheet.Columns(6).AutoFit
End Sub

Function GetEMail(ByVal txt As String) As String
    txt = Replace(txt, ",", ", ")
    posDOG = InStrRev(txt, "@", , vbTextCompare): If posDOG = 0 Then Exit Function
    posSPACE = InStrRev(txt, " ", posDOG, vbTextCompare): If posSPACE = 0 Then Exit Function
    GetEMail = Mid$(txt, posSPACE + 1)
End Function
Посмотрите вложение:
Спасибо огромное, то что надо!
NooDle вне форума
Старый 27.01.2009, 12:33   #6
NooDle
 
Регистрация: 08.01.2009
Сообщений: 9
По умолчанию

Цитата:
Сообщение от IgorGO Посмотреть сообщение
или формулами...

Гениально! Ни зачто бы не доудмался формулой вытащить email!!!!!
NooDle вне форума
Закрытая тема


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Отправка по email DeDoK Общие вопросы Delphi 6 19.04.2011 11:41
Otpravka Otcheta Na email combays Работа с сетью в Delphi 9 29.10.2009 12:05
Копирование строки между тегами KiDoki Общие вопросы Delphi 7 30.12.2008 16:33
Как отправка текста на Email Миша HTML и CSS 1 12.10.2008 23:20
Вытащить адреса из строки формул Alkaline Microsoft Office Excel 7 06.12.2007 13:46