Пользовательская функция (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
В родительный падеж неправильно переводит. Должно быть не "АЗНАВУРЯН Карины Борисовны", а "АЗНАВУРЯН Карину Борисовну" (кого/чего).
Здравствуйте, Максим
Макрос предназначен только для ФИО - с прочими словами и фразами он работает некорректно
Чтобы регистр не изменялся, - удалите в макросе эту строку:
Здравствуйте. Испробовал Ваш макрос. Хочу сказать огромное спасибо и задать один вопрос:
Подскажите как сделать, чтобы второе слово в словосочетании писалось с маленькой буквы (если использовать макрос для склонения наименований организаций).
Спасибо за ответ, но у меня в таблице только фамилии с инициалами.
Если только фамилия нужна в родительном падеже, - то после склонения ФИО, при помощи формулы, оставьте только первое слово (текст до пробела)
В коде ничего менять не нужно.
Если в исходных данных - только фамилия (без имени-отчества), функция работать не будет, т.к. невозможно только по фамилии определить пол, а некоторые фамилии по-разному склоняются в зависимости от пола.
Пример - фамилии типа Лебедь, Головач, и т.д.
Если такая фамилия принадлежит женщине, - то она при склонении не меняется (а мужская - изменяется)
Если только фамилию нужно склонять, то что нужно обрезать?
А такое распространенное имя как Ольга в родительный падеж неправильно склоняет :-(
Я имел ввиду исключение склонения иностранных имён, оканчивающихся на "е" и "и".
У себя то я дописал.
Кстати, можете вспомнить русские имена таким же окончанием? Если нет, то можно просто внести в код.
А что мешает вам самостоятельно доработать код?
Это же очень просто, - надо взять строку
размножить её нужное количество раз,
поставив имена-исключения, и прописав для правильный результат склонения.
Кто-нибудь допилил скрипт? Не все правила для имён в мужском роде прописаны.
Огромное спасибо!
именно то что было нужно
Нет у меня такой функции. Была бы, — дал бы вам ссылку.
Сделать могу, но не бесплатно (много исключений, долго возиться с кодом)
так я не умею, поэтому и обращаюсь к специалистам в этом деле
Можно. Делайте.
Как сделаете — скиньте мне, я на сайте выложу.
А можно такой же файлик, только ещё с винительным падежом?
Чтобы три столбика подряд?
Отправить комментарий