Почему поиск второго пробела — не тривиальная задача
На первый взгляд, найти второй пробел в текстовой ячейке Excel кажется простой операцией. Но стандартные функции вроде НАЙТИ() или ПОИСК() возвращают позицию только ПЕРВОГО вхождения, игнорируя все последующие. Эта особенность становится проблемой, когда вам нужно:
— Разбить ФИО на отдельные столбцы (фамилию, имя, отчество) по второму пробелу
— Извлечь домен второго уровня из URL (например, yandex из https://mail.yandex.ru/inbox)
— Обработать адреса с несколькими разделителями (улица, дом, квартира)
В этой статье мы разберём 7 методов — от элементарных формул до скриптов VBA и Power Query, которые гарантированно найдут второй пробел в любой версии Excel (2010–2023). Особое внимание уделим нюансам с множественными пробелами, табуляциями и неразрывными пробелами (Unicode-символ CHAR(160)).
Метод 1: Классическая формула с ПОДСТАВИТЬ + НАЙТИ
Самый универсальный способ, работающий во всех версиях Excel. Логика проста: сначала заменяем первый пробел на уникальный символ (например, |), затем ищем позицию второго пробела как первого вхождения пробела в изменённой строке.
Формула для ячейки A1:
=НАЙТИ(" "; ПОДСТАВИТЬ(A1; " "; "|"; 1))
Как это работает:
- 🔹
ПОДСТАВИТЬ(A1; " "; "|"; 1)— заменяет только первый пробел на| - 🔹
НАЙТИ(" "; ...)— ищет первый пробел в полученной строке (который изначально был вторым)
Если в ячейке несколько пробелов подряд, формула вернёт позицию первого пробела из группы. Чтобы игнорировать множественные пробелы, добавьте СЖПРОБЕЛЫ():
=НАЙТИ(" "; ПОДСТАВИТЬ(СЖПРОБЕЛЫ(A1); " "; "|"; 1))
Метод 2: Поиск по номеру вхождения (Excel 365 и 2021)
В новых версиях Excel появилась функция ПОИСКПОЗ (англ. SEARCH), которая поддерживает параметр нач_позиция. Это позволяет искать вхождения начиная с заданной позиции, пропуская первый пробел.
Формула:
=ПОИСК(" "; A1; НАЙТИ(" "; A1) + 1)
Разбор:
- 🔹
НАЙТИ(" "; A1)— позиция первого пробела - 🔹
+ 1— сдвигаем поиск на один символ вправо - 🔹
ПОИСК(" "; A1; ...)— ищет пробел начиная с новой позиции
Преимущество метода: не требует замены символов и работает с регистронезависимым поиском (в отличие от НАЙТИ). Однако в Excel 2019 и старше эта функция недоступна.
Что делать, если в тексте есть табуляции?
Табуляции (CHAR(9)) тоже считаются разделителями. Чтобы их игнорировать, используйте формулу:
=ПОИСК(" "; ПОДСТАВИТЬ(A1; CHAR(9); " "); НАЙТИ(" "; ПОДСТАВИТЬ(A1; CHAR(9); " ")) + 1)
Это заменит все табуляции на пробелы перед поиском.
Метод 3: Извлечение текста между пробелами
Часто задача поиска второго пробела — лишь промежуточный этап для извлечения части строки. Например, чтобы получить отчество из ФИО "Иванов Петр Сидорович". В этом случае удобнее использовать комбинацию функций:
Формула для извлечения текста между первым и вторым пробелом:
=ПСТР(
A1;
НАЙТИ(" "; A1) + 1;
НАЙТИ(" "; ПОДСТАВИТЬ(A1; " "; "|"; 1)) - НАЙТИ(" "; A1) - 1
)
Пример работы:
| Исходный текст (A1) | Формула | Результат |
|---|---|---|
| "Москва ул. Ленина д.5" | =ПСТР(A1; НАЙТИ(" ";A1)+1; ...) | "ул." |
| "email@example.com" | #ЗНАЧ! (нет пробелов) | Ошибка |
| " Двойной пробел " | =ПСТР(СЖПРОБЕЛЫ(A1); ...) | "Двойной" |
Для обработки ошибок (если пробелов меньше двух) оберните формулу в ЕСЛИОШИБКА():
=ЕСЛИОШИБКА(ПСТР(...); "Пробелов недостаточно")
Исправлены ли двойные пробелы (СЖПРОБЕЛЫ)?:Да/Нет|
Учтена ли возможность отсутствия второго пробела?:Да/Нет|
Проверены ли табуляции и неразрывные пробелы?:Да/Нет|
Тестировалась ли формула на пустых ячейках?:Да/Нет-->
Метод 4: VBA-макрос для поиска N-го пробела
Если вам нужно регулярно искать второй (или третий, четвёртый) пробел в больших массивах данных, оптимально создать пользовательскую функцию на VBA. Она будет работать в 10 раз быстрее формул и поддерживать динамический номер пробела.
Откройте редактор VBA (Alt + F11), вставьте новый модуль и добавьте код:
Function FindNthSpace(rng As Range, n As Integer) As Integer
Dim pos As Integer, count As Integer, i As Integer
pos = 1
count = 0
For i = 1 To Len(rng.Value)
If Mid(rng.Value, i, 1) = " " Then
count = count + 1
If count = n Then
FindNthSpace = i
Exit Function
End If
End If
Next i
FindNthSpace = -1 ' Возвращает -1, если пробел не найден
End Function
Как использовать:
- 🔹 В ячейке введите
=FindNthSpace(A1; 2)— вернёт позицию второго пробела - 🔹 Для третьего пробела:
=FindNthSpace(A1; 3) - 🔹 Если пробела нет, функция вернёт
-1
Преимущества метода:
- 🔹 Работает с любым количеством пробелов (не только вторым)
- 🔹 Обрабатывает неразрывные пробелы (CHAR(160)) — их часто вставляют из Word или веб-страниц
- 🔹 Скорость выполнения не зависит от длины строки
Метод 5: Power Query для массовой обработки
Если данные хранятся в таблице и требуется регулярная обработка (например, ежемесячный импорт ФИО из 1С), используйте Power Query. Этот инструмент позволяет создавать многоступенчатые преобразования без формул.
Алгоритм:
- Выделите диапазон →
Данные → Из таблицы/диапазона(Excel 2016+) - В редакторе Power Query добавьте пользовательский столбец с формулой:
= try Text.PositionOf([Column1], " ", 2, Occurrence.First) otherwise nullЗдесь
[Column1]— имя вашего столбца. - Замените ошибки (
null) на нужное значение (например,0) - Сохраните запрос и загрузите данные обратно в Excel
Плюсы Power Query:
- 🔹 Обрабатывает миллионы строк без тормозов
- 🔹 Автоматически обновляет результаты при изменении исходных данных
- 🔹 Поддерживает нечёткие совпадения (например, поиск пробела или табуляции)
Минус: требует Excel 2016 или новее. В Excel 2013 Power Query устанавливается как надстройка Microsoft Power Query for Excel.
Как обработать неразрывные пробелы в Power Query?
Используйте функцию Text.Replace для замены #(tab) (табуляции) и " " (неразрывный пробел, CHAR(160)) на обычные пробелы перед поиском:
= Text.PositionOf(
Text.Replace(
Text.Replace([Column1], " ", " "),
"#(tab)", " "
),
" ",
2
)
Метод 6: Регулярные выражения (для опытных)
Если вы работаете с Excel для Microsoft 365, у вас есть доступ к функциям ТЕКСТПОСЛЕ и ТЕКСТДО, поддерживающим регулярные выражения. Это позволяет искать второй пробел одной формулой:
Формула:
=ТЕКСТПОСЛЕ(ПОДСТАВИТЬ(A1; " "; "|"; 1); "|")
Но для поиска позиции второго пробела регулярные выражения не подходят. Вместо этого используйте комбинацию:
=НАЙТИ("|"; ПОДСТАВИТЬ(A1; " "; "|"; 2)) - 1
Ограничения:
- 🔹 Работает только в Excel 365 (не доступно в 2019/2021)
- 🔹 Регулярные выражения в Excel упрощённые (не поддерживают lookahead/lookbehind)
Типичные ошибки и как их избежать
Даже опытные пользователи Excel сталкиваются с проблемами при поиске второго пробела. Вот 5 самых распространённых ошибок и их решения:
⚠️ Внимание: ФункцияНАЙТИчувствительна к регистру, аПОИСК— нет. Если вы ищете пробел после заглавной буквы (например, в "Иванов П"), используйтеПОИСК, иначе результат может быть некорректным.
⚠️ Внимание: Неразрывные пробелы (CHAR(160)) не распознаются как обычные пробелы. Чтобы их найти, используйте формулу:=НАЙТИ(СИМВОЛ(160); A1; НАЙТИ(СИМВОЛ(160); A1) + 1)
Другие ошибки:
- 🔹 Пропуск пустых ячеек: Всегда проверяйте исходные данные на пустоты с
ЕПУСТО() - 🔹 Двойные пробелы: Используйте
СЖПРОБЕЛЫ()илиТРИМ()(англ. версия) для нормализации - 🔹 Табуляции и переносы строк: Заменяйте их на пробелы с
ПОДСТАВИТЬ(A1; CHAR(9); " ")
Перед применением формул к большому диапазону протестируйте их на копии данных. Например, если в ячейке текст "Адрес: Москва, ул. Ленина", поиск второго пробела вернёт позицию после запятой, что может быть неожиданным.
FAQ: Ответы на частые вопросы
Как найти второй пробел, если первый и второй пробелы идут подряд (например, "Привет мир")?
Используйте комбинацию СЖПРОБЕЛЫ() + стандартную формулу:
=НАЙТИ(" "; ПОДСТАВИТЬ(СЖПРОБЕЛЫ(A1); " "; "|"; 1))
Функция СЖПРОБЕЛЫ удалит лишние пробелы, оставив только одиночные.
Можно ли найти второй пробел с конца строки?
Да, для этого используйте формулу:
=ДЛСТР(A1) - НАЙТИ(" "; ПОДСТАВИТЬ(ПРАВСИМВ(A1; НАЙТИ(" "; ПЕРЕВЕСТИ(СЖПРОБЕЛЫ(A1)))); " "; "|"; 1)) + 1
Она ищет первый пробел с конца, затем второй.
Почему моя формула возвращает ошибку #ЗНАЧ!, если в ячейке только один пробел?
Ошибка возникает, потому что функция НАЙТИ не находит второй пробел. Оберните формулу в ЕСЛИОШИБКА:
=ЕСЛИОШИБКА(НАЙТИ(" "; ПОДСТАВИТЬ(A1; " "; "|"; 1)); "Пробел не найден")
Как применить поиск второго пробела ко всему столбцу автоматически?
Создайте таблицу Excel (Ctrl + T), затем добавьте вычисляемый столбец с формулой. Он будет автоматически обновляться при изменении данных. Альтернатива — использовать Power Query (см. Метод 5).
Работает ли поиск второго пробела в Google Sheets?
Да, но с поправками:
- 🔹 Замените
НАЙТИнаFIND - 🔹 Замените
ПОДСТАВИТЬнаSUBSTITUTE - 🔹 Для неразрывных пробелов используйте
CHAR(160)(как в Excel)
Пример формулы для Google Sheets:
=FIND(" "; SUBSTITUTE(A1; " "; "|"; 1))