Перестановка слов в ФИО в ячейках

Как поставить фамилию после имени и отчества в ячейках Экселя? Например, изначально ФИО стоит так: "Собачкин Андрей Олегович". Мне надо получить "Андрей Олегович Собачкин". Нужна формула, а не макрос.


Ответы (3 шт):

Автор решения: Fat-Zer

Задача эквивалентна задаче переставить первое слово в конец строки.

Подразумевая, что исходный текст в ячейке D5и слова разделены пробелом:

  • Если в Excel'е есть поддержка регулярных выражений, как в libreoffice, то можно обойтись этим:

    REGEX(D5;"^(\S*)\s(.*)$";"$2 $1")
    
  • Если нет, то придётся шаманить что-то такое:

    CONCAT(RIGHT(D5;LEN(D5)-FIND(" ";D5));" ";LEFT(D5;FIND(" ";D5)-1))
    

    или в русской версии:

    СЦЕПИТЬ(ПРАВСИМВ(D5;ДЛСТР(D5)-НАЙТИ(" ";D5));" ";ПРАВСИМВ(D5;НАЙТИ(" ";D5)-1))
    
→ Ссылка
Автор решения: vikttur

На выбор. Ищем первый пробел и по нему делим текст:

=ПСТР(A2&" "&A2;ПОИСК(" ";A2)+1;ДЛСТР(A2))
=ПСТР(A2;ПОИСК(" ";A2)+1;30)&" "&ЛЕВБ(A2;ПОИСК(" ";A2)-1)
=ЗАМЕНИТЬ(A2;1;ПОИСК(" ";A2);)&" "&ЛЕВБ(A2;ПОИСК(" ";A2)-1)
=ПОДСТАВИТЬ(A2;ЛЕВБ(A2;ПОИСК(" ";A2));)&" "&ЛЕВБ(A2;ПОИСК(" ";A2)-1)

Функция пользователя (UDF), позволяющая расставлять три слова в любом порядке или возвращать повторы слов.

Function fShiftName(sName As String, Optional j1 As Long = 2, _
                    Optional j2 As Long = 3, Optional j3 As Long = 1) As String
    Dim aSpl
    
    aSpl = Split(sName, " ")
    fShiftName = aSpl(j1 - 1) & " " & aSpl(j2 - 1) & " " & aSpl(j3 - 1)
End Function

Параметры, передаваемые в функцию: ссылка на ячейку (или текст) и три числа, устанавливающие порядок слов. Ссылка обязательна, числа - опционально (по умолчанию слова переставляются в порядке 2, 3, 1 (второе, третье, первое). Порядок по умолчанию можно поменять, изменив значения переменных jx

Функция записывается в общий модуль в редакторе VBA. В ячейке вызывать функцию формулой.

Примеры для исходного текста Первый Второй Третий

=fShiftName(A2) - с параметрами по умолчанию: Второй Третий Первый

=fShiftName(A2;;;1) - то же, что и по умолчанию: Второй Третий Первый

=fShiftName("Первый Второй Третий";3;1;2) - другая перестановка: Третий Первый Второй

=fShiftName("Первый Второй Третий";3;;3) - повтор слова: Третий Третий Третий

=fShiftName(A2;3;3;1) - повтор с перестановкой: Третий Третий Первый

→ Ссылка
Автор решения: JohnSUN

Если Вы используете MS Excel 2013 или новее, то можете решить эту задачу без формул с помощью инструмента Мгновенное заполнение (по ссылке найдёте короткое обучающее видео и подробные инструкции)

→ Ссылка