Как отделить инициалы от имен, в MS Excel?

694
CRoshanLG

У меня есть список (около 1200) имен в MS Excel, которые находятся в нескольких разных форматах.

  • Полные имена из 3 частей - например, Джон Мейнард Кейнс
  • Полные имена из 4 частей - например: Мохомад Хуссейн Мохомад Нияс
  • Имена с инициалами - например: С. Р. Уилсон, Джон
  • Имена с приветствиями - например: мисс Т Анояни, мистер Тилан Кумара, мастер А.Х. Видушан

(Да! Это беспорядок)

Мне нужно преобразовать его в формат ниже.

Дж. М. Кейнс

МХМ Нияс

SR Уилсон

А. Джон

Т. Аножани

Т. Кумара

А.Х. Видушан


Я пытался эти формулы, но не точный результат возвращается!

=LEFT(A1)& ". " & IF(ISNUMBER(FIND(" ",A1)),MID(A1,FIND(" ",A1)+1,1)," ") & ". " & IF(ISNUMBER(FIND(" ",A1)),MID(A1,FIND(" ",A1)+1,1)," ")& ". " & IF(ISNUMBER(FIND(" ",A1,FIND(" ",A1)+1)), RIGHT(A1,LEN(A1)-FIND("*",SUBSTITUTE(A1," ","*",LEN(A1)-LEN(SUBSTITUTE(A1," ",""))))),"")  =LEFT(A2)&IF(ISNUMBER(FIND(" ",A2)),MID(A2,FIND(" ",A2)+1,1)," ")&IF(ISNUMBER(FIND(" ",A2,FIND(" ",A2)+1)),MID(A2,FIND(" ",A2,FIND(" ",A2)+1)+1,1)," ") 

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

1
Вы попали в немного плохую ситуацию здесь ... [Первое правило имен - нет правил для имен.] (Http://www.kalzumeus.com/2010/06/17/falsehoods-programmers -believe-about-names /) Тем не менее, вам лучше всего зайти в VBA и использовать промежуточные переменные, а не эти безумные длинные формулы. Bob 7 лет назад 1
Мои знания VBA настолько же хороши, насколько мои знания в ядерной астрофизике или на суахили. !!! :-( Высоко ценю любую помощь. CRoshanLG 7 лет назад 0
Важно ли запускать это в Excel и / или иметь возможность запускать его несколько раз? Я имею в виду, конечно, это возможно - и у кого-то еще может быть ответ для вас - но это также не моя чашка чая;) если альтернативные решения приемлемы, тогда я могу попытаться помочь - просто зайдите в [chat] (http: / /chat.stackexchange.com/rooms/118/root-access) и пингуйте меня. В любом случае, первое, что вы можете сделать, это получить список всех возможных приветствий и молиться, чтобы они никогда не появлялись в настоящих именах. Bob 7 лет назад 1
Я открыт для альтернатив, пока они выполняют свою работу. Уже есть список приветствий и уверен, что они не встречаются в именах. CRoshanLG 7 лет назад 0
Вы сказали: «Мохамад Хуссейн Мохамад Нияс» должен быть изменен на «МХМ Нияс». Я думаю, что правильной формой будет «МХ Мохамад Нияс». Это похоже на сложную фамилию для меня. 7 лет назад 0
Ну, в этом конкретном случае, вы можете быть правы. Но я просто хотел передать, что есть имена из четырех частей, в общем смысле. :-) Спасибо за ответ. CRoshanLG 7 лет назад 0
Вот пример: https://ideone.com/hKmxrp - нажмите «Редактировать вверху слева», добавьте свои приветствия в код (помните, что это предполагает только одно приветствие для любого имени, без «Dr Dr Smith») и вставьте свой список имен в поле ввода ниже. Я уверен, что можно перевести в формулу VBA или Excel - например, в формуле вы можете использовать vlookup для проверки приветствий по списку в другом столбце. В любом случае, это немного для комментариев, так что лучше, если вы запрыгнете в чат - и это не совсем правильный ответ на заданный вопрос. Bob 7 лет назад 0
@FleetCommand Это подпадает под «нет правил для имен», может быть лучше сформулировать как «нет универсальных правил для имен». При работе с такими грязными данными, как этот, что-то * будет * искажено: \ - честно, вам, вероятно, лучше либо использовать его как есть, либо попросить пользователей вводить данные в формате исходно-последний. Bob 7 лет назад 0

1 ответ на вопрос

1
Moen

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

  1. Разделяйте слова - используя функцию text to column в Excel
  2. Организовать фамилии
  3. Используйте указанную вами формулу, чтобы взять инициалы балансовых слов
  4. СОГЛАСОВАТЬ, используя дополнительную строку для периодов после имени.

Надеюсь, поможет.

Я уже думал об этом. Но хотелось бы, чтобы был более простой и «более чистый» способ, потому что имена действительно перепутаны при разделении, потому что они имеют разное количество компонентов; таким образом, очень сложно написать функцию CONCATENATE. Спасибо, в любом случае. CRoshanLG 7 лет назад 0

Похожие вопросы