Поиск второго пробела в Excel: от простых формул до автоматизации

Почему поиск второго пробела — не тривиальная задача

На первый взгляд, найти второй пробел в текстовой ячейке Excel кажется простой операцией. Но стандартные функции вроде НАЙТИ() или ПОИСК() возвращают позицию только ПЕРВОГО вхождения, игнорируя все последующие. Эта особенность становится проблемой, когда вам нужно:

— Разбить ФИО на отдельные столбцы (фамилию, имя, отчество) по второму пробелу

— Извлечь домен второго уровня из URL (например, yandex из https://mail.yandex.ru/inbox)

— Обработать адреса с несколькими разделителями (улица, дом, квартира)

В этой статье мы разберём 7 методов — от элементарных формул до скриптов VBA и Power Query, которые гарантированно найдут второй пробел в любой версии Excel (2010–2023). Особое внимание уделим нюансам с множественными пробелами, табуляциями и неразрывными пробелами (Unicode-символ CHAR(160)).

📊 Какой метод поиска второго пробела вы пробовали раньше?
Формулы (НАЙТИ/ПОИСК)
Функция ПОДСТАВИТЬ
VBA-макрос
Power Query
Ничего из перечисленного

Метод 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. Этот инструмент позволяет создавать многоступенчатые преобразования без формул.

Алгоритм:

  1. Выделите диапазон → Данные → Из таблицы/диапазона (Excel 2016+)
  2. В редакторе Power Query добавьте пользовательский столбец с формулой:
    = try Text.PositionOf([Column1], " ", 2, Occurrence.First) otherwise null

    Здесь [Column1] — имя вашего столбца.

  3. Замените ошибки (null) на нужное значение (например, 0)
  4. Сохраните запрос и загрузите данные обратно в 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))