Домашняя страница Undo Do New Save Карта сайта Обратная связь Поиск по форуму
МИР MS EXCEL - Гость.xls

Вход

Регистрация

Напомнить пароль

 

= Мир MS Excel/mid и find для выборки между заданных символов - Мир MS Excel

Старая форма входа
  • Страница 1 из 1
  • 1
Модератор форума: _Boroda_, китин  
mid и find для выборки между заданных символов
dimK Дата: Воскресенье, 31.10.2021, 22:33 | Сообщение № 1
Группа: Пользователи
Ранг: Прохожий
Сообщений: 2
Репутация: 0 ±
Замечаний: 0% ±

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

В гугл таблицах имею формулу
Перевод / Translate
Код
=MID(B3 , FIND("(",B3)+1, FIND ("(",B3, FIND("(",B3)+1)-FIND(")",B3)-1)


хочу из текста 1(3) выбрать значения между скобок, но получаю ошибку - Функция FIND не может обнаружить "(" в тексте "1 (3)".

Привожу рабочий пример этой формулы
Перевод / Translate
Код
=MID(B3 , FIND("'",B3)+1, FIND("'",B3, FIND("'",B3)+1)-FIND("'",B3)-1)


из текста 1 '3' без ошибок выдаёт значение между одинарных скобок =3, а вот со скобками почему-то работать не хочет.
 
Ответить
СообщениеЗдравствуйте!
Прошу подсказать как можно исправить ошибку или может есть более простой способ решить задачу. Сразу оговорюсь, что вычислял количество символов между скобок на случай, если значение будет из двух цифр или больше.

В гугл таблицах имею формулу
Перевод / Translate
Код
=MID(B3 , FIND("(",B3)+1, FIND ("(",B3, FIND("(",B3)+1)-FIND(")",B3)-1)


хочу из текста 1(3) выбрать значения между скобок, но получаю ошибку - Функция FIND не может обнаружить "(" в тексте "1 (3)".

Привожу рабочий пример этой формулы
Перевод / Translate
Код
=MID(B3 , FIND("'",B3)+1, FIND("'",B3, FIND("'",B3)+1)-FIND("'",B3)-1)


из текста 1 '3' без ошибок выдаёт значение между одинарных скобок =3, а вот со скобками почему-то работать не хочет.

Автор - dimK
Дата добавления - 31.10.2021 в 22:33
Gustav Дата: Понедельник, 01.11.2021, 01:21 | Сообщение № 2
Группа: Админы
Ранг: Участник клуба
Сообщений: 2809
Репутация: 1184 ±
Замечаний: ±

начинал с Excel 4.0, видел 2.1
=ПСТР(B3 ; НАЙТИ("(";B3)+1; FIND ("(";B3; НАЙТИ("(";B3)+1)-НАЙТИ(")";B3)-1)

Разверните 2-ю и 4-ю скобки в другую сторону (как должно быть - отмечено в формуле ниже красным):

=MID(B3 ; FIND("(";B3)+1; FIND (")";B3; FIND("(";B3)+1)-FIND("(";B3)-1)

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

Т.е. в вашей формуле 4 символа-ограничителя, участвующих в 4-х функциях FIND, должны идти в такой последовательности:
1 - открывающий, 2 - ЗАКРЫВАЮЩИЙ, 3 - открывающий, 4- открывающий (а у вас сейчас - откр, откр, откр, ЗАКР).
Проверьте дополнительно на квадратных или фигурных скобках: [ ], { }

А вариант с апострофами у вас работает потому, что апострофы одинаковые - и открывающий, и закрывающий.

или может есть более простой способ решить задачу

Можно воспользоваться такой, более компактной, формулой (хотя для осмысленного использования придётся почитать про регулярные выражения, если ранее не сталкивались с ними):
[vba]
Код
=REGEXEXTRACT(B3;"\(([^()]*)\)")
[/vba]
Это формула для круглых скобок ( ) в качестве ограничителей текста. Если ограничитель - фигурные скобки, то формула будет выглядеть вот так:
[vba]
Код
=REGEXEXTRACT(B3;"{([^{}]*)}")
[/vba]
Обратите внимание, что фигурные скобки уже не нужно экранировать обратными слэшами, как это было в случае скобок круглых: \( и \) .

Для апострофа же в качестве разделителя формула упрощается еще больше:
[vba]
Код
=REGEXEXTRACT(B3;"'([^']*)'")
[/vba]

Если в проверяемой строке открывающих и закрывающих символов - ровно по одному, можно воспользоваться такой формулой (для круглых скобок):
[vba]
Код
=INDEX(SPLIT(B3;"()";TRUE;FALSE);2)
[/vba]


МОИ: Ник, Tip box: 41001663842605

Сообщение отредактировал Gustav - Понедельник, 01.11.2021, 01:54
 
Ответить
Сообщение
=ПСТР(B3 ; НАЙТИ("(";B3)+1; FIND ("(";B3; НАЙТИ("(";B3)+1)-НАЙТИ(")";B3)-1)

Разверните 2-ю и 4-ю скобки в другую сторону (как должно быть - отмечено в формуле ниже красным):

=MID(B3 ; FIND("(";B3)+1; FIND (")";B3; FIND("(";B3)+1)-FIND("(";B3)-1)

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

Т.е. в вашей формуле 4 символа-ограничителя, участвующих в 4-х функциях FIND, должны идти в такой последовательности:
1 - открывающий, 2 - ЗАКРЫВАЮЩИЙ, 3 - открывающий, 4- открывающий (а у вас сейчас - откр, откр, откр, ЗАКР).
Проверьте дополнительно на квадратных или фигурных скобках: [ ], { }

А вариант с апострофами у вас работает потому, что апострофы одинаковые - и открывающий, и закрывающий.

или может есть более простой способ решить задачу

Можно воспользоваться такой, более компактной, формулой (хотя для осмысленного использования придётся почитать про регулярные выражения, если ранее не сталкивались с ними):
[vba]
Код
=REGEXEXTRACT(B3;"\(([^()]*)\)")
[/vba]
Это формула для круглых скобок ( ) в качестве ограничителей текста. Если ограничитель - фигурные скобки, то формула будет выглядеть вот так:
[vba]
Код
=REGEXEXTRACT(B3;"{([^{}]*)}")
[/vba]
Обратите внимание, что фигурные скобки уже не нужно экранировать обратными слэшами, как это было в случае скобок круглых: \( и \) .

Для апострофа же в качестве разделителя формула упрощается еще больше:
[vba]
Код
=REGEXEXTRACT(B3;"'([^']*)'")
[/vba]

Если в проверяемой строке открывающих и закрывающих символов - ровно по одному, можно воспользоваться такой формулой (для круглых скобок):
[vba]
Код
=INDEX(SPLIT(B3;"()";TRUE;FALSE);2)
[/vba]

Автор - Gustav
Дата добавления - 01.11.2021 в 01:21
  • Страница 1 из 1
  • 1
Поиск:

Яндекс.Метрика Яндекс цитирования
© 2010-2024 · Дизайн: MichaelCH · Хостинг от uCoz · При использовании материалов сайта, ссылка на www.excelworld.ru обязательна!