Polytech-soft.com

ПК журнал
4 просмотров
Рейтинг статьи
1 звезда2 звезды3 звезды4 звезды5 звезд
Загрузка...

Как выделить часть текста в excel

Как выделить произвольное слово в ячейке в Excel?

Узнаем как можно выделить произвольное слово в ячейке (первое, последнее или n-ое по порядку) в Excel в двух вариациях: в виде сложной формулы и пользовательской функции.

Приветствую всех, уважаемые читатели блога TutorExcel.Ru.

Задача выделения конкретных (по порядку) слов из предложения имеет достаточно широкое применение при структурировании и анализе данных, например, выделение части артикула из кода товара, имени или фамилии из полной записи ФИО и т.д.

Если данные представлены в однородном виде (к примеру, нужно выделить первое/второе/…/последнее слово в каждой ячейке столбца, где все данные содержат одинаковое количество слов), то можно воспользоваться инструментом Текст по столбцам и получить разделенные слова в соседних столбцах.


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

Изучим более универсальный способ, который будет работать для любого типа данных.
Однако перед решением задачи сначала найдем ответ на достаточно простой и очевидный вопрос.
Что в предложениях отделяет одно слово от другого?

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

Пойдем по порядку.

Выделение первого слова в ячейке в Excel

C помощью функции НАЙТИ найдем позицию первого пробела, а затем воспользуемся функцией ЛЕВСИМВ, которая возвращает указанное количество символов с начала текста (как раз до первого найденного пробела):


Вместо ЛЕВСИМВ можно воспользоваться функцией ПСТР, которая более универсальна и позволяет вернуть заданное количество символов начиная с указанной позиции, а не только с начала строки (в данном случае с 1, так как мы выделяем именно первое слово):


Недостаток такого способа в том, что если в ячейке содержится ровно 1 слово, то она вернет значение ошибки, так как пробелов в нем нет:


Поэтому дополнительно добавим проверку на ошибку — в случае если во фразе нет пробелов, то возвращаем исходный текст:

Выделение последнего слова в ячейке в Excel

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

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

