Excel фамилия инициалы. Объединение имени и фамилии. Найти имя в ФИО

Excel фамилия инициалы. Объединение имени и фамилии. Найти имя в ФИО

Часто при составлении договора, счета, коммерческого предложения или другого документа, мы работаем с фамилией именем и отчеством клиента. Бывает необходимо разделить ФИО и получить только имя, что обратиться к клиенту в тексте документа, бывает нужно сделать графу с подписантом, оставив фамилию и инициалы.

Конечно можно написать формулу , которая извлечет нужные данные из ФИО, но даже опытному человеку потребуется 5-7 минут на это. А что если заранее не знаешь расположение фамилии в тексте? Гораздо проще и удобнее пользоваться готовыми функциями из надстройки VBA-Excel .

Найти фамилию в ФИО

После установки надстройки будет доступна новая функция =ФАМИЛИЯ(ФИО) , где

  • ФИО - текст или ссылка на ячейку, которая содержит ФИО полностью

Задача данной функции - извлечь из ячейки только фамилию. Причем ей не важен порядок. Фамилия может идти как в начале, так в конце или середине текста.

Найти имя в ФИО

Аналогичная функция для имени =ИМЯ(ФИО) . Она извлекает имя из текста с ФИО, также не важно где расположенное.

Найти отчество в ФИО

Последняя функция из этой серии - функция =ОТЧЕСТВО(ФИО) для извлечения отчества.

Примеры работы с ФИО в Excel

Вывести фамилию и инициалы

Одной из распространенных задач при составлении документов - это преобразование текста вида Фамилия Имя Отчество к тексту Фамилия И. О. Решить ее можно используя следующую формулу:

ФАМИЛИЯ(A1)&" "&ЛЕВСИМВ(ИМЯ(A1))&". "&ЛЕВСИМВ(ОТЧЕСТВО(A1))&"."

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

Также плюс в том, что нам не важно расположение фамилии в тексте, функция определит все автоматически.

Раннее мы рассматривали возможность на примере деления ФИО на составные части. Для этого мы использовали инструмент в Excel «Текст по столбцам».

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

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

У нас есть столбец со списком ФИО, наша задача разместить фамилию, имя отчество по отдельным столбцам.

Попробуем очень подробно описать план действия и разобьем решение задачи на несколько этапов.

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

Итак, добавим столбцы позиция 1-го и 2-го пробелам. С помощью функции НАЙТИ, как мы уже рассматривали в предыдущей статье найдем позицию первого пробелам. Для этого в ячейке «H2» пропишем формулу

НАЙТИ(" ";A2;1)

Теперь нам необходимо найти порядковый номер второго пробела. Формула будет такая же, но с небольшим отличием. Если прописать такую же формулу, то функция найдет нам первый пробел, а нам нужен второй пробел. Значит на необходимо поменять третий аргумент в функции НАЙТИ — начальная позиция — то есть позиция с которой функция будет искать искомый текст. Мы видим, что второй пробел находится в любом случае после первого пробела, а позицию первого пробела мы уже нашли, значит прибавив 1 к позиции первого пробелам мы укажем функции НАЙТИ искать пробел начиная с первой буквы после первого пробела. Функция будет выглядеть следующим образом:

Приступаем к делению первой части текста — Фамилии

Для этого мы воспользуемся функцией , напомню синтаксис данной функции:

ПСТР(текст ; начальная_позиция ; число_знаков ), где

  1. текст — это ФИО, в нашем примере это ячейка A2;
  2. начальная_позиция - в нашем случае это 1, то есть начиная с первой буквы;
  3. число_знаков — мы видим, что фамилия состоит из всех знаков, начиная с первой буквы и до 1-го пробела. А позиция первого пробела нам уже известна. Это и будет количество знаков минус 1 знак самого пробела.

Формула будет выглядеть следующим образом:

ПСТР(A2 ;1 ;H2-1 )

Приступаем к делению второй части текста — Имя

