У меня есть таблица с именами пользователей.
Имя и фамилия находятся в одной ячейке столбца 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
в результате.
Ответы:
Да; при условии, что у каждого человека есть только имя и фамилия, и это всегда разделяется пробелом, вы можете использовать ниже:
Я мог бы основать этот ответ только на этих предположениях, поскольку это все, что вы предоставили.
Или, если вы хотите, чтобы место все еще было включено:
источник
FIND()
вместоSEARCH()
;-)) Поскольку вы предполагаете, что всегда есть разделитель пробелов, ваша вторая формула может быть упрощена до=LEFT(A1,2)&MID(A1,SEARCH(" ",A1),3)
assuming each person only has a First and Last name
TRIM(LEFT(A1,2))
только в том случае, если их имя имеет только одну букву, но может быть достаточно легко проверить эти специальные случаи вручную.И в заключение, вот решение, которое возвращает первые два символа имени и первые два символа фамилии, но также учитывает отчество.
Спасибо @Kyle за основную часть формулы
источник
~
вместо четырех. Если вы обеспокоены тем, что Tilda может использоваться как часть имени (!) Или, что более вероятно, случайно напечатано, просто используйте символ, который не отображается ни на одной клавиатуре. Я предпочитаю использовать§
.¶
еще один хороший.Это еще один способ ...
=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 является самым простым и легким для понимания. (Хотя я предпочитаю использовать
FIND()
вместоSEARCH()
- ввод менее двух символов помогает избежать RSI ;-))Альтернативный ответ , что ни применение
MID()
,LEFT()
ниRIGHT()
, но вместо этого используется ,REPLACE()
чтобы удалить ненужные части названия выглядит следующим образом :Объяснение:
Внутренний
REPLACE(A1, FIND(" ",A1)+3, LEN(A1), "")
удаляет символы из третьего символа фамилии и далее, в то время как внешний удаляет символы из третьего символа имени до и включая пробел.REPLACE(inner_replace, 3, FIND(" ",A1)-2, "")
Приложение 1:
Приведенная выше формула также может быть адаптирована для учета одного отчества:
заменив
FIND(" ",A1)
наIFERROR(FIND(" ",A1,FIND(" ",A1)+1), FIND(" ",A1))
.FIND(" ", A1, FIND(" ",A1)+1)
находит второй пробел (запуская поиск пробела после первого пробела) или ошибки в противном случае.IFERROR(find_second_space, FIND(" ",A1))
находит первый пробел, если второго пробела нет.Эта (длинная) версия допускает любое количество отчеств:
В этом случае
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 может быть более эффективно адаптирован следующим образом:
Чтобы учесть случай использования одной буквы, имени или инициала (при условии, что в качестве второго символа пробел или точка недопустимы), для любого решения можно использовать следующее:
=SUBSTITUTE(SUBSTITUTE(solution, " ", single_char), ".", single_char))
Обратите внимание, что один символ может быть жестко запрограммирован или рассчитан по имени. (Или используйте
""
для удаления пробела или точки.)Наконец, если вам действительно нужно учитывать случай, когда полное имя состоит только из одного символа (!), Просто оберните формулу только для одного имени другой
IFERROR()
. (Предполагая, конечно, что альтернативная формула не учитывает этот особый случай.)Приложение 3:
Наконец, наконец (нет, действительно * ;-)), чтобы обслуживать несколько последовательных и / или начальных / конечных пробелов, используйте
TRIM(A1)
вместоA1
.* Я оставлю дело для одной буквы фамилии, как г-н Т, в качестве упражнения для читателя.
источник
Основываясь на этом ответе , вот элегантное решение, которое работает с любым количеством отчеств:
Объяснение:
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
.Исправление вашей попытки
При более внимательном рассмотрении вашего попытанного решения создается впечатление, что вы были очень близки к рабочей формуле для объединения первых двух букв первого слова (т.е. первого имени) и первых двух букв второго слова, если оно существовало.
Обратите внимание, что если имя пользователя будет содержать отчества, исправленная формула будет неправильно захватывать первые две буквы от первого отчества, а не от фамилии (при условии, что вы действительно хотите извлечь их из фамилии).
Кроме того, если все имена пользователей состоят только из имени, имени или фамилии, то формула излишне усложняется и может быть упрощена.
Чтобы увидеть, как работает формула, и исправить ее, проще, если она предварительно подтверждена, например:
Чтобы понять, как это работает, сначала посмотрите, что происходит, если в
A1
нем нет пробелов (т.е. оно содержит только одно имя). ВсеIFERROR()
функции оценивают свои вторые аргументы, так какFIND()
возвращает#VALUE!
ошибку, если строка поиска не найдена в целевой строке:Третий аргумент
MID()
оценивается как ноль, поэтому выходные данные функции""
и результат формулы - это первые два символа одного имени.Теперь посмотрим, когда есть ровно два имени (то есть ровно один пробел). Первая и третья
IFERROR()
функции оценивают свои первые аргументы, а вторая - второй аргумент, посколькуFIND(" ", SUBSTITUTE(A1," ","",1))
пытается найти другое пространство после удаления первого и только одного:Ясно,
MID()
что второе слово (то есть фамилия) возвращается полностью, а результатом формулы являются первые два символа имени, за которыми следуют все символы фамилии.Для полноты картины мы также рассмотрим случай, когда есть как минимум три имени, хотя теперь должно быть совершенно очевидно, как исправить формулу. На этот раз все
IFERROR()
функции оценивают свои первые аргументы:Это немного менее ясно, чем это было в предыдущем случае, но
MID()
возвращает ровно все второе слово (т.е. первое отчество). Таким образом, результатом формулы являются первые два символа имени, за которыми следуют все символы первого отчества.Очевидно, что исправление должно использовать,
LEFT()
чтобы получить первые два символаMID()
вывода:Облегчение я уже упоминал выше, чтобы заменить
LEFT(MID(…,…,…), 2)
сMID(…,…,2)
:или на одной строке:
По сути, это решение PeterH, измененное для работы с отдельными именами (в этом случае результатом являются только первые два символа имени).
Примечание: предварительно введенные формулы действительно работают, если введены.
источник