После чего функцией ПРАВСИМВ (возвращает указанное количество символов с конца текста) выделяем все символы от специального символа (в данном случае функцией НАЙТИ ищем позицию символа #) до конца предложения:


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

Теперь перейдем к самому сложному варианту — выделению произвольного по порядку слова.

Выделение n-го слова в ячейке в Excel

Воспользуемся следующим приемом — продублируем все пробелы между словами очень большое количество раз (заведомо больше длины фразы, например, 1 000 раз), после чего функцией ПСТР выделяем 1 000 символов умноженные на n (номер нужного слова), а затем функцией ПРАВСИМВ возвращаем только последнюю 1 000 символов (в котором как раз содержится искомое слово).

Далее удаляем все лишние пробелы и получаем:


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

Если же мы хотим достать другое слово, то вместо *4 в примере выше, нужно просто поставить другой номер (1 для первого слова, 2 для второго и т.д.), а если указанный номер больше количества слов в предложении, то в качестве ответа будет получено последнее слово.

Читать еще:  Операция суммирования в excel

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

Пользовательская функция

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

Перейдем в редактор Visual Basic (быстрый переход комбинацией клавиш Alt + F11), создаём новый модуль (Insert -> Module) и вставляем туда код функции:

Как вытащить число или часть текста из текстовой строки в Excel

Сегодня мы с вами рассмотрим весьма распространённую ситуацию, возникающую в работе экономиста связанную с анализом данных.

Как правило, экономисту поручают проведение всевозможных видов анализа на основании бухгалтерских данных, группировку их специальным образом, получение дополнительных срезов, отличающихся от имеющихся бухгалтерских аналитик и т.д.

Речь здесь уже идет о преобразовании данных бухгалтерского учета в данные управленческого учета. Мы не будем говорить о необходимости сближения бухгалтерского и управленческого учета, или, по крайней мере, получения нужных срезов и аналитик в имеющихся учетных программах в автоматическом режиме. К сожалению, зачастую экономисту приходиться «перелопачивать» огромные объемы информации вручную.

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

Рассмотрим конкретную ситуацию. Вам нужно подготовить отчёт в разрезе, который нельзя получить в бухгалтерской программе. Вы выгрузили в Excel отчет по проводкам (оборотно-сальдовую ведомость, карточку счета и т.д. – не суть важно) и видите, что для нормальной фильтрации данных или создания сводной таблицы для анализа данных у вас не хватает одного признака (аналитики, разреза, субконто и т.д.).

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

Если в таблице находиться десять операций, то проще проставить признак вручную в соседнем столбце, однако если записей несколько тысяч, то это уже проблематично.

Вся трудность, в том чтобы извлечь код из текстовой строки.

Возможна ситуация, когда этот код находиться всегда в начале текстовой строки или всегда в конце.

В этом случае, мы можем извлекать код или часть текста при помощи функций ЛЕВСИМВ и ПРАВСИМВ, которые возвращают заданное количество знаков соответственно с начала строки или с конца строки.

Текст – обязательный аргумент. Текстовая строка, содержащая символы, которые требуется извлечь.

Количество_знаков — необязательный аргумент. Количество символов, извлекаемых функцией ЛЕВСИМВ (ПРАВСИМВ).

«Количество_знаков» должно быть больше нуля или равно ему. Если «количество_знаков» превышает длину текста, функция ЛЕВСИМВ (ПРАВСИМВ) возвращает весь текст. Если значение «количество_знаков» опущено, оно считается равным 1.

Зная количество знаков, которые содержит код, мы легко извлечем необходимые символы.

Сложнее если нужные нам символы находятся в середине текста.

Извлечь число, текст, код и т.д. из середины текстовой строки может функция ПСТР, возвращает заданное число знаков из строки текста, начиная с указанной позиции.

=ПСТР(текст; начальная_позиция; количество_знаков)

Текст – обязательный аргумент. Текстовая строка, содержащая символы, которые требуется извлечь.

Начальная_позиция – обязательный аргумент. Позиция первого знака, извлекаемого из текста. Первый знак в тексте имеет начальную позицию 1 и так далее.

Количество_знаков – обязательный аргумент. Указывает, сколько знаков должна вернуть функция ПСТР.

Самый простой случай – если код находиться на одном и том же месте от начала строки. Например, у нас наименование документа начинается всегда одинаково «Поступление товаров и услуг ХХ ….»

Читать еще:  Не удаляются дубликаты в excel

Наш признак «ХХ» — код филиала начинается с 29 знака и имеет 2 знака в своем составе.

В нашем случае формула будет иметь вид:

Однако не всегда все так безоблачно. Предположим, мы не можем со 100% уверенностью сказать, что наименование документа у нас во всех строках будет начинаться одинаково, но мы точно знаем, что признак филиала закодирован в номере документа следующим образом:

Первый символ – первая буква в наименовании филиала, второй символ – это буква Ф (филиал) и далее следует пять нулей «00000». Причем меняется только первый символ — первая буква наименования филиала.

Обладая такими существенными знаниями, мы можем смело использовать функцию ПОИСК, которая находит нужный нам текст в текстовой строке и возвращают начальную позицию нужного нам текста внутри всей текстовой строки.

=ПОИСК(искомый_текст; текст_для_поиска; [нач_позиция])

Искомый_текст – обязательный аргумент. Текст, который требуется найти.

Просматриваемый_текст – обязательный аргумент. Текст, в котором нужно найти значение аргумента искомый_текст.

Нач_позиция – необязательный аргумент. Номер знака в аргументе просматриваемый_текст, с которого следует начать поиск.

Функция ПОИСК не учитывает регистр. Если требуется учитывать регистр, используйте функцию НАЙТИ.

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

Обозначив меняющийся первый символ знаком вопроса (?), мы можем записать итоговую формулу для выделения кода филиала в таком виде:

Эта формула определяет начальную позицию кода филиала в наименовании документа, а затем возвращает два знака кода, начиная с найденной позиции.

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

Microsoft Excel

трюки • приёмы • решения

Как извлечь слова из строки таблицы Excel

Формулы в этой статье полезны для извлечения слов из текста, содержащегося в ячейке. Например, вы можете создать формулу для извлечения первого слова в предложении.

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

Чтобы извлечь первое слово из строки, формула должна найти позицию первого символа пробела, а затем использовать эту информацию в качестве аргумента для функции ЛЕВСИМВ. Следующая формула делает это: =ЛЕВСИМВ(A1;НАЙТИ(» «;A1)-1) .

Эта формула возвращает весь текст до первого пробела в ячейке A1. Однако у нее есть небольшой недостаток: она возвращает ошибку, если текст в ячейке А1 не содержит пробелов, потому что состоит из одного слова. Несколько более сложная формула решает проблему с помощью новой функции ЕСЛИОШИБКА, отображая все содержимое ячейки, если произошла ошибка:
=ЕСЛИОШИБКА(ЛЕВСИМВ(A1;НАЙТИ(» «;A1)-1);A1) .

Если вам нужно, чтобы формула была совместима с более ранними версиями Excel, вы не можете использовать ЕСЛИОШИБКА. В таком случае придется обойтись функцией ЕСЛИ и функцией ЕОШ для проверки на ошибку:
=ЕСЛИ(ЕОШ(НАЙТИ(» «;A1));A1;ЛЕВСИМВ(A1;НАЙТИ(» «;A1)-1))

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

Извлечение последнего слова строки — более сложная задача, поскольку функция НАЙТИ работает только слева направо. Таким образом, проблема состоит в поиске последнего символа пробела. Следующая формула, однако, решает эту проблему. Она возвращает последнее слово строки (весь текст, следующий за последним символом пробела):
=ПРАВСИМВ(A1;ДЛСТР(A1)-НАЙТИ(«*»;ПОДСТАВИТЬ(A1;» «;»*»;ДЛСТР(A1)-ДЛСТР(ПОДСТАВИТЬ(A1;»»;»»)))))

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

Следующая формула совместима со всеми версиями Excel:
=ЕСЛИ(ЕОШ(НАЙТИ(» «;A1));A1;ПРАВСИМВ(A1;ДЛСТР(A1)-НАЙТИ(«*»;ПОДСТАВИТЬ(A1;»»;»*»;ДЛСТР(A1)-ДЛСТР(ПОДСТАВИТЬ(A1;» «;»»))))))

Извлечение всего, кроме первого слова строки

Следующая формула возвращает содержимое ячейки А1, за исключением первого слова:
=ПРАВСИМВ(A1;ДЛСТР(A1)-НАЙТИ(» «:A1;1)) .
Если ячейка А1 содержит текст 2008 Operating Budget, то формула вернет Operating Budget.

Формула возвращает ошибку, если ячейка содержит только одно слово. Следующая версия формулы использует функцию ЕСЛИОШИБКА, чтобы можно было избежать ошибки; формула возвращает пустую строку, если ячейка не содержит более одного слова:
=ЕСЛИОШИБКА(ПРАВСИМВ(A1;ДЛСТР(A1)-НАЙТИ(» «;A1;1));»»)

Читать еще:  Подвисает картинка при просмотре видео

А эта версия совместима со всеми версиями Excel:
=ЕСЛИ(ЕОШ(НАЙТИ(» «;A1));»»;ПРАВСИМВ(A1;ДЛСТР(A1)-НАЙТИ(» «;A1;1)))

Как выделить часть текста в excel

Модератор форума: _Boroda_, Manyasha, SLAVICK, китин
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Выделение заданного фрагмента текста в ячейке (Макросы Sub)

Выделение заданного фрагмента текста в ячейке

igrtskДата: Пятница, 29.11.2013, 10:11 | Сообщение № 1

Инструктор по применению лосей в кавалерийских частях РККА

Ответить

nilemДата: Пятница, 29.11.2013, 10:42 | Сообщение № 2

[/vba]
в файле пишем нужное слово в яч. Е3 и нажимаем зел. кнопку

ПС ну как там лоси поживают?

[/vba]
в файле пишем нужное слово в яч. Е3 и нажимаем зел. кнопку

ПС ну как там лоси поживают? nilem

[/vba]
в файле пишем нужное слово в яч. Е3 и нажимаем зел. кнопку

ПС ну как там лоси поживают? Автор — nilem
Дата добавления — 29.11.2013 в 10:42

igrtskДата: Пятница, 29.11.2013, 10:58 | Сообщение № 3

Спасибо!
Интересный вариант. Надо его осмыслить.

P.S. Лоси в порядке. Передают привет!

Спасибо!
Интересный вариант. Надо его осмыслить.

P.S. Лоси в порядке. Передают привет! igrtsk

Инструктор по применению лосей в кавалерийских частях РККА

Ответить

Спасибо!
Интересный вариант. Надо его осмыслить.

P.S. Лоси в порядке. Передают привет! Автор — igrtsk
Дата добавления — 29.11.2013 в 10:58

СаняДата: Пятница, 29.11.2013, 11:08 | Сообщение № 4

не успел, но все же

Выделяем ячейки и выполняем проц. DoIt:
[vba]

200?’200px’:»+(this.scrollHeight+5)+’px’);»> Option Explicit
Private mavPunct()

