Страницы: 1
RSS
Работа с ФИО - преобразовать часть текста из прописных в строчные и поменять падеж.
 
Помогите пожалуйста не опытному!
Имеется в ячейке А1: ВАСИЛЬЕВ ОЛЕГ ЮРЬЕВИЧ.
Нужно отобразить в другой ячейке: ВАСИЛЬЕВ Олег Юрьевич.
А если возможно, то в идеале: ВАСИЛЬЕВА Олега Юрьевича. Учитывая, что фамилии которые кончаются на "КИЙ" должны оканчиваться на "КОГО"
Дело в том, что большой список ФИО в таком формате. И нужно изменить. А в ручную долго.
Заранее спасибо)
Изменено: STASonSmol - 16.07.2017 21:13:48
 
Цитата
STASonSmol написал:
фамилии которые кончаются на "КИЙ"
А ведь ещё есть фамилии, которые заканчиватся на "о", "к", "ч", "ш"... С ними как быть? )
P.S. Название темы немного изменил.
 
Да мне хоть с этими разобраться))) У меня мало которые заканчиваются на "о", "к", "ч", "ш"...))
 
=ЛЕВБ(A1;НАЙТИ(" ";A1)-1)&" "&ПРОПНАЧ(ПСТР(A1;НАЙТИ(" ";A1)+1;999))
А вот со склонением сложнее.
Если в мире всё бессмысленно, — сказала Алиса, — что мешает выдумать какой-нибудь смысл? ©Льюис Кэрролл
 
Смысл, из ИМЕНИТЕЛЬНОГО перевести в РОДИТЕЛЬНЫЙ падеж ) в формате ИВАНОВА Ивана Ивановича)  
 
Цитата
STASonSmol написал:
У меня мало которые заканчиваются на "о", "к", "ч", "ш"
А министр обороны РФ в Ваш список может попасть? )
 
Цитата
Bema написал:
А вот со склонением сложнее.
Спасибо. Так проще поменять окончания, чем полностью Имя и Отчество переписывать :)  
 
Цитата
Юрий М написал:
P.S. Название темы немного изменил.
Я не против. Спасибо)) Видимо так понятнее для любителей excel))
 
Можно так, но это очень топорно:
=ЛЕВБ(A1;НАЙТИ(" ";A1)-1)&"А "&ПОДСТАВИТЬ(ПРОПНАЧ(ПСТР(A1;НАЙТИ(" ";A1)+1;999));" ";"а ")&"а"
Если в мире всё бессмысленно, — сказала Алиса, — что мешает выдумать какой-нибудь смысл? ©Льюис Кэрролл
 
.
Код
=ПОДСТАВИТЬ(ЛЕВСИМВ(A1;ПОИСК(" ";A1));" ";"А ")&ПОДСТАВИТЬ(ПРОПНАЧ(ПСТР(A1;ПОИСК(" ";A1);99));" ";"а ";2)&"а"
 
Только формулами?
 
На всякий случай (исходные данные в столбце А, результат в столбец В):
Код
Sub Macro1()
Dim LastRow As Long, i As Long, Arr
    LastRow = Cells(Rows.Count, 1).End(xlUp).Row
    For i = 2 To LastRow
        Arr = Split(Cells(i, 1))
        Cells(i, 2) = Arr(0) & "А " & StrConv(Arr(1), 3) & "a " & StrConv(Arr(2), 3) & "а"
    Next
End Sub
 
еще
Код
=ЕСЛИ(ПРАВСИМВ(ЛЕВСИМВ(A1;ПОИСК(" ";A1)-1);2)="ИЙ";ПОДСТАВИТЬ(ЛЕВСИМВ(A1;ПОИСК(" ";A1));"ИЙ ";"ОГО ");ПОДСТАВИТЬ(ЛЕВСИМВ(A1;ПОИСК(" ";A1));" ";"А "))&ЕСЛИ(ЕЧИСЛО(ПОИСК("ИЙ ";A1));ПОДСТАВИТЬ(ПРОПНАЧ(ПСТР(A1;ПОИСК(" ";A1);99));"й ";"я ")&"а";ПОДСТАВИТЬ(ПРОПНАЧ(ПСТР(A1;ПОИСК(" ";A1);99));" ";"а ";2)&"а")
 
