Удалите определенный текст между запятыми в Excel

Вопрос или проблема

Мне нужно удалить все электронные письма, которые заканчиваются на @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

FRemove

Ответ или решение

Чтобы удалить все адреса электронной почты, заканчивающиеся на @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 для достижения этой цели. Вот пошаговая инструкция:

  1. Конвертируйте диапазон адресов электронной почты в таблицу и дайте ей имя (например, Table1).
  2. Перейдите на вкладку Данные, выберите Получить данные > Из других источников > Пустой запрос.
  3. Откроется окно Power Query. Перейдите во вкладку Главная и выберите Расширенный редактор.
  4. Вставьте следующий код, заменив текст внутри на свой:
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"
  1. Нажмите Готово. После этого нажмите Закрыть и загрузить, чтобы вернуть данные в Excel.

3. Использование VBA

Если вы предпочитаете использовать макросы, вы можете создать пользовательскую функцию на VBA:

  1. Откройте редактор VBA (нажмите ALT + F11).
  2. Вставьте новый модуль (Insert > Module).
  3. Вставьте следующий код:
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
  1. Закройте редактор и используйте функцию FRemove в Excel, передавая ей текст для обработки и строку, которую следует удалить:
=FRemove(A1, "@live.com")

Заключение

Каждый из методов имеет свои преимущества, и выбор подхода зависит от используемой версии Excel и ваших предпочтений. Формулы подходят для быстрого и простого использования, Power Query предоставляет более мощные возможности обработки данных, а VBA позволяет создать пользовательские функции, которые можно легко интегрировать в ваши рабочие листы.

Оцените материал
Добавить комментарий

Капча загружается...