Sub DoIt()
mavPunct = Array(» «, «,», «.», «;», «:», «!»)
‘ символы, к-рые могут идти после искомого слова _
нужно, чтобы искть ТОЛЬКО целые слова

Dim c As Range
For Each c In Selection
BoldWord c, «украл»
Next c
End Sub

Dim lLen As Long
lLen = Len(sWord)

Dim sLS As String
Do
lPos = InStr(lPos, rngIn.Value, sWord)
If lPos = 0 Then Exit Do

sLS = Mid$(rngIn.Value, lPos + lLen, 1)
If bSymbolIsValid(sLS) Then
rngIn.Characters(lPos, lLen).Font.Bold = True
End If

lPos = lPos + lLen
Loop
End Sub

Function bSymbolIsValid(sS As String) As Boolean
Dim i As Integer
For i = LBound(mavPunct) To UBound(mavPunct)
If sS = mavPunct(i) Then
bSymbolIsVal > Exit For
End If
Next i
End Function
‘=================================================================

не успел, но все же

Выделяем ячейки и выполняем проц. DoIt:
[vba]

200?’200px’:»+(this.scrollHeight+5)+’px’);»> Option Explicit
Private mavPunct()

Sub DoIt()
mavPunct = Array(» «, «,», «.», «;», «:», «!»)
‘ символы, к-рые могут идти после искомого слова _
нужно, чтобы искть ТОЛЬКО целые слова

