1

У меня есть столбец, который содержит список имен, я хочу, чтобы два других столбца содержали функции, которые извлекают имя и фамилию. Пока у меня есть это

FirstName: =LEFT(D3,FIND(" ",D3))
LastName: =RIGHT(D3,LEN(D3)-FIND(" ",D3))

Это работает для имен в формате "First Last", но не работает, когда есть дополнительная информация, такая как «Mr. First Last».

Есть ли лучший способ сделать это?

9 ответов9

7

Нет надежного способа сделать это, даже игнорируя заголовки, суффиксы и прочее. Рассмотрим следующие два имени:

Эдвард Ван Хален
Дэвид Ли Рот

Фамилии - "Ван Хален" и "Рот", но нет алгоритмического способа определить разницу.

7

Вероятно, лучше всего подходит для StackOverflow, но в общем случае простого пути не существует. Вы можете иметь список допустимых префиксов и суффиксов, чтобы сделать ваш алгоритм лучше. Но подумайте ...

Dr. Jack Johnson Smith, PhD
Mr. Jim S. Van De Berg, Jr.

... разделение на пустые места никогда не получится полностью правильным.

3

Также попробуйте думать о разных культурах.

Только один пример с голландского: полное имя "Йоханнес Эрнестус Мария ван ден Бринк" распадается на имя "Йоханнес", отчество "Эрнест Мария", фамилия "ван ден Бринк" (которое следует сортировать под буквой B!).

Лучшее решение (так как работает только на 100%) состоит в том, чтобы иметь отдельные поля имени и метод импорта, который позволяет пользователю вводить нужные части в правильные поля.

Удачи...

1

И это также не подходит для имен с большим количеством имен или фамилий. Вы действительно должны хранить их отдельно. Вы также должны разбить свою форму ввода на определенные части, такие как заголовок, имя, фамилия. Таким образом, вы можете правильно обрабатывать возможные пробелы.

Вы должны расширить свой лист столбцами "имя" и т.д. И попытаться автоматически преобразовать как можно больше имен, а затем проверить результаты и применить исправления вручную. После этой работы ваши данные станут намного проще в использовании и расширении.

0

Microsoft Outlook имеет довольно хороший алгоритм для этого. Вы можете автоматизировать Outlook, но есть определенный удар по производительности.

http://www.dailydoseofexcel.com/archives/2004/11/11/parse-names-with-outlook/

0

У меня такая же проблема. Независимо от того, сколько имен у вас есть для человека, вы можете легко получить их в отдельных полях. Я скопировал все имена из Excel в блокнот. Затем я импортировал этот текстовый файл в Excel и при импорте я выбрал опцию с разделителями, а затем я выбрал разделитель пробелов.

Чтобы получить лучшие результаты, вы можете очистить данные, удалив инициалы, например, faisal s. тахир поменяй на фейсал тахир.

Теперь, когда вы импортируете текстовый файл в Excel как разделитель пробелов, он автоматически поместит все имена (первый, второй, третий, четвертый, пятый) в разные столбцы.

0

Вы можете попытаться заменить значения (Mr. Mrs. Dr. Ms. Miss и т.д.) Ничем и попытаться разделить имена таким образом. Попробуйте проверить, сколько пробелов в ячейке, чтобы увидеть, есть ли больше, чем «Первый последний». Если это так, замените указанные выше значения ничем. Если у вас все еще есть больше чем 1 пробел, проверьте наличие запятых и удалите все от запятой до конца. Это должно помочь очистить клетки.

-JFV

0

Другой вариант - разбить столбец имени на логические части.

Скажите что-нибудь вроде Salutation , First name и Last name . Таким образом, вы можете построить имя из трех столбцов, опционально работая с Salutation . Если хотите, добавьте также Middle initial в середине .

В этом конкретном случае легче построить из частей, чем пытаться деконструировать.

-1

Нет надежного способа сделать это, даже игнорируя заголовки, суффиксы и прочее. Рассмотрим следующие два имени:

  • Эдвард Ван Хален
  • Дэвид Ли Рот

Фамилии - "Ван Хален" и "Рот", но нет алгоритмического способа определить разницу.

Я нашел способ определить разницу между ними, но не в части префикса / суффикса. Предполагая, что полное имя находится в B2, и вам нужна только фамилия, формула

=IF(NOT(ISERROR(FIND(" ",B2,FIND(" ",B2)+1))),RIGHT(B2,LEN(B2)-FIND(" ",B2,FIND(" ",B2)+1)),RIGHT(B2,LEN(B2)-FIND(" ",B2)))

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .