Уважаемые пользователи Голос!
Сайт доступен в режиме «чтение» до сентября 2020 года. Операции с токенами Golos, Cyber можно проводить, используя альтернативные клиенты или через эксплорер Cyberway. Подробности здесь: https://golos.io/@goloscore/operacii-s-tokenami-golos-cyber-1594822432061
С уважением, команда “Голос”
GOLOS
RU
EN
UA
tdots
6 лет назад

Извлечение слов из текста в Excel

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

Важное замечание!
Перед применением описанных ниже функций убедитесь, что текст не содержит лишних пробелов (то есть пробелов в начале строки, в конце строки, двойных, тройных и т.д.). Убрать лишние пробелы можно формулой =СЖПРОБЕЛЫ(А1), где А1 - ячейка с текстом. Полученный результат можно скопировать и вставить значениями в исходную ячейку и в дальнейшем работать с "чистым" текстом. 
Задача 1. Подсчет количества слов в тексте

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

Итак, слова в тексте отделены друг от друга пробелами. Пробелов всегда на 1 меньше, чем слов (действительно, между двумя словами - один пробел, между тремя - два и т.д.). Значит, достаточно подсчитать пробелы и прибавить к ним единицу, чтобы узнать число слов в ячейке. 

В Excel есть замечательные функции ДЛСТР() и ПОДСТАВИТЬ(). Первая подсчитывает количество символов в указанной ячейке, а вторая умеет заменять указанный символ на любой другой или на пусто (обозначается как двойные кавычки без пробела между ними ""). 

Функция ПОДСТАВИТЬ() имеет 4 аргумента:

1) Ячейка с текстом

2) То, что нужно заменить (указывается в кавычках)

3) То, на что нужно заменить (указывается в кавычка)

4) Необязательный аргумент - номер вхождения заменяемого текста. То есть, если в тексте 4 пробела, мы можем заменить только тот, номер которого укажем. Если аргумент опущен - заменяются все символы. 

Первой функцией мы можем узнать длину текста в ячейке. Второй функцией мы можем заменить все пробелы в тексте на "" (пусто), то есть удалить. Если после удаления мы подсчитаем длину текста еще раз, то она сократится ровно на число удаленных пробелов. Таким образом, чтобы подсчитать пробелы, нужна формула:

=ДЛСТР(A1)-ДЛСТР(ПОДСТАВИТЬ(A1;" ";""))

Прибавим к ней единицу - и получим число слов в ячейке.

=ДЛСТР(A1)-ДЛСТР(ПОДСТАВИТЬ(A1;" ";""))+1

 Имейте в виду, что такой способ подсчета принимает символы, отделенные от слов пробелом, за отдельные слова. Например, тире, обрамленное пробелами, также будет считаться отдельным словом. Избежать этого можно, если перед подсчетом пробелов убрать функцией ПОДСТАВИТЬ() лишние знаки из ячейки.  

 

Задача 2. Извлечение первого слова из текста

Раз слова отделены пробелами, то первое слово от второго отделено первым в тексте пробелом. Значит для извлечения первого слова, нам нужно найти первый пробел и извлечь из текста всё, что идет до него. 

Найти символ в тексте поможет функция НАЙТИ(). У нее есть 3 аргумента:

1) Искомый текст;

2) Текст, в котором ищем;

3) С какого символа начать поиск (необязательный, если опущен - функция ищет с самого начала).

Результатом работы функции является позиция первого символа найденного текста в строке. Например, формула =НАЙТИ("плюс";"Один плюс один") вернет в результате число 6 (именно с этой позиции начинается искомое слово "плюс"). Если в строке несколько раз содержится искомое слово, то вернется результат для первого вхождения.  

Функция НАЙТИ работает с учетом регистра и без подстановочных знаков. Если нужно их использовать, или не учитывать регистр - есть аналогичная функция ПОИСК()

Теперь мы можем найти позицию первого пробела

=НАЙТИ(" ";A1)

Извлечь символы до пробела поможет функция ЛЕВСИМВ. Ей нужно указать текст, а также число символов, которое нужно извлечь начиная с первого. Если найденный пробел, например, 6-ой символ, то нам нужно извлечь 6-1=5. Формула для извлечения первого слова:

=ЛЕВСИМВ(A1;НАЙТИ(" ";A1)-1)

Если в строке одно слово (то есть нет пробела между первым и вторым словом), данная формула вернет ошибку. Чтобы этого избежать, нужно добавить к ней функцию ЕСЛИОШИБКА()

=ЕСЛИОШИБКА(ЛЕВСИМВ(A1;НАЙТИ(" ";A1)-1);A1)

Теперь формула корректно сработает для любого числа слов в ячейке. 

 

Задача 3. Извлечение последнего слова из текста

Извлечь последнее слово несколько труднее, так как функции поиска текста в ячейке работают только слева направо. Логика формулы будет такая:

  • подсчитаем, сколько в ячейке пробелов, воспользовавшись приемом из Задачи 1. 
=ДЛСТР(A1)-ДЛСТР(ПОДСТАВИТЬ(A1;" ";""))
  • с помощью функции ПОДСТАВИТЬ заменим последний пробел в тексте на символ, которого там точно нет (например, "*" или "$"). Чтобы заменить именно последний пробел, добавим в качестве необязательного аргумента формулу из предыдущего пункта (то есть число пробелов, так как оно равно номеру последнего пробела)
=ПОДСТАВИТЬ(A1;" ";"*";ДЛСТР(A1)-ДЛСТР(ПОДСТАВИТЬ(A1;" ";"")))
  • теперь, когда последний пробел заменен на "*", мы можем узнать его позицию с помощью функции НАЙТИ(). В качестве текста, в котором ищем, укажем предыдущую формулу
