Основываясь на этом ответе , вот элегантное решение, которое работает с любым количеством отчеств:
=LEFT(A1,2)&LEFT(TRIM(RIGHT(SUBSTITUTE(A1," ",REPT(" ",LEN(A1))),LEN(A1))),2)
Объяснение:
SUBSTITUTE(A1, " ", REPT(" ",LEN(A1)))
заменяет пространство между словами пробелами, равными по числу длине всей строки. Использование длины строки, а не произвольно большого числа гарантирует, что формула работает для любой длины строки, и означает, что она делает это эффективно.
RIGHT(space_expanded_string, LEN(A1))
извлекает самое правое слово с предваряющей группой пробелов. *
TRIM(space_prepended_rightmost_word)
извлекает самое правое слово.
LEFT(rightmost_word, 2)
извлекает первые два символа самого правого слова (фамилия).
* Предостережение: если имя пользователя может содержать конечные пробелы, вам необходимо заменить первый аргумент SUBSTITUTE()
, т. Е. A1
, На TRIM(A1)
. Ведущие пробелы и несколько последовательных пробелов между словами обрабатываются правильно только с помощью A1
.
Исправление вашей попытки
При более внимательном рассмотрении вашего попытанного решения создается впечатление, что вы были очень близки к рабочей формуле для объединения первых двух букв первого слова (т.е. первого имени) и первых двух букв второго слова, если оно существовало.
Обратите внимание, что если имя пользователя будет содержать отчества, исправленная формула будет неправильно захватывать первые две буквы от первого отчества, а не от фамилии (при условии, что вы действительно хотите извлечь их из фамилии).
Кроме того, если все имена пользователей состоят только из имени, имени или фамилии, то формула излишне усложняется и может быть упрощена.
Чтобы увидеть, как работает формула, и исправить ее, проще, если она предварительно подтверждена, например:
=
LEFT(A1,2) &
MID(
A1,
IFERROR(FIND(" ",A1), LEN(A1)) + 1,
IFERROR(
FIND(" ", SUBSTITUTE(A1," ","",1)),
LEN(A1)
)
- IFERROR(FIND(" ",A1), LEN(A1))
)
Чтобы понять, как это работает, сначала посмотрите, что происходит, если в A1
нем нет пробелов (т.е. оно содержит только одно имя). Все IFERROR()
функции оценивают свои вторые аргументы, так как FIND()
возвращает #VALUE!
ошибку, если строка поиска не найдена в целевой строке:
=
LEFT(A1,2) &
MID(
A1,
LEN(A1) + 1,
LEN(A1)
-LEN(A1)
)
Третий аргумент MID()
оценивается как ноль, поэтому выходные данные функции ""
и результат формулы - это первые два символа одного имени.
Теперь посмотрим, когда есть ровно два имени (то есть ровно один пробел). Первая и третья IFERROR()
функции оценивают свои первые аргументы, а вторая - второй аргумент, поскольку FIND(" ", SUBSTITUTE(A1," ","",1))
пытается найти другое пространство после удаления первого и только одного:
=
LEFT(A1,2) &
MID(
A1,
FIND(" ",A1) + 1,
LEN(A1)
- FIND(" ",A1)
)
Ясно, MID()
что второе слово (то есть фамилия) возвращается полностью, а результатом формулы являются первые два символа имени, за которыми следуют все символы фамилии.
Для полноты картины мы также рассмотрим случай, когда есть как минимум три имени, хотя теперь должно быть совершенно очевидно, как исправить формулу. На этот раз все IFERROR()
функции оценивают свои первые аргументы:
=
LEFT(A1,2) &
MID(
A1,
FIND(" ",A1) + 1,
FIND(" ", SUBSTITUTE(A1," ","",1))
- FIND(" ",A1)
)
Это немного менее ясно, чем это было в предыдущем случае, но MID()
возвращает ровно все второе слово (т.е. первое отчество). Таким образом, результатом формулы являются первые два символа имени, за которыми следуют все символы первого отчества.
Очевидно, что исправление должно использовать, LEFT()
чтобы получить первые два символа MID()
вывода:
=
LEFT(A1,2) &
LEFT(
MID(
A1,
IFERROR(FIND(" ",A1), LEN(A1)) + 1,
IFERROR(
FIND(" ", SUBSTITUTE(A1," ","",1)),
LEN(A1)
)
- IFERROR(FIND(" ",A1), LEN(A1))
),
2
)
Облегчение я уже упоминал выше, чтобы заменить LEFT(MID(…,…,…), 2)
с MID(…,…,2)
:
=
LEFT(A1,2) &
MID(
A1,
IFERROR(FIND(" ",A1), LEN(A1)) + 1,
2
)
или на одной строке:
=LEFT(A1,2)&MID(A1,IFERROR(FIND(" ",A1),LEN(A1))+1,2)
По сути, это решение PeterH, измененное для работы с отдельными именами (в этом случае результатом являются только первые два символа имени).
Примечание: предварительно введенные формулы действительно работают, если введены.