Снова используем функцию =ПСТР(текст ; начальная_позиция ; число_знаков ), где

  1. текст — это тот же текст ФИО, в нашем примере это ячейка A2;
  2. начальная_позиция - в нашем случае Имя начинается с первой буква после первого пробела, зная позицию этого пробела получаем H2+1 ;
  3. число_знаков — число знаков, то есть количество букв в имени. Мы видим, что имя у нас находится между двумя пробелами, позиции которых мы знаем. Если из позиции второго пробела отнять позицию первого пробела, то мы получим разницу, которая и будет равна количеству символов в имени, то есть I2-H2

Получаем итоговую формулу:

ПСТР(A2 ;H2+1 ;I2-H2 )

Приступаем к делению третьей части текста — Отчество

И снова функция =ПСТР(текст ; начальная_позиция ; число_знаков ), где

  1. текст — это тот же текст ФИО, в нашем примере это ячейка A2 ;
  2. начальная_позиция - Отчество у нас находится после 2-го пробелам, значит начальная позиция будет равна позиции второго пробела плюс один знак или I2+1 ;
  3. число_знаков — в нашем случае после Отчества никаких знаков нет, поэтому мы просто может взять любое число, главное, чтобы оно было больше возможного количества символов в Отчестве, я взял цифру с большим запасом — 50

Получаем функцию

ПСТР(A2 ;I2+1 ;50 )

Далее выделяем все три ячейки и протягиваем формулы вниз и получаем нужный нам результат. На этом можно закончить, а можно промежуточные расчеты позиции пробелов прописать в сами формулы деления текста. Это очень просто сделать. Мы видим, что расчет первого пробела находится в ячейке H2 - НАЙТИ(" ";A2;1) , а расчет второго пробела в ячейке I2 — НАЙТИ(" ";A2;H2 +1) . Видим, что в формуле ячейки I2 встречается H2 меняем ее на саму формулу и получаем в ячейке I2 вложенную формулу

Смотрим первую формулу выделения Фамилии и смотрим где здесь встречается H2 или I2 и меняем их на формулы в этих ячейках, аналогично с Именем и Фамилией

  • Фамилия =ПСТР(A2;1;H2 -1) получаем =ПСТР(A2;1;НАЙТИ(" ";A2;1) -1)
  • Имя =ПСТР(A2;H2 +1;I2 -H2 ) получаем =ПСТР(A2;НАЙТИ(" ";A2;1) +1;
    НАЙТИ(" ";A2;НАЙТИ(" ";A2;1)+1) -НАЙТИ(" ";A2;1) )
  • Отчество =ПСТР(A2;I2 +1;50) получаем =ПСТР(A2;НАЙТИ(" ";A2;НАЙТИ(" ";A2;1)+1) +1;50)

Теперь промежуточные вычисления позиции пробелом можно смело удалить. Это один из приемов, когда для простоты сначала ищутся промежуточные данные, а потом функцию вкладывают одну в другую. Согласитесь, если писать такую большую формулу сразу, то легко запутаться и ошибиться.

Надеемся, что данный пример наглядно показал вам, как полезны текстовые функции Excel для работы с текстом и как они позволяют делить текст автоматически с помощью формул однотипные данные. Если вам понравилась статья, то будем благодарны за нажатие на +1 и мне нравится. Подписывайтесь и вступайте в нашу группу вконтакте.

Пример 2. Как разделить текст по столбцам в Excel с помощью формулы

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

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


Напомним, что вручную (без формул) это задача очень просто решается с помощью , который мы уже рассматривали. В нашем же случае требуется это сделать с помощью формул.

Для начала необходимо найти общий разделить, по которому мы будет разбивать текст. В нашем случае это запятая, но например в первой задаче мы делили ФИО и разделитель был пробел. Наш второй пример более универсальный (более удобный при большом количестве данных), так например мы удобно могли бы делить не только ФИО по отдельным ячейкам, а целое предложение — каждое слово в отдельную ячейку. Собственно такой вопрос поступил в комментариях, поэтому было решено дополнить эту статью.

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


