Функция перевода ФИО в родительный падеж

Пользовательская функция (UDF) для перевода ФИО (фамилии, имя, отчества) в родительный падеж.

Новые версии функций (изменения от 2019 года) доступны в надстройке FIO + Propis

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

PS: Функция является переделкой аналогичной UDF для склонения в дательном падеже.
Тестировал склонение на списке разнообразных ФИО (см. первый столбец в прикреплённом файле), и заведомо корректных результатах склонения (третий столбец)

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

Если вы используете функции склонения для формирования документов,
обратите внимание на специализированную надстройку FillDocuments,

которая позволит вам одним нажатием кнопки создать документы Word и Excel по шаблонам, а также выполнить рассылку писем.

В указанную надстройку включены самые последние версии функций склонения.

Пример использования:

Sub ПереводФИОвРодительныйПадеж()
    ' если фамилия, имя и отчество - в одной переменной (или ячейке)
    FIO$ = "Сидоров Иван Скотиныч"
    РодительныйПадеж$ = GenitiveCase(FIO$)
    Debug.Print РодительныйПадеж$    ' результат: Сидорова Ивана Скотиныча

    ' если фамилия, имя и отчество - в разных переменных (или ячейках)
    НетКого$ = GenitiveCase("Андреева", "Ольга", "Федоровна")
    Debug.Print НетКого$    ' результат: Андреевой Ольги Федоровны
End Sub

Комментарии

Настройки просмотра комментариев

Выберите нужный метод показа комментариев и нажмите "Сохранить установки".

Не знаю из-за чего такая проблема.
Макрос простейший, там нечему вызывать ошибки / сбои.
Я проверял в Excel 2010 и в Excel 2016, проблем нет.
Может вы копировали код в свой файл, и скопировали неверно / не всё что надо / что-то лишнее, и проблема из-за этого.
Но в прикреплённом файле и в коде проблем никаких нет.

Тоже столкнулся с тем что выдает ошибку "Разрушительный сбой" (Office 2016). Выкрутился следующим образом: не ввожу формулу в ячейку, а через WorksheetChange отслеживаю изменения в столбце с ФИО и в нужные столбцы вставляю результат этих функций. При ошибке также как у тезки подсвечивает первую строку функции, в чем проблема так и не смог найти

Здравствуйте, Александр.
Проблема точно не из-за этой функции, — тут код простейший, он не может вызывать сбой.
Проблема или из-за другого макроса, либо из-за того что файл повреждён. Ну или глючная версия Office.
Такую ошибку я видел лишь несколько раз за 15 лет работы, когда в файле десятки тысяч строк кода, и где-то косяк в сложном макросе.
НЕ ВАЖНО КАКУЮ СТРОКУ ВЫДЕЛЯЕТ ЭКСЕЛЬ при разрушительном сбое. Это может быть любая строка кода в проблемном файле.

Замечательная функция спасибо огромное Автору, пользовался несколько лет на 2007 Ofice. Но когда перешел на 2013 Ofice появляется Ошибка: Разрушительный сбой. при этом VBA выделяет первую строку макроса (Public Function Genitive_Case(sSurname$, Optional sName$, Optional sPatronymic$) As String). Возможно сталкивались с таким и подскажите, что можно сделать?

Подскажите пожалуйста. Добавил в код такое изменение
Select Case Right(sName, 1)
Case "а": GenitiveCase = GenitiveCase & Mid(sName, 1, Len(sName) - 1) & "ы"
Case "я": GenitiveCase = GenitiveCase & Mid(sName, 1, Len(sName) - 1) & "и"
Case Else: GenitiveCase = GenitiveCase & sName
End Select

Select Case Right(sName, 2)
Case "ка": GenitiveCase = GenitiveCase & Mid(sName, 1, Len(sName) - 1) & "и"

End Select
В результате выдаёт: Вероникывероники
Что делаю не так? Как исправить?

Это вы перепутали родительный падеж с винительным.
См. пример здесь:
https://excelvba.ru/programmes/FillDocuments/manuals/SheetFunctions/cases

В родительный падеж неправильно переводит. Должно быть не "АЗНАВУРЯН Карины Борисовны", а "АЗНАВУРЯН Карину Борисовну" (кого/чего).

Здравствуйте, Максим
Макрос предназначен только для ФИО - с прочими словами и фразами он работает некорректно

Чтобы регистр не изменялся, - удалите в макросе эту строку:

GenitiveCase = StrConv(GenitiveCase, vbProperCase)

Здравствуйте. Испробовал Ваш макрос. Хочу сказать огромное спасибо и задать один вопрос:
Подскажите как сделать, чтобы второе слово в словосочетании писалось с маленькой буквы (если использовать макрос для склонения наименований организаций).

Спасибо за ответ, но у меня в таблице только фамилии с инициалами.

Если только фамилия нужна в родительном падеже, - то после склонения ФИО, при помощи формулы, оставьте только первое слово (текст до пробела)
В коде ничего менять не нужно.

Если в исходных данных - только фамилия (без имени-отчества), функция работать не будет, т.к. невозможно только по фамилии определить пол, а некоторые фамилии по-разному склоняются в зависимости от пола.
Пример - фамилии типа Лебедь, Головач, и т.д.
Если такая фамилия принадлежит женщине, - то она при склонении не меняется (а мужская - изменяется)

Если только фамилию нужно склонять, то что нужно обрезать?

А такое распространенное имя как Ольга в родительный падеж неправильно склоняет :-(

Я имел ввиду исключение склонения иностранных имён, оканчивающихся на "е" и "и".
У себя то я дописал.

Кстати, можете вспомнить русские имена таким же окончанием? Если нет, то можно просто внести в код.

А что мешает вам самостоятельно доработать код?

Это же очень просто, - надо взять строку

Case "Павел": GetGenitiveException = "Павла"

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

Кто-нибудь допилил скрипт? Не все правила для имён в мужском роде прописаны.

Огромное спасибо!
именно то что было нужно

Нет у меня такой функции. Была бы, — дал бы вам ссылку.
Сделать могу, но не бесплатно (много исключений, долго возиться с кодом)

так я не умею, поэтому и обращаюсь к специалистам в этом деле

Можно. Делайте.
Как сделаете — скиньте мне, я на сайте выложу.

А можно такой же файлик, только ещё с винительным падежом?
Чтобы три столбика подряд?

Отправить комментарий

Содержание этого поля является приватным и не предназначено к показу.
CAPTCHA
Подтвердите, пожалуйста, что вы - человек:
 __        __  ____    ____    _   _           ___  
\ \ / / | ___| / ___| | \ | | ___ ( _ )
\ \ /\ / / |___ \ \___ \ | \| | / __| / _ \
\ V V / ___) | ___) | | |\ | | (__ | (_) |
\_/\_/ |____/ |____/ |_| \_| \___| \___/
Введите код, изображенный в стиле ASCII-арт.

Не получается применить макрос? Не удаётся изменить код под свои нужды?

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