7.9 KiB
search String
1 ПОДСТАВИТЬ
Нужна формула excel. Из ячейки берется строка и в ней ищет например, пятое вхождение символа х.
Далее ищет в строке шестой символ х и возвращает всю подстроку между ними (между пятом по счету и шестым найденным символом х).
Для решения этой задачи в Excel потребуется комбинированная формула с использованием нескольких функций. Ниже — пошаговое объяснение и итоговая формула.
Логика решения
-
Найти позицию 5‑го вхождения символа «x»
ИспользуемПОДСТАВИТЬ+НАЙТИ, заменяя 5‑е вхождение на уникальный маркер (например,@@@), затем ищем позицию этого маркера. -
Найти позицию 6‑го вхождения символа «x»
Аналогично, заменяем 6‑е вхождение на маркер и находим его позицию. -
Выделить подстроку между 5‑м и 6‑м «x»
ИспользуемПСТР, задавая начальную позицию (после 5‑го «x») и длину (разница позиций 6‑го и 5‑го «x» минус 1).
Итоговая формула
Пусть исходная строка находится в ячейке A1, а искомый символ — «x».
=ПСТР(A1;
НАЙТИ("@@@"; ПОДСТАВИТЬ(A1; "x"; "@@@"; 5)) + 1;
НАЙТИ("###"; ПОДСТАВИТЬ(A1; "x"; "###"; 6)) - НАЙТИ("@@@"; ПОДСТАВИТЬ(A1; "x"; "@@@"; 5)) - 1
)
Пояснение к формуле
-
ПОДСТАВИТЬ(A1; "x"; "@@@"; 5)
Заменяет 5‑е вхождение «x» на@@@. -
НАЙТИ("@@@"; ...)
Находит позицию@@@(т. е. позицию 5‑го «x»). -
ПОДСТАВИТЬ(A1; "x"; "###"; 6)
Заменяет 6‑е вхождение «x» на###. -
НАЙТИ("###"; ...)
Находит позицию###(т. е. позицию 6‑го «x»). -
ПСТР(A1; начало; длина)- начало = позиция 5‑го «x» + 1 (чтобы не включать сам «x»);
- длина = позиция 6‑го «x» − позиция 5‑го «x» − 1 (чтобы не включать 6‑й «x»).
Пример работы
Входные данные (A1):
abcxdefxghixjklxmnoxpqr
Результат:
jkl
(подстрока между 5‑м и 6‑м «x»: x**jkl**x)
Важные замечания
-
Если в строке меньше 6 вхождений «x», формула вернёт ошибку
#ЗНАЧ!.
Чтобы избежать этого, добавьте проверку:=ЕСЛИ(ДЛСТР(ПОДСТАВИТЬ(A1;"x";""))=ДЛСТР(A1)-6; ПСТР(A1; НАЙТИ("@@@"; ПОДСТАВИТЬ(A1;"x";"@@@";5))+1; НАЙТИ("###"; ПОДСТАВИТЬ(A1;"x";"###";6))-НАЙТИ("@@@"; ПОДСТАВИТЬ(A1;"x";"@@@";5))-1); "Недостаточно x") -
Маркеры (
@@@,###) должны быть уникальными (не встречаться в исходной строке). Если есть риск, замените их на другие комбинации (например,___5___,___6___). -
Формула работает для одного символа («x»). Для подстроки логика усложняется.
2 Без ПОДСТАВИТЬ
Можно обойтись без функции ПОДСТАВИТЬ — через последовательное нахождение позиций вхождений с помощью НАЙТИ с заданным стартовым смещением.
Принцип работы
Идея: каждый следующий вызов НАЙТИ стартует после позиции предыдущего найденного символа.
- Находим 1‑е вхождение «x».
- Находим 2‑е — начиная с позиции (1‑е + 1).
- Повторяем до 5‑го и 6‑го вхождений.
- Выделяем подстроку между 5‑м и 6‑м «x».
Итоговая формула (для ячейки A1, символ «x»)
=ПСТР(
A1;
НАЙТИ("x"; A1; НАЙТИ("x"; A1; НАЙТИ("x"; A1; НАЙТИ("x"; A1; НАЙТИ("x"; A1) + 1) + 1) + 1) + 1) + 1;
НАЙТИ("x"; A1; НАЙТИ("x"; A1; НАЙТИ("x"; A1; НАЙТИ("x"; A1; НАЙТИ("x"; A1; НАЙТИ("x"; A1) + 1) + 1) + 1) + 1) + 1) -
НАЙТИ("x"; A1; НАЙТИ("x"; A1; НАЙТИ("x"; A1; НАЙТИ("x"; A1; НАЙТИ("x"; A1) + 1) + 1) + 1) + 1) - 1
)
Пояснение
-
Нахождение 5‑го «x»:
Вложенные вызовыНАЙТИс нарастающим смещением:НАЙТИ("x"; A1; [позиция_4го] + 1)Где
[позиция_4го]— результат аналогичного вложенного поиска. -
Нахождение 6‑го «x»:
Аналогично, но на один уровень глубже. -
Извлечение подстроки:
- Начало: позиция 5‑го «x» + 1 (чтобы не включать сам «x»).
- Длина: позиция 6‑го «x» − позиция 5‑го «x» − 1 (чтобы не включать 6‑й «x»).
Пример
Входные данные (A1):
abcxdefxghixjklxmnoxpqr
Результат:
jkl
(подстрока между 5‑м и 6‑м «x»: x**jkl**x)
Важные замечания
-
Ограничения длины формулы
В Excel есть лимит на глубину вложенности функций. Для поиска 5–6‑го вхождения формула работает, но для бóльших номеров может превысить лимит. -
Обработка ошибок
Если в строке меньше 6 вхождений «x», формула вернёт#ЗНАЧ!. Добавьте проверку:=ЕСЛИ(ДЛСТР(A1)-ДЛСТР(ПОДСТАВИТЬ(A1;"x";""))>=6; [основная_формула]; "Недостаточно x" )Проверка: число «x» в строке ≥ 6.
-
Читаемость
Формула громоздкая и трудно редактируется. Для сложных случаев лучше использовать:- Power Query (визуальный редактор);
- VBA (пользовательская функция);
- Office Scripts (для веб‑версии).
Альтернатива: пользовательская функция (VBA)
Если допустима VBA, создайте функцию GetSubstringBetweenX:
Function GetSubstringBetweenX(text As String, n1 As Integer, n2 As Integer, delimiter As String) As String
Dim parts() As String
parts = Split(text, delimiter)
If UBound(parts) >= n2 Then
GetSubstringBetweenX = parts(n1)
Else
GetSubstringBetweenX = "Недостаточно разделителей"
End If
End Function
Использование в Excel:
=GetSubstringBetweenX(A1; 5; 6; "x")