Витяг адреси електронної пошти з комірки, що містить інший текст
Рішення: проблему можна вирішити за допомогою макросу, призначеної для користувача функції або мегаформули.
В основі макросу лежить функція VBA Split. Припустимо, що осередок містить текст Write [email protected] to book a seminar. Якщо передати цей текст в функцію Split і вказати, що текст слід розбити на елементи, розділені пропуском - x = Split (cell.Value, "") - VBA поверне масив, де кожне слово буде елементом масиву. На рис. 1 показаний масив x після використання функція Split.
Мал. 1. Функція Split повертає масив, де кожне слово буде елементом масиву
Завантажити замітку в форматі Word або pdf. приклади в форматі Excel (з кодом VBA)
Sub getEmailMacro ()
Dim x As Variant
Dim i As Integer
Dim note As String
For Each cell In Selection
x = Split (cell.Value, "")
For i = 0 To UBound (x)
If x (i) Like "*@*.*" Then
cell.Offset (0, 1) = x (i)
Exit For
End If
Next i
Next cell
End Sub
Код для користувача функції:
Public Function getEmail (note As String) As String
Dim x As Variant
Dim i As Integer
x = Split (note, "")
For i = 0 To UBound (x)
If x (i) Like "*@*.*" Then
getEmail = x (i)
Exit Function
End If
Next i
End Function
Незважаючи на те, що така формула потребують деякого часу на написання, вона вкрай розумна і проста в експлуатації: = СЖПРОБЕЛИ (ПСТР (ПІДСТАВИТИ ( "" A1; ""; ПОВТОР ( ""; 20)); ШУКАТИ ( "@"; ПІДСТАВИТИ ( "" A1; ""; ПОВТОР ( ""; 20))) - 20; 40)). спочатку
Формула спочатку використовує функцію ПІДСТАВИТИ, щоб в початковому тексті замінити кожен пробіл на двадцять прогалин поспіль. Це дозволяє відокремити кожне слово в тексті великим числом прогалин.
Початковий текст: now is the time for [email protected] to buy a book
Новий текст: now is the time for [email protected] to buy a book
Нарешті, функція СЖПРОБЕЛИ замінює кілька прогалин поспіль на один, а також видаляє початкові і кінцеві пробіли, так що в кінцевому підсумку ви отримаєте те, що хотіли: [email protected] (рис. 4).