Вопрос или проблема
Мне нужно удалить все электронные письма, которые заканчиваются на @live.com, и оставить остальные электронные письма в ячейке. Большинство ячеек содержит несколько электронных писем, разделенных запятыми. Смотрите ниже:
Пример 1
Электронные письма:
[email protected], [email protected], [email protected], [email protected]
Ожидаемый результат:
[email protected]
Пример 2
Электронные письма:
[email protected], [email protected],[email protected], [email protected], [email protected]
Ожидаемый результат:
[email protected], [email protected]
Я начинающий пользователь Excel и не уверен, как использовать функции здесь.
Спасибо.
Следующая формула работает с версией MS365
Excel, так как, согласно помеченному посту, формула не будет применима для вашей версии Excel, поэтому предлагается использовать Power Query
, который может элегантно разделить и затем объединить строку, используя разделитель.
• Формула, использованная в ячейке B1
=LET(
a, TEXTSPLIT(A1,", "),
TEXTJOIN(", ",1,FILTER(a, ISERR(FIND("@live.com",a)))))
Или, можно использовать следующим образом:
=MAP(A1:A3, LAMBDA(x,
LET(b, TEXTSPLIT(x,", "),
TEXTJOIN(", ",1,FILTER(b, ISERR(FIND("@live.com",b)))))))
Это также можно сделать с помощью Power Query
, доступного в Windows Excel 2010+
и Excel 365 (Windows или Mac)
Чтобы использовать Power Query, выполните следующие действия:
- Сначала преобразуйте исходные диапазоны в таблицу и назовите её соответствующим образом, для этого примера я назвал её
Table1
- Затем откройте пустой запрос из вкладки Данные –> Получить и преобразовать данные –> Получить данные –> Из других источников –> Пустой запрос
- Это откроет окно Power Query, теперь из вкладки Главная –> Расширенный редактор –> Вставьте следующий M-Code, удалив всё, что вы видите, и нажмите Готово
let
Source = Excel.CurrentWorkbook(){[Name="Table1"]}[Content],
#"Added Custom" = Table.AddColumn(Source, "Result", each Text.Combine(List.Select(Text.Split([Emails], ","), each not Text.EndsWith(Text.Trim(_), "@live.com")), ", ")),
#"Removed Columns" = Table.RemoveColumns(#"Added Custom",{"Emails"})
in
#"Removed Columns"
- Наконец, чтобы импортировать обратно в Excel –> Нажмите на Закрыть и загрузить или Закрыть и загрузить в –> При нажатии на первый вариант будет создан Новый лист с требуемым результатом, в то время как второй вариант вызовет окно, в котором вам нужно будет указать место для размещения результата.
Вы также можете легко достичь своей цели с помощью функции UDF, написанной на VBA.
Содержимое функции должно быть помещено в стандартный модуль, вставленный в редактор VBA. Если вы еще не использовали VBA, в интернете много информации об этом.
Затем вы вызываете свою функцию на листе, как обычную функцию. Первый аргумент – это текст, который нужно обработать, второй – это фрагмент, который следует исключить.
Используйте разделители так, как вы обычно делаете в Excel.
Function FRemove(text As String, remv As String) As String
Dim a As Variant
a = Split(text, ",")
a = Filter(a, remv, False)
a = Join(a, ", ")
FRemove = Application.Trim(a)
End Function
Ответ или решение
Чтобы удалить все адреса электронной почты, заканчивающиеся на @live.com, из ячейки, содержащей несколько адресов, разделённых запятыми, можно использовать несколько подходов в Excel. Ниже приведены три метода: с помощью формул, Power Query и VBA.
1. Использование формул (Excel 365)
Если у вас установлена версия Excel 365, вы можете воспользоваться такой формулой:
=LET(
a, TEXTSPLIT(A1, ", "),
TEXTJOIN(", ", 1, FILTER(a, ISERR(FIND("@live.com", a)))))
Эта формула разделяет строку на массив адресов электронной почты, фильтрует те, которые не содержат @live.com, и объединяет оставшиеся адреса обратно в строку, разделённую запятыми.
Для диапазона ячеек:
Если у вас есть диапазон ячеек, вы можете использовать функцию MAP
:
=MAP(A1:A3, LAMBDA(x,
LET(b, TEXTSPLIT(x, ", "),
TEXTJOIN(", ", 1, FILTER(b, ISERR(FIND("@live.com", b)))))))
2. Использование Power Query
Если вы используете Excel 2010 или более позднюю версию, вы можете использовать Power Query для достижения этой цели. Вот пошаговая инструкция:
- Конвертируйте диапазон адресов электронной почты в таблицу и дайте ей имя (например,
Table1
). - Перейдите на вкладку
Данные
, выберитеПолучить данные > Из других источников > Пустой запрос
. - Откроется окно Power Query. Перейдите во вкладку
Главная
и выберитеРасширенный редактор
. - Вставьте следующий код, заменив текст внутри на свой:
let
Source = Excel.CurrentWorkbook(){[Name="Table1"]}[Content],
#"Added Custom" = Table.AddColumn(Source, "Result", each Text.Combine(List.Select(Text.Split([Emails], ","), each not Text.EndsWith(Text.Trim(_), "@live.com")), ", ")),
#"Removed Columns" = Table.RemoveColumns(#"Added Custom",{"Emails"})
in
#"Removed Columns"
- Нажмите
Готово
. После этого нажмитеЗакрыть и загрузить
, чтобы вернуть данные в Excel.
3. Использование VBA
Если вы предпочитаете использовать макросы, вы можете создать пользовательскую функцию на VBA:
- Откройте редактор VBA (нажмите
ALT
+F11
). - Вставьте новый модуль (
Insert > Module
). - Вставьте следующий код:
Function FRemove(text As String, remv As String) As String
Dim a As Variant
a = Split(text, ",")
a = Filter(a, remv, False)
a = Join(a, ", ")
FRemove = Application.Trim(a)
End Function
- Закройте редактор и используйте функцию
FRemove
в Excel, передавая ей текст для обработки и строку, которую следует удалить:
=FRemove(A1, "@live.com")
Заключение
Каждый из методов имеет свои преимущества, и выбор подхода зависит от используемой версии Excel и ваших предпочтений. Формулы подходят для быстрого и простого использования, Power Query предоставляет более мощные возможности обработки данных, а VBA позволяет создать пользовательские функции, которые можно легко интегрировать в ваши рабочие листы.