Поєднання перших двох літер від імені та перших двох літер від прізвища


9

У мене є електронна таблиця імен користувачів.

Ім'я та прізвища знаходяться в одній комірці стовпця A.

Чи існує формула, яка поєднає перші дві літери імені (перше слово) та перші дві літери прізвища (друге слово)?

Наприклад John Doe, повинні стати JoDo.

я намагався

=LEFT(A1)&MID(A1,IFERROR(FIND(" ",A1),LEN(A1))+1,IFERROR(FIND(" ",SUBSTITUTE(A1," ","",1)),LEN(A1))-IFERROR(FIND(" ",A1),LEN(A1)))

але це дає мені JoDoeрезультат.


2
Основне читання: Програмісти
фальшивості

Чи будь-яка з відповідей робить трюк? (Якщо так, чи можете ви позначити це як Відповідь, натиснувши прапорець ліворуч від публікації.)
BruceWayne

Відповіді:


15

Так; припускаючи, що у кожної людини є лише Ім'я та Прізвище, і це завжди розділено пробілом, який ви можете використовувати нижче:

=LEFT(A1,2)&MID(A1,SEARCH(" ",A1)+1,2)

Я міг би грунтуватися на цій відповіді лише на цих припущеннях, оскільки це все, що ви надали.

Або якщо ви хочете, щоб пробіл все ще був включений:

=LEFT(A1,2)&" "&MID(A1,SEARCH(" ",A1)+1,2)

2
@prweq жодних проблем, прийміть це як правильне, якщо воно працює для вас
PeterH

Найпростіший і найпростіший для розуміння рішення. (Ну, за винятком використання FIND()замість SEARCH();-)) Оскільки ви припускаєте, що завжди існує роздільник пробілів, вашу другу формулу можна спростити до=LEFT(A1,2)&MID(A1,SEARCH(" ",A1),3)
robinCTS

4
@RajeshS Я знаю. Ось чому моя відповідь починається зassuming each person only has a First and Last name
PeterH

2
Програмісти фальшивості вірять у імена ; не те, що було б доцільно розбиратись із усіма цими справами з початку роботи, якщо ваше програмне забезпечення не має міжнародної доступності
Аарон

1
Я пропоную про TRIM(LEFT(A1,2))всяк випадок, якщо їх ім’я містить лише одну букву, але це може бути досить просто перевірити на ці особливі випадки і вручну.
Інженер Тост

11

А щоб заокруглювати справи, ось рішення, яке поверне перші два символи імені та перші два символи прізвища, але також призначає середні імена.

=LEFT(A1,2)&LEFT(MID(A1,FIND("~~~~~",SUBSTITUTE(A1," ","~~~~~",LEN(A1)-LEN(SUBSTITUTE(A1," ",""))))+1,LEN(A1)),2)

введіть тут опис зображення

Завдяки @Kyle за основну частину формули


1
Ви побили мене до цього ;-) (Минуло півночі, і мені потрібно спати - планував після цього додати свою відповідь.) Невеликим поліпшенням вашої формули було б використання сингла ~замість чотирьох. Якщо ви стурбовані тим, що Tilda може використовуватися як частина імені (!) Або, швидше за все, випадково введена, просто використовуйте символ, який не відображається на жодній клавіатурі. Я вважаю за краще використовувати §. є ще один хороший.
robinCTS

@BruceWayne ,, Ваша Формула є більш компетентною ,,, оскільки вона має доступ лише до Фіртків та Прізвища, ігнорує Прізвище ,,, Вгору проголосували ☺
Раджеш S

@RajeshS Що робити з людьми з іспанськими іменами , наприклад, колишнім водієм F1 Фернандо Алонсо Діасом, у якого 1 прізвище, 2 прізвища, а не прізвища? (Або навіть король Феліпе Хуан Пабло Альфонсо де Тодос лос Сантос де Борбон і де Греція ?)
Хроноцид

2
@Chronocidal зараз ми йдемо по кролячій норі того, що програмісти вірять у імена
BruceWayne

1
@robinCTS - Гарний дзвінок! Я отримав формулу з іншої відповіді (відредаговано у), і я не дуже копав глибше. Дякую за поради!
BruceWayne

9

Це ще один спосіб ...

Знімок екрана робочого аркуша

  • А - Ім'я
  • Б - =CONCATENATE(LEFT(A1,2),LEFT(RIGHT(A1,(LEN(A1)-FIND(" ",A1))),2))

Ви можете піти ще далі та видалити всі ці додаткові стовпці, об’єднавши їх=CONCATENATE(LEFT(A1,2),LEFT(RIGHT(A1,(LEN(A1)-FIND(" ",A1))),2))
PeterH

Так, я це зробив через декілька моментів після!
Stese

так, я помітив, що ви відредагували відповідь, приємна відповідь!
PeterH

5

По-перше, я хотів би сказати, що відповідь PeterH є найпростішою та найлегшою для розуміння. (Хоча я вважаю за краще використовувати FIND()замість цього SEARCH()- введення двох менших символів допомагає уникнути RSI ;-))

Альтернативна відповідь, яка ні використовує MID(), LEFT()ні RIGHT(), але натомість використовує REPLACE()для видалення небажаних частин імені, така:

