Как формулой Excel вытащить текст в скобках
Далее будет приведена формула, позволяющая извлечь текст находящийся в круглых скобках, но в начале хотелось бы подчеркнуть, что Вы находитесь на сайте, основное назначение которого помощь в изучении Excel как «с нуля» так и продвинутый уровень. Обучение, советы, разъяснения формул и всего, что связано с Excel проводиться дистанционно по Skype.
Скорее всего, если Вы активно обрабатываете данные в Excel, а особенно разные списки, то у Вас возникала необходимость вытащить (извлечь) текст находящийся в скобках. Причем текстовых строк (ячеек) много, а текст в скобках находится иногда в начале, иногда в средине, а бывает, что вообще, в конце ячейки.
Применив формулу с этой страницы, Вы избавитесь от ручного труда и Вам не придется копировать и вставлять каждый фрагмент по отдельности. Формула реально сэкономит Вам массу сил и времени.
С помощью этой формулы можно извлечь текст (любую последовательность символов), находящийся между открывающейся и закрывающейся скобками.
Формула позволяющая извлечь текст из скобок
=ПСТР(B2;1+ПОИСК(«(«;B2);ПОИСК(«)»;B2)-ПОИСК(«(«;B2)-1)
Комментарии:
— «обрабатываемый» текст должен находиться в определенной ячейке (в примере это яч. B2)
— если в ячейке B2 не будет открывающей и закрывающей скобки, то формула вернет значение ошибки #ЗНАЧ!
— если в яч. B2 будет больше одной открывающей и/или закрывающей скобки, то формула вытащит все то, что находится между первой (слева-направо) открывающей скобкой и первой закрывающей скобкой
Пример текста (это афоризм, а в скобках указан автор)
Чтобы победить, надо ожидать, что победишь. (Ричард Бах)
и результат (формула извлекла текст из скобок)
Ричард Бах
Несмотря на то, что эта формула очень полезная и востребованная, но она может не учитывать ряд специфических нюансов. Например, может потребоваться достать из скобок не только текст, который находится между первой парой скобок, но и текст, находящийся во второй паре скобок или же Вам, наоборот, необходимо оставить только то, что не в скобках..
Все решения со всеми нюансами по объективным причинам выложить невозможно. Остались вопросы или формула не делает то, что Вам нужно? Оставьте сообщение в нижней части страницы, или обратитесь за помощью по программе Excel.
ExcelSkype.Ru – единственный сайт в русскоязычном Internet специализирующийся на дистанционном консультировании и обучении Excel. Помощь или обучение производится через Skype. Все контакты ТУТ.
В этом учебном материале по Excel мы рассмотрим примеры того, как извлечь текст между круглыми скобками.
Основная формула
=ПСТР(текст;ПОИСК(«(«;текст)+1;ПОИСК(«)»;текст)-ПОИСК(«(«;текст)-1) |
Описание
Для выделения текста между скобками, фигурными скобками, скобками и т.д. Можно использовать формулу, основанную на функции ПСТР, с помощью функции ПОИСК. В показанном примере формула C5 имеет следующий вид:
=ПСТР(B5;ПОИСК(«(«;B5)+1;ПОИСК(«)»;B5)-ПОИСК(«(«;B5)-1)+0 |
Пояснение
В основе этой формулы лежит функция ПСТР, которая извлекает из текста определенное количество символов, начиная с определенного места. Чтобы выяснить, с чего начать извлечение текста, мы используем это выражение:
Это находит левые круглые скобки и добавляет 1, чтобы получить позицию первого символа внутри круглых скобок. Чтобы выяснить, сколько символов нужно извлечь, мы используем это выражение:
ПОИСК(«)»;B5)-ПОИСК(«(«;B5)-1 |
Это определяет местонахождение вторых скобок в тексте и вычитает позицию первых скобок (без единицы), чтобы получить общее количество символов, которые необходимо извлечь. Используя эту информацию, ПСТР извлекает только текст внутри круглых скобок.
Наконец, поскольку в этом конкретном примере мы хотим получить число в качестве окончательного результата, мы добавляем ноль к текстовому значению, возвращаемому ПСТР:
Эта математическая операция заставляет Excel преобразовывать текстовые значения в числа. Если вам не нужно число в конце, этот шаг не требуется.
Пытаюсь вставить две формулы в одну, чтобы извлечь из текста цифры заключенные в скобки.
Эта формула извлекает цифры после скобки и далее лишнее.
=ПСТР(A4;ПОИСК(«(«;A4;1)+1;50)
Эта дополнительная формула убирает лишнее, но как эти формулы объединить в одну?
=ПОДСТАВИТЬ(C4;»)»;»»;1)*1
См файл.
=--ПСТР(A3;ПОИСК("(";A3)+1;ПОИСК(")";A3)-ПОИСК("(";A3)-1)
=-ПСТР(ЛЕВБ(A3;ПОИСК(")";A3));ПОИСК("(";A3);9)
Спасибо, помогающим!
Мне тоже удалось самостоятельно создать формулу, недостаток она больше ваших по длине.
=ПОДСТАВИТЬ(ПСТР(A3;ПОИСК(«(«;A3;1)+1;50);ПСТР(A3;ПОИСК(«)»;A3;1);50);»»)*1
Уважаемый gling, пожалуйста проверьте свою формулу ещё раз.
А что её проверять, в ней что то не так? Вопрос был
Цитироватькак эти формулы объединить в одну?
, на него и отвечал. А правильные формулы вам предложили и без меня., Могу прописать почти то же самое
=ПСТР(ЛЕВСИМВ(A3;ПОИСК(")";A3)-1);ПОИСК("(";A3)+1;9)
При том в файле вы просите
ЦитироватьИзвлекаться должны только цифры в скобках
не числа, значит и преобразовывать в числовой формат их не обязательно было. Если нужно было извлечь число из скобок, тогда не надо было писать про две формулы в одну и не цифры, а числа извлекать. Молодцы помогающие, они обладают даром экстрасенсов и прочитали ваши мысли, а я вот не угадал. Ничего в следующий раз и у меня получится.)))
Хорошо, конечно уметь писать формулы с функциями!!! А попроще не пробовали — 2 раза текст по столбцам — разделитель — сначала (, а потом ), а что не нужно — пропустить.
Проще, так проще, Наташа
ctrl+h — меняем на пусто «*(«, потом «)*». Сразу получаем цифры в столбце.
Я, как всегда, чертовски адекватен… Email: kuklp60@gmail.com WM Z206653985942, R334086032478, U238399322728, E332314026771
=ПСТР(Текст; Поиск_первой_позиции(«(«:Текст)+1,Поиск_второй _позиции(«)»;Тектс)-Поиск_первой_позиции(«(«;Тектс)-1)
Чтобы извлечь текст между скобками, вы можете использовать формулу, основанную на функции ПСТР () и функции ПОИСК ().
В показанном примере, формула в E7:
=ПСТР(D7;ПОИСК(«(«;D7)+1;ПОИСК(«)»;D7)-ПОИСК(«(«;D7)-1)
Основой этой формулы является функция ПСТР () , которая извлекает определенное количество символов из текста, начиная с определенного места.
Найти «Поиск_первой_позиции» с какой позиции начинать извлечение текста, мы используем это выражение:
ПОИСК(«(«;D7)+1
Начало позиции: 14+1=15
Функция ПОИСК () находит позицию скобку в тексте, а затем уберем саму скобку с первой позиции прибавив единицу.
Для нахождения «Поиск_второй _позиции» второй скобки, мы используем это выражение:
ПОИСК(«)»;D7)-1
Начало второй позиции: 18-1=17
Функция ПОИСК () находит позицию скобки в тексте, а затем уберем саму скобку с последней позиции отняв единицу.
Чтобы получить общее количество символов, которые должны быть извлечены надо найти разницу между Второй позицией и первой получив, количество символов для извлечения как в выражении:
ПОИСК(«)»;D7)-ПОИСК(«(«;D7)-1)
Вторая позиция, отнять первую, получим количество символов для извлечения
17 — 14 =3 2,4
И соберем всю формулу как в ячейке E7:
=ПСТР(D7;ПОИСК(«(«;D7)+1;ПОИСК(«)»;D7)-1-ПОИСК(«(«;D7))
=ПСТР(Текст; позиция первая скобка; позиция Вторая скобка)
=ПСТР(Текст;14+1;17-1-14)
Можно прибавить ноль в конце и получить в место текстового значения цифровое.
=ПСТР(D7;ПОИСК(«(«;D7)+1;ПОИСК(«)»;D7)-1-ПОИСК(«(«;D7))+0
Mikhail76 Пользователь Сообщений: 76 |
Добрый день. |
Msi2102 Пользователь Сообщений: 3134 |
Mikhail76, Покажите в примере как должно получиться |
Mikhail76 Пользователь Сообщений: 76 |
#3 16.06.2022 14:07:59
Во вложении. Прикрепленные файлы
|
||
surkenny Пользователь Сообщений: 2365 |
#4 16.06.2022 14:18:31 В PQ:
Прикрепленные файлы
|
||
memo Пользователь Сообщений: 1422 Excel 2013/2016 |
#5 16.06.2022 14:22:10 Вариант формулой. (Нужен офис не ниже 2013)
Прикрепленные файлы
|
||
Mikhail76 Пользователь Сообщений: 76 |
#6 16.06.2022 14:47:20
Добрый день. В исходнике нужно перенести данные из ячейки М1279 в L1279. Как будет выглядеть формула? Впервые с такой сталкиваюсь. |
||||
Jack Famous Пользователь Сообщений: 10846 OS: Win 8.1 Корп. x64 | Excel 2016 x64: | Browser: Chrome |
Mikhail76, макрос подойдёт? Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄ |
Msi2102 Пользователь Сообщений: 3134 |
#8 16.06.2022 15:27:40 Если офис 2019 и выше:
Прикрепленные файлы
Изменено: Msi2102 — 16.06.2022 15:42:20 |
||
Jack Famous Пользователь Сообщений: 10846 OS: Win 8.1 Корп. x64 | Excel 2016 x64: | Browser: Chrome |
#9 16.06.2022 16:43:51
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄ |
|
Mikhail76 Пользователь Сообщений: 76 |
|
Msi2102 Пользователь Сообщений: 3134 |
#11 16.06.2022 18:13:29
Тогда ещё вариант. Вводится как массивная
PS: хотя уже море вариантов на регулярках есть Прикрепленные файлы
|
||||
Jack Famous Пользователь Сообщений: 10846 OS: Win 8.1 Корп. x64 | Excel 2016 x64: | Browser: Chrome |
Msi2102, строковые быстрее регулярок в этом случае, если что моей теме Андрей VG как раз сравнивал скорости (и функция на строковых — его) Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄ |
Msi2102 Пользователь Сообщений: 3134 |
#13 17.06.2022 10:22:55
Я не про скорость, просто есть куча готовых и в принципе более универсальных вариантов, нужно было только поискать
Прикрепленные файлы
|
||||
Jack Famous Пользователь Сообщений: 10846 OS: Win 8.1 Корп. x64 | Excel 2016 x64: | Browser: Chrome |
#14 17.06.2022 10:51:31
я не могу в качестве кода использовать то, принцип работы чего я не понимаю (и при это могу сделать понятный мне аналог). Надо сидеть и разбираться, что там имел ввиду автор и зачем. Msi2102, вот вы, например, почему System.Collections.ArrayList вместо словарей и вообще зачем он тут ведь задача отбора уникальных не стояла?… Вот берёшь такое «готовое» решение, а потом думаешь, а почему оно работает не так, как ты хотел… У меня же принцип простой: ищем первый разделитель, после него ищем второй. Если какой-то из низ не найден, то выходим. Если оба найдены, то берём всё, что между ними и повторяем. ТС не указал нюанс, что ему на самом деле не ВСЁ, что между скобок нужно, а только коды по понятной маске. Добавил в функцию возможность отфильтровать по маске. Или как в соседней теме: готовое решение от ноунейма, который просто ошибся и вместо кириллической «р» (эр) латинскую «p» (пи) написал. А потом очень долго можно сидеть и думать, почему не сходится… Изменено: Jack Famous — 17.06.2022 10:57:10 Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄ |
||
Msi2102 Пользователь Сообщений: 3134 |
#15 17.06.2022 11:24:23
Вы наверное неправильно поняли фразу в моем сообщении.
Я имел ввиду, что сам автор мог получше поискать
Вначале я написал на Scripting.Dictionary (кстати он быстрее), но на работе была тошниловка и решил добавить немного плюшек . К тому же поиска по маске тоже не требовалось и тем не менее Вы её добавили.
А что там может не так работать?
|
||||||||||
Jack Famous Пользователь Сообщений: 10846 OS: Win 8.1 Корп. x64 | Excel 2016 x64: | Browser: Chrome |
#16 17.06.2022 11:37:44
в примере ТС показал желаемый результат и это не ВСЕ значения из скобок, а только коды. У меня реализованы оба варианта — так универсальнее, в зависимости от потребности.
например, оно отбирает уникальные, а об этом ничего сказано не было. Тем более, что у вас это не опция (как у меня с маской), а единственный вариант работы функции.
как минимум, из-за отбора уникальных, это уже не так. К тому же, при вложенных скобках, наши варианты могут повести себя по-разному (не тестил, но так кажется)
плюшка в виде заведомо более медленного и не менее сложного [чем словари] варианта P.S.: If Not r <= 1 Then вместо If r или If r<>0 — тоже «для разнообразия»?)) Изменено: Jack Famous — 17.06.2022 11:38:21 Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄ |
||||||||
Msi2102 Пользователь Сообщений: 3134 |
#17 17.06.2022 13:11:13
Почему, напишите так
и он выдаст все варианты
Нет, просто удаляю вариант если Внутри скобок пустота «()», если Ваш вариант, то при наличии () будут пустые ячейки
Оно конечно медленнее, но на сколько, сущие пустяки К тому же у Вас тоже есть ReDim Preserve ещё нужно посмотреть, что будет быстрее Изменено: Msi2102 — 17.06.2022 14:28:31 |
||||||||