Виходячи з цієї відповіді , ось елегантне рішення, яке працює з будь-якою кількістю прізвищ:
=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)
витягує перші два символи крайнього правого слова (прізвище).
* Caveat: Якщо можливо, щоб ім’я користувача містило пробіли, слід замінити перший аргумент 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, модифіковане також для роботи з поодинокими іменами (у цьому випадку результат - це лише перші два символи імені).
Примітка: попередньо визначені формули спрацьовують, якщо вони введені.