=REPLACE(REPLACE(A1,FIND(" ",A1)+3,LEN(A1),""),3,FIND(" ",A1)-2,"")

Пояснення:

Внутрішня REPLACE(A1, FIND(" ",A1)+3, LEN(A1), "")частина видаляє символи від третього символу прізвища далі, тоді як зовнішня видаляє символи від третього символу імені до і включає пробіл.REPLACE(inner_replace, 3, FIND(" ",A1)-2, "")


Додаток 1:

Вищеописану формулу також можна адаптувати, щоб мати можливість використовувати одне прізвище:

=REPLACE(REPLACE(A1,IFERROR(FIND(" ",A1,FIND(" ",A1)+1),FIND(" ",A1))+3,LEN(A1),""),3,IFERROR(FIND(" ",A1,FIND(" ",A1)+1),FIND(" ",A1))-2,"")

шляхом заміни FIND(" ",A1)на IFERROR(FIND(" ",A1,FIND(" ",A1)+1), FIND(" ",A1)).

FIND(" ", A1, FIND(" ",A1)+1)знаходить другий пробіл (запустивши пошук пробілу після першого пробілу) або помилки в іншому випадку. знаходить перший пробіл, якщо другого простору немає.
IFERROR(find_second_space, FIND(" ",A1))


Ця (довгомовна) версія дозволяє використовувати будь-яку кількість прізвищ:

=REPLACE(REPLACE(A1,FIND("§",SUBSTITUTE(A1," ","§",LEN(A1)-LEN(SUBSTITUTE(A1," ",""))))+3,LEN(A1),""),3,FIND("§",SUBSTITUTE(A1," ","§",LEN(A1)-LEN(SUBSTITUTE(A1," ",""))))-2,"")

У цьому випадку FIND(" ",A1)замінюється на FIND("§", SUBSTITUTE(A1," ","§",LEN(A1)-LEN(SUBSTITUTE(A1," ","")))).

LEN(A1)-LEN(SUBSTITUTE(A1," ",""))підраховує кількість пробілів. замінює останній пробіл на . знаходить перше, що те саме, що знайти останній пробіл.
SUBSTITUTE(A1, " ", "§", count_of_spaces)§
FIND("§", last_space_replaced_string)§

( §Звичайно, можна замінити будь-який символ, гарантовано відсутність у рядку повного імені. Більш загальною, безпечнішою альтернативою було б використання CHAR(1).)


Зауважте, що, звичайно, відповідь BruceWayne є найпростішим і найпростішим для розуміння рішенням, яке дозволяє отримати будь-яку кількість прізвищ. Добре було. Поки я не опублікував свою іншу відповідь , тобто ;-)


Додаток 2:

Усі рішення можна адаптувати для задоволення лише випадку одного імені (якщо є потреба в результаті чотирьох символів), обернувши їх у IFERROR()такій функції:

=IFERROR(solution, alternate_formula)

Зауважимо, що вищезазначене є загальною формулою випадку, і можливо, можливо зробити більш ефективну модифікацію конкретного рішення. Наприклад, якщо вимога у випадку одного імені полягає в об'єднанні перших двох літер з останніми двома літерами, відповідь PeterH може бути більш ефективно адаптована таким чином:

=LEFT(A1,2)&MID(A1,IFERROR(SEARCH(" ",A1)+1,LEN(A1)-1),2)


Щоб дозволити випадок з однієї літери першого імені або початкової (якщо пробіл або крапка не прийнятний як другий символ), з будь-яким рішенням можна використовувати наступне:

=SUBSTITUTE(SUBSTITUTE(solution, " ", single_char), ".", single_char))

Зауважте, що один символ може бути жорстко закодований або обчислений з імені. (Або використовуйте ""для видалення пробілу чи крапки.)


Нарешті, якщо вам дійсно потрібно задовольнити випадок, коли повне ім’я є лише одним символом (!), Просто оберніть формулу, що містить лише одне ім’я, іншою IFERROR() . (Безумовно, якщо припустити, що альтернативна формула не піклується про цей особливий випадок.)


Додаток 3:

Нарешті, нарешті (ні, насправді * ;-)) для задоволення кількох послідовних та / або провідних / кінцевих пробілів, використовуйте TRIM(A1)замість A1.


* Я залишу справу для однієї літери прізвища, як пан Т, як вправу для читача.

Підказка: =solution &IF(MID(A1,LEN(A1)-1,1)=" ", single_char, "")


1
Як завжди, ваші відповіді виглядають так, що вони отримані з передового посібника користувача Excel! Це була б найкраща відповідь, якби ви опублікували її раніше!
PeterH

@PeterH Дякую за доповнення. Я натрапив на запитання лише після того, як він потрапив у список гарячих мережевих запитань, тому я трохи запізнився на вечірку ;-)
robinCTS

2

Виходячи з цієї відповіді , ось елегантне рішення, яке працює з будь-якою кількістю прізвищ:

=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, модифіковане також для роботи з поодинокими іменами (у цьому випадку результат - це лише перші два символи імені).


Примітка: попередньо визначені формули спрацьовують, якщо вони введені.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.