Извлечение текста из сложной строки в Excel - PullRequest
0 голосов
/ 05 октября 2018

Прикрепленное изображение (ссылка: https://i.stack.imgur.com/w0pEw.png) показывает диапазон ячеек (B1: B7) из таблицы, которую я импортировал из Интернета. Мне нужна формула, которая позволяет мне извлекать имена из каждой ячейки.В этом случае моя цель - создать следующий список имен, в котором каждое имя находится в отдельной ячейке: Эрик Карлссон, П. К. Суббан, Джон Таварес, Мэтью Ткачук, Стивен Стамкос, Дастин Браун, Ши Вебер.

Я читал о функциях left, right и mid, но меня смущают нерегулярные пробелы и специальные символы (то есть поле с вопросительным знаком рядом с некоторыми именами).

Может кто-нибудь помочь мне извлечь имена? Спасибо

1 Ответ

0 голосов
/ 05 октября 2018

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

Для этой функции требуется следующий формат:

  1. Некоторый исходный текстсопровождаемый
  2. 2 новыми строками в Excel (представленными как CHAR(10)
  3. Имя, которое состоит из имени, пробела, затем фамилии
  4. Aвторой пробел в той же строке, что и имя, за которым следует дополнительный текст.

С этим форматом вы можете использовать следующую формулу (при условии, что ваши данные находятся в таблице Excel, с колонкой исходныхданные с именем Текст ):

=MID([@Text],SEARCH(CHAR(10),[@Text],SEARCH(CHAR(10),[@Text])+1)+1,SEARCH(" ",MID([@Text],SEARCH(CHAR(10),[@Text],SEARCH(CHAR(10),[@Text])+1)+1,LEN([@Text])),SEARCH(" ",MID([@Text],SEARCH(CHAR(10),[@Text],SEARCH(CHAR(10),[@Text])+1)+1,LEN([@Text])))+1)-1)

Чтобы придумать эту формулу, мы предпримем следующие шаги:

Сначала мы выясним, где начинается имя.мы знаем, что это происходит после двух новых строк, поэтому мы используем:

=SEARCH(CHAR(10),[@Text],SEARCH(CHAR(10),[@Text])+1)+1

Внутренняя (встречающаяся секунда) SEARCH находит первую новую строку, а внешняя (встречающаяся первая) находит вторую новую строку.

Теперь, когда у нас есть это значение, мы можем использовать его дляопределите оставшуюся часть строки (после 2 новых строк).Допустим, предыдущая формула была сохранена в столбце таблицы с именем Start of Name.Тогда вторая формула будет иметь вид:

=MID([@Text],[@[Start of Name]],LEN([@Text]))

Обратите внимание, что мы используем длину всего текста, которая по определению больше, чем нам нужно.Однако это не проблема, поскольку Excel возвращает меньшее значение между последним аргументом MID и фактической длиной текста.

Как только мы получим текст с начала имени, нам нужнорассчитать позицию 2-го пробела (там, где заканчивается имя).Чтобы сделать , что , нам нужно вычислить позицию первого пространства.Это похоже на то, как мы вычислили начало имени ранее (которое начинается после 2 новых строк).Нам нужна следующая функция:

=SEARCH(" ",[@[Rest of String]],SEARCH(" ",[@[Rest of String]])+1)-1

Итак, теперь мы знаем, где начинается имя (после 2 новых строк) и где оно заканчивается (после 2-го пробела).Предполагая, что эти числа хранятся в столбцах с именами Start of Name и To Second Space соответственно, мы можем использовать следующую формулу для получения имени:

=MID([@Text],[@[Start of Name]],[@[To Second Space]])

Это эквивалентно первой формуле: Разница в том, чтопервая формула не использует никаких «вспомогательных столбцов».

Конечно, если какая-либо ячейка не соответствует этому формату, вам не повезет.Использование формул Excel для разбора текста может быть привередливым и негибким.Например, если у кого-то есть отчество или инициалы с пробелами (например, PK Subban был PK Subban), или было Jr. или что-то еще, ваша работа будет намного сложнее.

Другой альтернативой является использование регулярных выражений для получения нужных вам данных.Я бы рекомендовал этот подробный ответ в качестве учебника для начинающих.Хотя у вас все еще есть те же проблемы с форматами имен.

Наконец, есть обязательные программисты Falsehoods, которые верят в имена как предупреждение против принятия любого стандартного формата имени.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...