=НАЙТИ("*";ПОДСТАВИТЬ(A1;" ";"*";ДЛСТР(A1)-ДЛСТР(ПОДСТАВИТЬ(A1;" ";""))))
  • если из общей длины текста мы вычтем найденную позицию звездочки, то получим число символов после звездочки (то есть длину последнего слова в ячейке)
=ДЛСТР(A1)-НАЙТИ("*";ПОДСТАВИТЬ(A1;" ";"*";ДЛСТР(A1)-ДЛСТР(ПОДСТАВИТЬ(A1;" ";""))))
  • теперь, зная длину последнего слова, мы можем вытащить его из ячейки с помощью функции ПРАВСИМВ(). Она работает точно так же, как ЛЕВСИМВ(), но извлекает символы не с начала, а с конца строки. В качестве  количества извлекаемых символов, укажем предыдущую формулу. 

Итоговая формула:

=ПРАВСИМВ(A1;ДЛСТР(A1)-НАЙТИ("*";ПОДСТАВИТЬ(A1;" ";"*";ДЛСТР(A1)-ДЛСТР(ПОДСТАВИТЬ(A1;" ";"")))))

Как и в предыдущей задаче, можно обернуть в ЕСЛИОШИБКА, чтобы верно работало с ячейками, в которых только 1 слово. 

=ЕСЛИОШИБКА(ПРАВСИМВ(A1;ДЛСТР(A1)-НАЙТИ("*";ПОДСТАВИТЬ(A1;" ";"*";ДЛСТР(A1)-ДЛСТР(ПОДСТАВИТЬ(A1;" ";"")))));A1)

Если Вас не пугает VBA и макросы, то есть гораздо более изящное решение. Добавьте в модуль книги (можно в личную книгу макросов) следующий код:

Function РЕВЕРС(str As String)

РЕВЕРС = StrReverse(str)

End Function

Это макрофункция. Теперь, используя ее, можно отразить текст зеркально, извлечь первое слово, как в Задаче 2 и отразить его обратно. Формула:

=ЕСЛИОШИБКА(РЕВЕРС(ЛЕВСИМВ(РЕВЕРС(A1);НАЙТИ(" ";РЕВЕРС(A1))));A1)

Берите на вооружение, если любите макросы.  

 

Задача 4. Извлечение n-ного слова из текста

Самый интересный пример. Для решения подобной задачи нужно применить фантазию. Разберем решение поэтапно.

Помимо уже использовавшихся в статье функций, нам понадобятся еще 2:

1) ПОВТОР(). Умеет повторять указанный текст указанное число раз.

2) ПСТР(). Имеет 3 аргумента: 

  • исходный текст; 
  • позиция, с которой нужно начать извлечение; 
  • число символов, которые нужно извлечь. 

Теперь мы вооружены всем нужным инструментарием. Приступаем:

  • Для начала воспользуемся функцией ПОВТОР(), чтобы вместо 1 пробела в тексте вставить число пробелов, равное длине исходного текста. Количество повторений узнаем через уже известную функцию ДЛСТР(). Итак, формула:
=ПОДСТАВИТЬ(A1;" ";ПОВТОР(" ";ДЛСТР(A1)))
  • Теперь каждое слово отделено друг от друга числом символов, равным общей длине строки. Чтобы извлечь слово под номером n, нам нужно узнать позицию какого-нибудь пробела между словом n и n-1 в обработанном удлиненном тексте. Это может сделать формула ниже (+1 в ней нужно для правильного поиска первого слова): 
=ДЛСТР(A1)*(n-1)+1

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

 

  • Теперь мы может извлечь из найденной позиции число символов ДЛСТР(A1) (на рисунке - m) и извлеченный текст всегда будет захватывать нужное нам слово целиком (с некоторым количеством предшествующих и последующих пробелов)
=ПСТР(ПОДСТАВИТЬ(A1;" ";ПОВТОР(" ";ДЛСТР(A1)));ДЛСТР(A1)*(n-1)+1;ДЛСТР(A1))
  • Осталось избавиться от лишних пробелов функцией СЖПРОБЕЛЫ()
=СЖПРОБЕЛЫ(ПСТР(ПОДСТАВИТЬ(A1;" ";ПОВТОР(" ";ДЛСТР(A1)));ДЛСТР(A1)*(n-1)+1;ДЛСТР(A1)))

Не забудьте в формуле заменить n на номер извлекаемого слова или ссылку на ячейку с этим номером. 


Задача 5. Извлечение имя файла из полного пути к нему

Напоследок, небольшой практический пример. Есть некоторый список файлов с указанием полного пути к ним. Нужно из всех ссылок собрать только имена файлов. 

Как мы знаем, директории в ссылках отделены друг от друга символом "\". После последнего такого символа расположено нужное нам имя файла. Похоже на задачу с извлечением последнего слова? Только вместо пробелов теперь символ обратной косой черты. 

Берем формулу из задачи 3 и заменяем в ней пробелы на "\".

Получим следующую формулу:

=ЕСЛИОШИБКА(ПРАВСИМВ(A1;ДЛСТР(A1)-НАЙТИ("*";ПОДСТАВИТЬ(A1;"\";"*";ДЛСТР(A1)-ДЛСТР(ПОДСТАВИТЬ(A1;"\";"")))));A1)

Вставляем в ячейку и вуаля! Имя файла извлечено. 

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

Поддержать наш проект и его дальнейшее развитие можно вот здесь.

аши вопросы по статье можете задавать через нашего бота обратной связи в Telegram: @ExEvFeedbackBot

С уважением, команда tDots.ru 

267
0.010 GOLOS
На Golos с December 2017
Комментарии (0)
Сортировать по:
Сначала старые