Теперь основная суть приема.

Шаг 1 . В вспомогательном столбце находим позицию первого разделителя с помощью функции НАЙТИ. Описывать подробно функцию не буду, так как мы уже рассматривали ее раннее. Пропишем формулу в D1 и протянем ее вниз на все строки

НАЙТИ(B1;A1;1 )

То есть ищем запятую, в тексте, начиная с позиции 1


НАЙТИ($B1 ;$A1;D1+1 )

Во-первых: закрепим столбец искомого значения и текста, чтобы при протягивании формулы вправо ссылки на ячейки не сдвигалась. Для этого нужно написать доллар перед столбцом B и A — либо вручную, либо выделить A1 и B1, нажать три раза клавишу F4, после этого ссылки станут не относительными, а абсолютными.

Во-вторых: третий аргумент — начало позиции мы рассчитаем как позиция предыдущего разделителя (мы его нашли выше) плюс 1 то есть D1+1 так как мы знаем, что второй разделитель точно находится после первого разделителя и нам его не нужно учитывать.

Пропишем формулу и протянем ее вниз.


Шаг 3. Находимо позиции всех остальных разделителей. Для этого формулу нахождения второго разделителя (шаг 2) протянем вправо на то количество ячеек, сколько всего может быть отдельно разбитых значений с небольшим запасом. Получим все позиции разделителей. Там где ошибка #Знач означает что значения закончились и формула больше не находит разделителей. Получаем следующее


Шаг 4. Отделяем первое число от текст с помощью функции ПСТР.

ПСТР(A1;1 ;D1-1 )

Начальная позиция у нас 1 , количество знаков мы рассчитываем как позиция первого разделителя минус 1: D1-1 протягиваем формулу вниз

Шаг 5 . Находимо второе слово так же с помощью функции ПСТР в ячейке P1

ПСТР($A1;D1+1;E1-D1-1)

Начальная позиция второго числа у нас начинается после первой запятой. Позиция первой запятой у нас есть в ячейке D1, прибавим единицу и получим начальную позицию нашего второго числа.

Количество знаков это есть разница между позицией третьего разделителя и второго и минус один знак, то есть E1-D1-1

Закрепим столбец A исходного текста, чтобы он не сдвигался при протягивании формулы право.

Шаг 6 . Протянем формулу полученную на шаге 5 вправо и вниз и получим текст в отдельных ячейках.

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

ЕСЛИОШИБКА(ПСТР($A1;D1+1;E1-D1-1); "")

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

НАЙТИ($B1;$A1;C1+1)

а первого текста как

ПСТР($A1;C1+1;D1-C1-1)

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

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

Либо второе решение — это на шаге 3, когда мы составляем формулу вычисления позиций разделителей дополнить ее. Сделать проверку, если ошибка, то указываем заведомо большое число, например 1000.

ЕСЛИОШИБКА(НАЙТИ($B1;$A1;C1+1);1000)


Функция получает в качестве параметра текстовую строку с виде "Фамилия имя отчество", и обрезает имя и отчество, оставляя лишь инициалы - в виде "Фамилия И. О."

Данную функцию можно использовать как UDF (определённые пользователем функции) в ячейках листа Excel .
(см. пример во вложении)

Описание особенностей функции - на форуме: programmersforum.ru/showpost.php?p=757147&postcount=6

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

Кроме того, разные органы (в разное время) придерживались (-ются) разных взглядов на то как в том или ином случае должны выглядеть инициалы.
Одно дело документы УФМС - другое, регистраторы ЦБ, третье - оформление коммерческих документов.
Так, часть служб требует что бы 2-3 сложные короткие имена Юго-Восточной Азии не сокращались. А часть нет.

Да же с вопросом где должны стоять инициалы справа или слева - нет однозначности. Нет, конечно есть правила русского языка... Но превалируют правила делового оборота той или иной структуры (или просто как захочет левая задняя нога клерка принимающего документы)...