Цитата
STASonSmol написал:
фамилии которые кончаются на "КИЙ" должны оканчиваться на "КОГО"
Тогда такой вариант:
Код
Sub Macro1()
Dim LastRow As Long, i As Long, Arr
    LastRow = Cells(Rows.Count, 1).End(xlUp).Row
    For i = 2 To LastRow
        Arr = Split(Cells(i, 1))
        If Right(Arr(0), 3) <> "КИЙ" Then
            Cells(i, 2) = Arr(0) & "А " & StrConv(Arr(1), 3) & "a " & StrConv(Arr(2), 3) & "а"
        Else
            Cells(i, 2) = Replace(Arr(0), "КИЙ", "КОГО ") & StrConv(Arr(1), 3) & "a " & StrConv(Arr(2), 3) & "а"
        End If
    Next
End Sub

И вернитесь в своё сообщение #12 - исправьте горе-цитату.
 
Нескромный вопрос к отвечающим
А пАдежи, падЁжи, или падежИ  к этой теме (преобразовать часть текста из прописных в строчные) каким боком?
Изменено: RAN - 16.07.2017 21:12:20
 
Откорректировал название.
 
были же падежи на форуме:
Творительный падеж для ФИО
чтобы не гадать на кофейной гуще, кто вам отвечает и после этого не совершать кучу ошибок - обратитесь к собеседнику на ВЫ - ответ на ваш вопрос получите - а остальное вас не касается (п.п.п. на форумах)
 
Цитата
copper-top написал: ПОДСТАВИТЬ(ЛЕВСИМВ(A1;ПОИСК(" ";A1));" ";"А ")&ПОДСТАВИТЬ(ПРОПНАЧ(ПСТР(A1;ПОИСК(" ";A1);99));" ";"а ";2)&"а"
ИВАНОВА Алексейа Сергеевича
Блин, мало опыта, так бы наверное разобрался как подправить формулу(
 
Цитата
STASonSmol написал:
мало опыта, так бы наверное разобрался как подправить
что сказать... да, мало опыта. еще полгода назад я и не знал как всеми этими формулами пользоваться.
напишите самые популярные окончания в фамилиях и именах. я уже разобрался как подправить и попробую подогнать. не обещаю.
Код
=ЕСЛИ(ПРАВСИМВ(ЛЕВСИМВ(A1;ПОИСК(" ";A1)-1);2)="ИЙ";ПОДСТАВИТЬ(ЛЕВСИМВ(A1;ПОИСК(" ";A1));"ИЙ ";"ОГО ");ПОДСТАВИТЬ(ЛЕВСИМВ(A1;ПОИСК(" ";A1));" ";"А "))&ЕСЛИ(ЕЧИСЛО(ПОИСК("Й ";A1));ПОДСТАВИТЬ(ПРОПНАЧ(ПСТР(A1;ПОИСК(" ";A1);99));"й ";"я ")&"а";ПОДСТАВИТЬ(ПРОПНАЧ(ПСТР(A1;ПОИСК(" ";A1);99));" ";"а ";2)&"а")
 
Можно использовать Padeg.Declension. Например, так:
Код
Function Pad(ФИО As Range, Падеж As Integer) As String
    Set x = CreateObject("Padeg.Declension")
    Pad = x.GetFIOPadegFS(ФИО, "", Падеж)
End Function
Во вложении пример с использованием UDF для любого падежа.
Чем шире угол зрения, тем он тупее.
 
Цитата
SAS888 написал: Можно использовать Padeg.Declension.
ФИОРодительный
Иванов Иван Иванович#ЗНАЧ!
Ивановский Василий Макарович#ЗНАЧ!
Петренко Петр Петрович#ЗНАЧ!
Сидорова Мария Ивановна#ЗНАЧ!
Шойгу Сергей Кужугетович#ЗНАЧ!
 
Значит у Вас отсутствует необходимая библиотека Padeg.dll.
Скачайте и зарегистрируйте этот компонент.
Скачать библиотеку можно здесь.
Чем шире угол зрения, тем он тупее.
Страницы: 1
Читают тему
Наверх