У меня есть список имен в Excel класса. Содержит столбец "ФИО". Полное имя состоит из 3 частей, а именно:1. Имя (FN)2. Отчество (MN)3. Фамилия (SN)

Например: Аашиш Аджит Ханда (FN) (MN) (SN)

Я хочу иметь возможность изменить то же самое на Aashish A. Handa, т. Е. Следует искать второе имя, и первый алфавит должен заменить (MN). Отчество отличается длиной символа.

2 ответа2

1

Выберите имена, которые соответствуют вашему шаблону, и запустите этот короткий макрос:

Sub NameFixer()
    Dim s As String, r As Range

    For Each r In Selection
        ary = Split(r.Text, " ")
        ary(1) = Left(ary(1), 1)
        r.Value = Join(ary, " ")
    Next r
End Sub

До:

и после:

(Поскольку нет проверки ошибок, избегайте выбора ячеек, которые не соответствуют вашему шаблону)

1

Неморфный способ решения этой же проблемы состоит в том, чтобы разбить 3 имени как формулу и объединить их. Я обычно использовал бы менеджер имен для этого, но также покажу расширенную формулу, которая не использует управление именами. (Все эти примеры будут использовать ячейку a1 как имеющую имя Name (пробел) Name (пробел) Name name Шаг 1 получит First name.

  1. Fname =+LEFT(Лист1!А1, НАЙТИ ("", Лист1!A1)) Это ищет первый пробел и возвращает все влево

  2. Lname =+RIGHT (Лист1!A1, LEN (Лист1!A1) -FIND ("", Sheet1!A1,1+LEN (Fname))) Возвращает фамилию. Нам нужно имя и фамилия, чтобы заключить в скобки ответ. Это предполагает, что есть только 2 пробела, и ищет 2-й пробел, выполняя поиск, который начинается после первого пробела.

  3. Mname = MID (Лист1!A1,1+LEN (Fname), LEN (Лист1!A1) -LEN (Fname) -LEN (Lname)) Возвращает полное отчество, используя Fname и Lname в скобках.

положить все это вместе

  1. =(Fname & LEFT(MName, 1) & "." & Lname) "." После левого (mname, 1) может быть "", если не требуется точка.

В одной строке без использования имен

  1. = ВЛЕВО (А1, НАЙТИ ("", А1))& ВЛЕВО (СРЕДНИЙ (А1, НАЙТИ ("", А1)+1,1))& "." & ВПРАВО (А1, LEN (А1)-FIND ("", A1,1+FIND ("", A1)))

Проблемы с этим подходом,

  • Чувствительный к проблемам структуры данных, поместите перед собой iferror с "Ошибка формата имени", например:
  • =+IFERROR(Fname & LEFT(MName, 1)& "" & Lname, "Ошибка формата имени")

Также может понадобиться сделать замену, чтобы заменить двойные пробелы одиночными пробелами.

  • Aname = замена (a1, "", "")

Что может понадобиться в зависимости от того, насколько хорош ваш источник данных в точном соответствии с форматом.

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