У многих возможно возникает вопрос: А откуда берётся весь этот зоопарк и зачем это всё нужно? Как правило, все эти Доны Педро - иностранные граждане получающие Российский паспорт на основании ранее выданных вне юрисдикции РФ документов. Ситуации правовые бывают разные. И достаточно часто в новый Российский паспорт пишется вариант транслитерации на кириллицу с языка носителя.
Российские паспорта с -оглы и -кызы выдаются сейчас в Татарстане. Мне встретился клиент которого по паспорту 2007 г. звали Мустафа Олег оглы...

Option Compare Text Public Function Инициалы(s As String , Optional ToLeft As Boolean = False ) Dim sv As Variant , sФ As String , sИ As String , sО As String , i As Long , k As Long Application.Volatile True If InStr(s, "." ) > 0 Or Len(Trim$(s)) = 0 Then Инициалы = s "Инициалы заданы явно или пустая строка Exit Function End If "Нормализация входной строки s = Replace(Application.Trim(s), Chr(30), "-" ) s = Replace(Replace(s, " -" , "-" ), "- " , "-" ) s = Replace(Replace(s, "" " , """ ), " "" , """ ) " О "Генри Александр; О" Генри Александр; Н" Гомо; Д" Тревиль sv = Split(s) sИ = vbNullString: sО = vbNullString: sФ = vbNullString i = UBound (sv) If i < 1 Then Инициалы = s: Exit Function Select Case sv(i) Case "оглы" , "кызы" , "заде" "бей, бек, заде, зуль, ибн, кызы, оглы, оль, паша, уль, хан, шах, эд, эль i = i - 1 sО = UCase(Left$(sv(i), 1)) & "." i = i - 1 Case "паша" , "хан" , "шах" , "шейх" i = i - 1 Case Else Select Case Right$(sv(i), 3) Case "вич" , "вна" If i >= 2 Then "Стандартное окончание русских отчеств sО = СropWord(sv(i)) Else "Имя типа Босан Славич sИ = СropWord(sv(i)): sФ = sv(0) End If i = i - 1 Case Else k = InStr(sv(i), "-" ) If k > 0 Then Select Case Mid$(sv(i), k + 1) Case "оглы" , "кызы" , "заде" , "угли" , "уулы" , "оол" "Вариант насаба «-оглы» и «-заде» типа Махмуд-оглы sО = UCase(Left$(sv(i), 1)) & "." i = i - 1 If i = 0 Then sИ = sО sО = vbNullString End If End Select ElseIf i > 2 Then Select Case sv(i - 1) Case "ибн" , "бен" , "бин" sО = UCase(Left$(sv(i), 1)) & "." " Усерталь Алишер бен Сулейман i = i - 2 End Select Else " Бен Эдуард sИ = UCase(Left$(sv(i), 1)) If Len(sv(i)) > 1 Then sИ = sИ & "." i = i - 1 End If End Select End Select Select Case sv(0) Case "де" , "дел" , "дос" , "cент" , "ван" , "фон" , "цу" If i >= 2 Then sФ = sv(0) & " " & StrConv(sv(1), vbProperCase) sИ = СropWord(sv(2)) Else "Де Николай If Len(sИ) > 0 Then sФ = sv(0) & " " & StrConv(sv(1), vbProperCase) Else sФ = StrConv(sv(0), vbProperCase): sИ = СropWord(sv(1)) End If End If Case Else If Len(sФ) = 0 Then "Ещё не определили фамилию sФ = StrConv(sv(0), vbProperCase) If Len(sИ) = 0 Then sИ = СropWord(sv(1)) End If End Select If ToLeft Then Инициалы = sИ & sО & " " & sФ Else Инициалы = sФ & " " & sИ & sО End Function Public Function СropWord(s As Variant ) As String If Len(s) = 1 Then СropWord = s Else ss$ = UCase(Left$(s, 1)) & "." : k = InStr(s, "-" ) If k > 0 Then ss$ = ss$ & "-" & Mid$(s, k + 1, 1) & "." СropWord = ss$ End If End Function

Вложение Размер