Dim c As Range
For Each c In Selection
BoldWord c, «украл»
Next c
End Sub

Dim lLen As Long
lLen = Len(sWord)

Dim sLS As String
Do
lPos = InStr(lPos, rngIn.Value, sWord)
If lPos = 0 Then Exit Do

sLS = Mid$(rngIn.Value, lPos + lLen, 1)
If bSymbolIsValid(sLS) Then
rngIn.Characters(lPos, lLen).Font.Bold = True
End If

lPos = lPos + lLen
Loop
End Sub

Function bSymbolIsValid(sS As String) As Boolean
Dim i As Integer
For i = LBound(mavPunct) To UBound(mavPunct)
If sS = mavPunct(i) Then
bSymbolIsVal > Exit For
End If
Next i
End Function
‘=================================================================

Сообщение не успел, но все же

Выделяем ячейки и выполняем проц. DoIt:
[vba]

200?’200px’:»+(this.scrollHeight+5)+’px’);»> Option Explicit
Private mavPunct()

Sub DoIt()
mavPunct = Array(» «, «,», «.», «;», «:», «!»)
‘ символы, к-рые могут идти после искомого слова _
нужно, чтобы искть ТОЛЬКО целые слова

Dim c As Range
For Each c In Selection
BoldWord c, «украл»
Next c
End Sub

Dim lLen As Long
lLen = Len(sWord)

Dim sLS As String
Do
lPos = InStr(lPos, rngIn.Value, sWord)
If lPos = 0 Then Exit Do

sLS = Mid$(rngIn.Value, lPos + lLen, 1)
If bSymbolIsValid(sLS) Then
rngIn.Characters(lPos, lLen).Font.Bold = True
End If

lPos = lPos + lLen
Loop
End Sub

Function bSymbolIsValid(sS As String) As Boolean
Dim i As Integer
For i = LBound(mavPunct) To UBound(mavPunct)
If sS = mavPunct(i) Then
bSymbolIsVal > Exit For
End If
Next i
End Function
‘=================================================================

Ссылка на основную публикацию
ВсеИнструменты 220 Вольт
Adblock
detector