Склонение по падежам в Excel
Функция СКЛОНЕНИЕ
Не сложно догадаться, для чего необходима функция =СКЛОНЕНИЕ(ТЕКСТ;ПАДЕЖ). Практически любое существительное или ФИО она переведет из именительного падежа в нужный падеж.
Подчеркну слово практически, так как имеются фамилии, которые без программы то сложно просклонять, но в 90% случаев макрос отрабатывает достойно. Проверяйте сложные или необычные фамилии дополнительно.
Формула имеет всего 2 аргумента:
- ТЕКСТ — Существительное, имя, фамилия или отчество в именительном падеже, который необходимо просклонять. Вы также можете использовать несколько слов в качестве аргумента. Например, указать полностью ФИО.
- ПАДЕЖ — Числовое значение определяющее падеж:
- Именительный.
- Родительный.
- Дательный.
- Винительный.
- Творительный.
- Предложный.
Вот так выглядит стандартное окно ввода параметров функции СКЛОНЕНИЕ
Функция СКЛОНЕНИЕУКР
Аналогичная функция, которая склоняет ФИО и существительные, но только на украинском языке. Синтаксис у нее также не отличается =СКЛОНЕНИЕУКР(ТЕКСТ;ПАДЕЖ).
Далее приводятся примеры, наглядно демонстрирующие работу функции.
Обращаю ваше внимание, что для корректной работы данных функций необходимо стабильное подключение к интернету, а точнее к сайту Морфер.ру. Имеется также суточное ограничение на использование функций, которое в настоящий момент составляет 1000 склонений.
Пример 1
Склонение простой фамилии по всем падежам.
Пример 2
Склонение сразу фамилии имени и отчества по всем падежам.
Пример 3
Склонение сложных фамилий и имен в родительный падеж.
Источник статьи: http://micro-solution.ru/projects/addin_vba-excel/declension
Функция перевода ФИО в родительный падеж
Пользовательская функция (UDF) для перевода ФИО (фамилии, имя, отчества) в родительный падеж.
Новые версии функций (изменения от 2019 года) доступны в надстройке FIO + Propis
Эту функцию можно использовать как в коде программы, так и как формулу в ячейках листа Excel
(см. пример в прикреплённом файле)
PS: Функция является переделкой аналогичной UDF для склонения в дательном падеже.
Тестировал склонение на списке разнообразных ФИО (см. первый столбец в прикреплённом файле), и заведомо корректных результатах склонения (третий столбец)
Конечно, код не идеальный, — всегда можно найти ФИО, которые будут склоняться неверно.
Но, в целом, удалось добиться весьма неплохого результата (по сравнению с прежней версией кода, и другими аналогичными функциями)
Если вы используете функции склонения для формирования документов,
обратите внимание на специализированную надстройку FillDocuments,
которая позволит вам одним нажатием кнопки создать документы Word и Excel по шаблонам, а также выполнить рассылку писем.
В указанную надстройку включены самые последние версии функций склонения.
Код функции GenitiveCase (версия от 29 января 2013 года):
Option Compare Text ‘ эта строка нужна обязательно! (сравнение без учёта регистра)
Function GenitiveCase(sSurname$, Optional sName$, Optional sPatronymic$) As String
‘ Функция формирует родительный падеж из ФИО
‘ Параметры: sSurname — фамилия, sName — имя, sPatronymic — отчество
‘ © 2013 EducatedFool
Application.Volatile True ‘ автопересчёт формулы на листе
sSurname$ = Replace(sSurname$, » — » , «-» ): sSurname$ = Replace(Replace(sSurname$, » -» , «-» ), «- » , «-» )
On Error Resume Next
If sName$ = «» And sPatronymic$ = «» Then
arr = Split(Application.Trim(sSurname$))
sSurname$ = arr(0): sName$ = arr(1): sPatronymic$ = Replace(arr(2), «.» , «» )
End If
‘ пол теперь определяется иначе: что заканчивается на «вна» или «кызы» — то женщины, остальные — мужчины.
Dim bMaleSex As Boolean : ‘ bMaleSex = (Right(sPatronymic, 1) = «ч» Or Right(sPatronymic, 4) = «оглы» )
bMaleSex = Not (Right(sPatronymic, 2) = «на» Or Right(sPatronymic, 4) = «кызы» )
If Len(sSurname) > 0 Then ‘ Фамилия
arrSurname = Split(sSurname, «-» )
For i = LBound (arrSurname) To UBound (arrSurname) ‘ перебираем все части фамилий, содержащих дефис
sRes = «» : sSurnamePart = arrSurname(i)
If bMaleSex Then ‘ мужские фамилии
Select Case Right(sSurnamePart, 1)
Case «о» , «и» , «ы» , «у» , «э» , «е» , «ю» : sRes = sSurnamePart
Case «й» : sRes = Mid(sSurnamePart, 1, Len(sSurnamePart) — 2) & «ого»
Case «ь» : sRes = Mid(sSurnamePart, 1, Len(sSurnamePart) — 1) & «я»
Case «я» : sRes = Mid(sSurnamePart, 1, Len(sSurnamePart) — 1) & «и»
Case «а» : sRes = Mid(sSurnamePart, 1, Len(sSurnamePart) — 1) & «ы»
If UBound (arrSurname) > 0 And i = 0 Then sRes = sSurnamePart
Case Else : sRes = sSurnamePart & «а»
End Select
Select Case Right(sSurnamePart, 2) ‘ добавлено, для редких фамилий
Case «ец» : sRes = Mid(sSurnamePart, 1, Len(sSurnamePart) — 2) & «ца»
If LCase(sSurnamePart) Like «*[уеыаоэяиюё]ец» Then sRes = Mid(sSurnamePart, 1, Len(sSurnamePart) — 1) & «ца»
If LCase(sSurnamePart) Like «*[!уеыаоэяиюё][!уеыаоэяиюё]ец» Then sRes = sSurnamePart & «а»
Case «зе» , «их» , «ых» : sRes = sSurnamePart
Case «ий» , «ой» : sRes = Mid(sSurnamePart, 1, Len(sSurnamePart) — 2) & «ого»
If Len(sSurnamePart) Then sRes = Mid(sSurnamePart, 1, Len(sSurnamePart) — 1) & «я»
If Right(sSurnamePart, 3) = «чий» Then sRes = Mid(sSurnamePart, 1, Len(sSurnamePart) — 2) & «его»
Case «уй» : sRes = Mid(sSurnamePart, 1, Len(sSurnamePart) — 2) & «уя»
End Select
Else ‘ женские фамилии
Select Case Right(sSurnamePart, 1)
Case «о» , «е» , «э» , «и» , «ы» , «у» , «ю» , «б» , «в» , «г» , «д» , «ж» , «з» , «к» , «л» , «м» , «н» , «п» , _
«р» , «с» , «т» , «ф» , «х» , «ц» , «ч» , «ш» , «щ» , «ь» , «й» : sRes = sSurnamePart
Case «а» : sRes = Mid(sSurnamePart, 1, Len(sSurnamePart) — 1) & «ой»
Case «я» : sRes = Mid(sSurnamePart, 1, Len(sSurnamePart) — 2) & «ю»
Case Else : sRes = Mid(sSurnamePart, 1, Len(sSurnamePart) — 1) & «у»
End Select
Select Case Right(sSurnamePart, 2) ‘ добавлено, для редких фамилий
Case «ха» : sRes = Mid(sSurnamePart, 1, Len(sSurnamePart) — 2) & «хи»
Case «ла» : sRes = Mid(sSurnamePart, 1, Len(sSurnamePart) — 2) & «лы»
Case «ая» : sRes = Mid(sSurnamePart, 1, Len(sSurnamePart) — 2) & «ой»
End Select
‘ не склоняются мужские и женские фамилии, оканчивающиеся на -о, -е, -э, -и, -ы, -у, -ю,
‘ а также на -а с предшествующей гласной
If LCase(sSurnamePart) Like «*[уеыаоэяиюё]а» Then sRes = sSurnamePart
arrSurname(i) = sRes
Next
GenitiveCase = Join(arrSurname, «-» ) & » » ‘ соединяем части склоняемой фамилии обратно в одну строку
End If
If Len(sName) > 0 Then ‘ Имя
NameException$ = GetGenitiveException(sName)
If Len(NameException$) Then ‘ для имен-исключений
GenitiveCase = GenitiveCase & NameException$
Else ‘ имя не найдено в списке исключений
If bMaleSex Then
Select Case Right(sName, 1)
Case «й» , «ь» : GenitiveCase = GenitiveCase & Mid(sName, 1, Len(sName) — 1) & «я»
Case «а» : GenitiveCase = GenitiveCase & Mid(sName, 1, Len(sName) — 1) & «ы»
Case «я» : GenitiveCase = GenitiveCase & Mid(sName, 1, Len(sName) — 1) & «и»
Case «о» : GenitiveCase = GenitiveCase & sName
Case Else : GenitiveCase = GenitiveCase & sName & «а»
End Select
Else
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
End If
End If
GenitiveCase = GenitiveCase & » »
End If
If Len(sPatronymic) > 0 Then ‘ Отчество
If Right(sPatronymic, 4) = «оглы» Or Right(sPatronymic, 4) = «кызы» Then
GenitiveCase = GenitiveCase & sPatronymic
Else
If bMaleSex Then
GenitiveCase = GenitiveCase & sPatronymic & «а»
Else
GenitiveCase = GenitiveCase & Mid(sPatronymic, 1, Len(sPatronymic) — 1) & «ы»
End If
End If
End If
GenitiveCase = Replace(GenitiveCase, «-» , «- » ): GenitiveCase = StrConv(GenitiveCase, vbProperCase): GenitiveCase = Replace(GenitiveCase, «- » , «-» )
End Function
Function GetGenitiveException( ByVal txt$) As String ‘ склонение имён-исключений
Select Case txt$
Case «Павел» : GetGenitiveException = «Павла»
Case «Лев» : GetGenitiveException = «Льва»
Case «Пётр» : GetGenitiveException = «Петра»
Case «Любовь» : GetGenitiveException = «Любови»
‘ без изменения (не склоняются) — перечисляем через запятую
Case «Али» , «Бали» : GetGenitiveException = txt$
End Select
End Function
Источник статьи: http://excelvba.ru/code/GenitiveCase
Склонение по падежам — формулы и макросы
Перевод в именительный падеж в Excel
Важно: процесс перевода слов из родительного, дательного и т.д. падежей в Excel в именительный — лемматизация. Лемматизация в Excel тоже поддерживается надстройкой !SEMTools, но здесь речь не о ней, а об обратном процессе — склонении начальной формы в остальные.
Вас также может заинтересовать склонение ФИО в Excel.
Перевод из начальной формы в остальные
Периодически специалистам, чья деятельность связана с написанием большого количества текстов — SEO/PPC специалистам, контент-менеджерам, администраторам баз данных и каталогов, копирайтерам и т.д. — бывает нужна возможность просклонять слова по падежам.
Мечта каждого — сделать это прямо в Excel с помощью простых функций.
Морфология в Excel — !SEMTools
Надстройка !SEMTools дает такую возможность! Причем как платная, так и бесплатная версия.
Пример файла с функциями
По ссылке можно скачать файл-пример, в котором использованы все функции склонения по падежам — для существительных, прилагательных и числительных. Функции будут работать автоматически у любого, кто скачал и установил надстройку !SEMTools. Надстройка совместима с Excel 2010, 2013, 2016, 2019 и Excel 365 для ОС Windows.
Отличие бесплатной версии — в ней это возможно сделать только вышеуказанными формулами.
Макросы (ниже) в бесплатной версии применить тоже получится, но присутствует ограничение — обрабатываются только часть исходных данных, треть данных заменяется дисклеймером «Доступно в полной версии».
Макросы склонения по падежам в Excel
Активированная версия надстройки поддерживает и формулы, и макросы. Макросы можно вызывать с помощью меню «Слова» в группе «ИЗМЕНИТЬ«.
Меню склонения по падежам в !SEMTools
Как и большинство остальных макросов надстройки, макросы склонения работают «на месте», поэтому строго рекомендуется производить операции на копии столбца с исходными данными. Для корректной работы слова должны быть в начальной форме — именительном падеже.
ВАЖНО: как функции, так и макросы склонения не знают, какие части речи им дали на вход, и смотрят только на окончания, склоняя все слова в ячейке как существительные или прилагательные.
Склонение существительных
Число | Доступные словоформы для склонения |
---|---|
Единственное | Единственное число: родительный, дательный, винительный, творительный, предложный Множественное число: именительный, родительный, дательный, винительный, творительный, предложный |
Множественное | Родительный, дательный, винительный, творительный, предложный — любой вариант |
Объяснение к таблице ниже: если исходная словоформа в именительном падеже множественного числа, из нее можно произвести только падежи множественного. Чтобы получить словоформы единственного числа, потребуется сначала преобразовать слова в их леммы (именительный падеж единственного числа) с помощью процедуры лемматизации. И уже после этого склонять в любые другие.
Очень хочется довести функционал до совершенства, но склонение существительных практически не поддается простой алгоритмизации — есть десятки правил и сотни исключений из них.
Склонение прилагательных
Аналогично склонению существительных, надстройка может генерировать любые словоформы для леммы
Форма | Отвечает на вопрос | Доступные словоформы для склонения |
---|---|---|
Лемма (единственное число, именительный падеж, мужской род) | Какой? | Все остальные из 36 словоформ, кроме исходной: 3 рода (мужской, женский, средний) * 2 числа (единственное, множественное) * 6 падежей (именительный, родительный, дательный, винительный, творительный, предложный) |
Именительный падеж, женский род | Какая? | 11 падежей женского рода: Единственное число: родительный, дательный, винительный, творительный, предложный Множественное число: именительный, родительный, дательный, винительный, творительный, предложный |
Именительный падеж, средний род | Какое? | 11 падежей среднего рода: Единственное число: родительный, дательный, винительный, творительный, предложный Множественное число: именительный, родительный, дательный, винительный, творительный, предложный |
Склонение чисел (имен числительных)
Числительные при склонении меняют не только окончания, но и меняются в середине. Алгоритм разработки решения, которое учитывало бы все вариации, довольно сложен и пестрит множеством условий. Надстройка решает и эту задачу. Особенно здорово функции выглядят в сочетании с функционалом число прописью, смотрите пример:
На примере ниже показано склонение обычных числительных. Используется макрос склонения существительных в единственном числе. При этом, если числительные созвучны с прилагательными (например, «тридцать четвертая«), нужно использовать макросы склонения прилагательных.
Склонение числительных в Excel
Склонение ФИО в Excel
Склонение ФИО отличается от обычного склонения слов по падежам и имеет ряд особенностей:
- Склонение фамилий зависит от рода имени-отчества — армянские фамилии и фамилии, созвучные с нарицательными существительными, не склоняются для женщин (Абрамян Аревик Альбертовны)
- При этом они склоняются для мужчин (Хачатуряна Артура Сергеевича)
- Фамилии склоняются как прилагательные, но в некоторых падежах — иначе
- Есть ряд исключений в склонении женских имен, например, Любовь — Любови (а не Любви).
- Есть огромное количество несклоняемых мужских и женских имен, заканчивающихся на те же сочетания букв, что и склоняемые (Эрик склоняется, Аревик — нет)
- И даже есть имена (например, Адель), являющиеся одновременно и мужскими и женскими, и склоняющиеся по-разному в зависимости от этого.
Реализовать функцию или макрос, которые бы идеально обрабатывали эти кейсы, невероятно сложно. Но все эти проблемы были решены при разработке специальных макросов склонения фамилий-имен-отчеств в !SEMTools.
Корректность работы была проверена на базе в 350.000 ФИО. Для корректной работы список ФИО должен содержать как фамилии, так имена и отчества в их полных формах в именительном падеже. Ниже примеры использования:
Перевод ФИО из именительного в родительный падеж
Когда нужно написать в шапке документа, от кого он, когда известна только начальная форма. Пример ниже:
Склонение ФИО в родительном падеже
Перевод ФИО из именительного в дательный падеж
Частая история, когда нужно кому-нибудь что-нибудь выплатить. Полезная сопутствующая функция — сумма прописью с копейками в Excel.
Склонение ФИО в дательном падеже
Перевод ФИО из именительного в винительный падеж
Данная функция понадобится, когда нужно кого-нибудь наградить, перевести в другой отдел или назначить на новую должность.
Склонение ФИО в винительном падеже
Остальные падежи
Перевод ФИО из именительного в творительный и предложный падежи происходят абсолютно по тому же сценарию:
- выделяем список,
- выбираем нужный падеж,
- получаем результат. Просто и быстро.
Просклонять все, что можно склонять
Эта новая опция появилась совсем недавно, и по праву делает !SEMTools лучшим решением для склонения слов по падежам, доступным на текущий момент. Ниже основные особенности инструмента, которые позволяют так сказать:
- Склоняются по падежам и числам все слова фразы — прилагательные, существительные, местоимения и т.д.
- Род существительных и прилагательных сохраняется
- Слова склоняются в любом регистре и регистр слов сохраняется (3 варианта — нижний, первая буква заглавная, верхний)
- Надстройка понимает контекст, в котором находится слово, и выбирает, склонять ли его в зависимости от этого (просклоняет «дверной проем», но не будет склонять «с дверной ручкой»).
- Аббревиатуры не склоняются, за некоторыми общеизвестными исключениями
Есть еще ряд технических тонкостей, но в итоге все вышеперечисленное позволяет идеально склонять тысячи уникальных фраз без необходимости серьезных правок после.
Кому в первую очередь подойдет инструмент? Конечно же, вебмастерам и копирайтерам.
Склонение списка услуг (пример)
Списки товаров или услуг зачастую состоят далеко не из одного слова, и быстро склонять их для использования в текстах — сэкономить десятки часов времени на наполнение сайта полезным и при этом читабельным контентом. Смотрите пример со склонением услуг автосервиса:
Склонение списка услуг по падежам в Excel в пару кликов
Склонение должностей в Excel (пример)
Будет полезно офисным сотрудникам (делопроизводителям, бухгалтерам и др.). Здесь инструмент пригодится для склонения должностей, званий, специальностей и т.д. Смотрите пример со склонением всех ВУС (военно-учетных специальностей):
Хотите попробовать, как будет обработан ваш список фраз? Установите последнюю версию !SEMTools и попробуйте воспользоваться функционалом!
Источник статьи: http://semtools.guru/ru/change-replace-tools/change-words/morphology/