Function DativeCase(sSurname$, Optional sName$, Optional sPatronymic$) As String
Application.Volatile True
On Error Resume Next
If sName$ = "" And sPatronymic$ = "" Then
arr = Split(Application.Trim(sSurname$))
sSurname$ = arr(0): sName$ = arr(1): sPatronymic$ = arr(2)
End If
Dim bMaleSex As Boolean: bMaleSex = (Right(sPatronymic, 1) = "ч")
If Len(sSurname) > 0 Then
If bMaleSex Then
Select Case Right(sSurname, 1)
Case "о", "и", "я", "а": DativeCase = sSurname
Case "й": DativeCase = Mid(sSurname, 1, Len(sSurname) - 2) + "ому"
Case Else: DativeCase = sSurname + "у"
If bMaleSex Then
Select Case (sSurname)
Case "паршивлюк", "хомяк": DativeCase = sSurname
End Select
End If
End Select
Else
Select Case Right(sSurname, 1)
Case "о", "и", "б", "в", "г", "д", "ж", "з", "к", "л", "м", "н", "п", _
"р", "с", "т", "ф", "х", "ц", "ч", "ш", "щ", "ь": DativeCase = sSurname
Case "я": DativeCase = Mid(sSurname, 1, Len(sSurname) - 2) & "ой"
Case Else: DativeCase = Mid(sSurname, 1, Len(sSurname) - 1) & "ой"
End Select
End If
DativeCase = DativeCase & " "
End If
If Len(sName) > 0 Then
If bMaleSex Then
Select Case Right(sName, 1)
Case "й", "ь": DativeCase = DativeCase & Mid(sName, 1, Len(sName) - 1) & "ю"
Case "л": DativeCase = DativeCase & Mid(sName, 1, Len(sName) - 2) & "лу"
Case "я": DativeCase = DativeCase & Mid(sName, 1, Len(sName) - 1) & "е"
Case Else: DativeCase = DativeCase & sName & "у"
End Select
Else
Select Case Right(sName, 1)
Case "а", "я"
If Mid(sName, Len(sName) - 1, 1) = "и" Then
DativeCase = DativeCase & Mid(sName, 1, Len(sName) - 1) & "и"
Else
DativeCase = DativeCase & Mid(sName, 1, Len(sName) - 1) & "е"
End If
Case "ь": DativeCase = DativeCase & Mid(sName, 1, Len(sName) - 1) & "и"
Case Else: DativeCase = DativeCase & sName
End Select
End If
DativeCase = DativeCase & " "
End If
If Len(sPatronymic) > 0 Then
If bMaleSex Then
DativeCase = DativeCase & sPatronymic & "у"
Else
DativeCase = DativeCase & Mid(sPatronymic, 1, Len(sPatronymic) - 1) & "е"
End If
End If
End Function