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

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

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

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

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

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

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

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

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

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

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

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

Комментарии

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

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

Подскажите пожалуйста. Добавил в код такое изменение
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 V / \ V V / ___) |
|_| |_| |_| |_| /_/ \_/\_/ \_/\_/ |____/
Введите код, изображенный в стиле ASCII-арт.

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

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