Основываясь на этом ответе, вот элегантное решение, которое работает с любым количеством отчеств:
=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, измененное для работы с отдельными именами (в этом случае результатом являются только первые два символа имени).
Примечание: предварительно введенные формулы действительно работают, если введены.