Список в Excel можно корректировать формулами – имя и отчество заменить на инициалы, соединить слова из ячеек в предложение, вставить слова в список Excel.
У нас есть таблица, где фамилия, имя и отчество написаны в разных ячейках. Нам нужно разместить их в одной ячейке. Вручную переписывать список долго. Но, в таблице Excel, есть специальная функция. Есть два варианта.
Первый вариант.
У нас такой список.
Нам нужно написать в ячейке D1 ФИО одним предложением. Пишем в этой ячейке (D1) формулу. Нажимаем на ячейку (активной сделаем).
Заходим на закладке «Формулы» в раздел «Библиотека функций», выбираем – «Текстовые», и выбираем функцию «СЦЕПИТЬ». В появившемся окне указываем адреса ячеек, которые нам нужно объединить в одно предложение. Получилось так.

ФИО написаны без пробелов. Чтобы это исправить, формулу нужно доработать. Между адресами ячеек после точки с запятой написать " " . Получилась такая формула.
=СЦЕПИТЬ(A1;" ";B1;" ";C1)
Получилось так.
Теперь формулу копируем вниз по столбцу.
Второй вариант.
Вместо функции «СЦЕПИТЬ» можно просто нажать кнопку амперсанд (&). Формула получится такая.
=A2&B2&С1
Результат такой же, как в первом варианте. Если нет пропусков между словами, то вставьте пробел (" " ).
Формула будет такая. =A2&" "&B2&" "&C2
Объединить можно не только слова, но и цифры. Можно составить предложение из данных ячеек в Excel .
Можно установить формулы в нужных ячейках бланка. Например, у нас есть такой список клиентов с адресами.

Нам нужно составить предложение. В ячейке пишем формулу.
=A2&" "&B2&" "&C2&" "&"проживает по адресу"&" "&"г."&" "&D2&" "&"ул."&" "&E2&" "&"д."&" "&F2&"."
Получилось такое предложение.

По такому принципу составляем любые предложения.
Если текст в ячейках уже написан, но нам нужно вставить дополнительные слова перед имеющимися, то сделать это можно с помощью формулы. У нас такой список.
Нам нужно перед фамилиями вставить слово «Квартиросъемщик». В ячейке нового столбца пишем формулу.
="Квартиросъемщик"&" "&A8
Копируем эту формулу вниз по столбцу. Получился такой список.
Первый столбец можно скрыть или скопировать значение нового столбца без формул, а первый столбец и второй с формулами - удалить.
Ещё один способ добавить текст, числа, символ к тексту в ячейке, смотрите в статье "Добавить текст в ячейки с текстом Excel ".
С помощью формул можно преобразовать список, где имя, отчество и фамилия написаны полностью, в список с фамилией и инициалами . Например, в ячейке написано.
В соседнем столбце пишем такую формулу.
=СЦЕПИТЬ(ЛЕВСИМВ(СЖПРОБЕЛЫ(A1);НАЙТИ(" ";СЖПРОБЕЛЫ(A1);1));ПСТР(СЖПРОБЕЛЫ(A1);НАЙТИ(" ";СЖПРОБЕЛЫ(A1);1)+1;1);".";ПСТР(СЖПРОБЕЛЫ(A1);НАЙТИ(" ";СЖПРОБЕЛЫ(A1);НАЙТИ(" ";СЖПРОБЕЛЫ(A1);1)+1)+1;1);".")
Получилось.
Если между словами появились лишние пробелы, их можно удалить. Подробнее о б этом читайте в статье "Как удалить лишние пробелы в Excel ". Этими же способами можно удалить пробелы между числами, в формуле, т.к. лишние пробелы могут привести к ошибке при подсчете или формула не будет считать.
Можно данные в строке переместить из последних ячеек в первые, перевернуть строку . Например, в ячейках написано: в первой ячейке Иванова, во второй - Мария. Нам нужно написать в первой ячейке Мария, во второй - Иванова. Как это сделать быстро в большой таблице, смотрите в статье " ".

просмотров