2

Поэтому я работал с таблицей, в которой есть список названий школ. Я извлекаю данные из этой таблицы, чтобы создать список, который ограничивает размер текста в каждой ячейке. Чтобы привести названия школ в соответствие, я должен убрать тип школы из названия.

Пример: Исходное имя => Обработанное имя

  • Универсальный элементарный => Универсальный
  • Безымянная средняя школа => Безымянный
  • Через городскую среднюю школу => Через город

Я не могу найти первый пробел, так как некоторые из названий школ состоят из двух слов. Я был в состоянии сделать эту работу с вложенным выражением IF.

=IFERROR(LEFT(J2,FIND("Elementary",J2)-2),IFERROR(LEFT(J2,FIND("Middle",J2)-2),IFERROR(LEFT(J2,FIND("High",J2)-2),J2)))

Проблема с этим решением состоит в том, что оно действительно длинное. Я хотел бы, чтобы функция FIND выполняла поиск более чем одной текстовой строки. Я чувствую, что это уменьшило бы эту формулу до чего-то намного более легкого для чтения.

У кого-нибудь есть какие-либо идеи? Есть ли более элегантный способ сделать это?

заранее спасибо

3 ответа3

3

Может быть, не более элегантно, но короче и с той же проблемой, что и вы, в отношении чувствительности к регистру. Проблемы, если строка окончания школы не соответствует, но, возможно, они есть.

=SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(J2,"Elementary",""),"Middle School",""),"High School","")

Кто-то может создать более элегантную пользовательскую функцию, но вы можете добавить ее к модулю в книге.

 Public Function schType(Cell As String) As String
   If InStr(1, LCase(Cell), "elementary school") > 0 Then schType = Replace(Cell, "elementary school", "")
   If InStr(1, LCase(Cell), "high school") > 0 Then schType = Replace(Cell, "high school", "")
   If InStr(1, LCase(Cell), "middle school") > 0 Then schType = Replace(Cell, "middle school", "")
 End Function

Тогда в ячейке вы хотите = schType(J2)
Это было быстро и ищет эти конкретные строки, а не частичные строки в случае, если у вас может быть школа, такая как "Начальная школа Миддлтона", просто поиск "среднего" мог бы ошибиться

1

Datatoo победил меня (+1).
Если вы ищете альтернативу, не включающую формулы, вы всегда можете использовать Excel Find and Replace -

  1. Ctrl + H
  2. Введите « средняя школа » (с пробелом перед словом) в поле « Найти»
  3. Оставьте Заменить на пустое.
  4. Заменить все
  5. Повторите эти действия для каждого слова / фразы, которые вы хотите удалить из своих ячеек.

Приложение:
Если вы готовы использовать пользовательскую функцию, попробуйте это:

Option Compare Text
Public Function REPLACETEXT(src As Range, crt As Range) As String
s = Trim(src.Value)
    For Each c In crt
        If InStr(1, s, Trim(c.Value)) Then newstr = Replace(s, Trim(c.Value), "")
    Next c
REPLACETEXT = newstr
End Function

Нажмите ALT + F11. Вставьте код в новый модуль.

Использование:

=REPLACETEXT(A1,D1:D3)

где A1 содержит полный текст ("Действительно классная средняя школа"), а D1:D3 содержит строки, которые вы хотите удалить из своих ячеек (например, "средняя школа", "средняя школа", "начальная школа")

0

Поместите "Элементарный", "Средняя школа", "Средняя школа", «» в B1:B4. Затем, предположив, что ваш список находится в столбце J, а вы хотите, чтобы обработанный список был в столбце K, введите следующую формулу в K2, подтвердив Ctrl+Shift+Enter, и скопируйте вниз.

=SUBSTITUTE(J2;INDEX(B$1:B$4;MIN(IF(ISERROR(FIND(B$1:B$4;J2));999;ROW(B$1:B$4)))-ROW(B$1)+1);"")

Очевидно, вы можете адаптировать его к вашим потребностям.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .