Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Excel
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 13.08.2016, 03:11   #1
Vladimir_2016
Новичок
Джуниор
 
Регистрация: 13.08.2016
Сообщений: 1
Вопрос выборочная замена местами слов в ячейке

Добрый день!
Помогите, плиз.
В ячейках слова записаны в следущих последовательностях:
Фамилия Имя Отчество
Фамилия Имя
Имя Фамилия
Имя
Анонимный

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

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

Спасибо!
Vladimir_2016 вне форума Ответить с цитированием
Старый 13.08.2016, 04:20   #2
EducatedFool
Программист VBA
СуперМодератор
 
Аватар для EducatedFool
 
Регистрация: 13.07.2008
Сообщений: 6,856
По умолчанию

макросу будет очень сложно различить эти 2 варианта:
Цитата:
Фамилия Имя
Имя Фамилия
Например, в ячейке будет написано Батька Махно (или Брюс Ли)
Как тут программа отличит, где имя, а где фамилия...
А ведь есть и посложнее варианты ФИО
Цитата:
Японцы: сyтенеp Комyхаpи Комyсиси, вpач Комyто Хеpовато, гонщик Тояма Токанава, снайпер Томимо Токосо, композитор Толисику Толикаку, пианистка Херанука Пороялю.
Китайцы: Сyнь Вынь, Сyй Вынь, Сyй Уй, Жyй Уй, Жyй Сам, Встань Сyнь
Болгаpы: Стояна Ракова, Лежана Раздвиногова
Тypки: мyзыкант Обстyл Задом-бей
Чеченцы: полевые командиры Поджог Сараев, Ушат Помоев, Камаз Отходов, Рекорд Надоев, Погром Евреев, Гарем Плейбоев, Ушат Помоев, Рулон Обоев, Улов Налимов, Букет Левкоев, Отряд Ковбоев, Подрыв Устоев, Захват Покоев, Исход Изгоев, Обвал Забоев, Угон Харлеев, Удел Плебеев, Камаз Отходов, Развод Супругов, Забег Дебилов, Парад Уродов
Чехи: ветеринар Мацал Кошек, писатель Мацал Курочек
Итальянцы: секретарша Бладовина Ди Курваджио, порнозвезда Минето Вротоберучи
Немцы: поpноактёp Ганс Тpахенбюpгеp и актpиса Фpаy Шлюхеp
Поляки: Просто добрый поляк - Бздашек Западловский, боксер Вынька Мелоч
Армяне: Ереванский садовник Газон Засеян
Румыны: посол Сри Безтреску, футболист Вжопу Стамэску
Цитата:
переместить только в тех ячейках, где три слова
а это уже проще
можно сделать формулой в дополнительном столбце
(если забыть про варианты, где ФИО может состоять из 4 и более слов)

Последний раз редактировалось EducatedFool; 13.08.2016 в 04:28.
EducatedFool вне форума Ответить с цитированием
Старый 13.08.2016, 12:20   #3
svsh2016
Форумчанин
 
Регистрация: 16.06.2015
Сообщений: 100
По умолчанию

добрый день,не нашел файл-примера,вариант функций uuu1 и uuu2 в B
uuu3 и uuu4 в C,то есть просто замена

Код:
Function uuu1$(t$)
   Dim x, t1: x = Split(t): t1 = x(0)
   x(0) = x(1): x(1) = x(UBound(x)): x(UBound(x)) = t1
     uuu1 = Join(x)
End Function
Код:
Function uuu3$(t$)
 With CreateObject("VBScript.RegExp"): .Pattern = "(?:[^а-яё]|^)[а-яё]+(?=[^а-яё]|$)": .Global = True: .Ignorecase = True
    uuu3 = .Execute(t)(1) & Chr(32) & .Execute(t)(2) & Chr(32) & .Execute(t)(0)
 End With
End Function
Вложения
Тип файла: xls example_13_08_2016_prog1.xls (36.0 Кб, 10 просмотров)
svsh2016 вне форума Ответить с цитированием
Старый 13.08.2016, 12:27   #4
IgorGO
Новичок
СтарожилДжуниор
 
Аватар для IgorGO
 
Регистрация: 05.02.2008
Сообщений: 9,487
По умолчанию

svsh2016,

загляните в личные сообщения)
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете
IgorGO вне форума Ответить с цитированием
Старый 13.08.2016, 13:03   #5
svsh2016
Форумчанин
 
Регистрация: 16.06.2015
Сообщений: 100
По умолчанию

добрый день,как вариант для #4, функция vvv в C1

Код:
Function vvv$(t$)
   Dim z, x: x = Split(t, ","): ReDim z(0 To UBound(x))
 With CreateObject("VBScript.RegExp"): .Pattern = "\d+": .Global = True
 For i = 0 To .Execute(t).Count - 1
    z(i) = .Execute(t)(i) & ":" & .Execute(t)(i)
    Next
 End With
 vvv = Join(z, ",")
End Function
Вложения
Тип файла: xls example_13_08_2016_prog_2_last.xls (35.0 Кб, 21 просмотров)
svsh2016 вне форума Ответить с цитированием
Старый 13.08.2016, 13:51   #6
svsh2016
Форумчанин
 
Регистрация: 16.06.2015
Сообщений: 100
По умолчанию

еще вариант функций uuu5 и uuu6 для #1 в столбце D


Код:
Function uuu5$(t$)
 With CreateObject("VBScript.RegExp"): .Pattern = "([а-яё]+) ([а-яё]+) ([а-яё]+)": .Global = True: .Ignorecase = True
    uuu5 = .Replace(t, "$2 $3 $1")
 End With
End Function
Вложения
Тип файла: xls example_13_08_2016_prog_2.xls (42.5 Кб, 9 просмотров)
svsh2016 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Поменять местами слова в ячейке Нюни Microsoft Office Excel 28 05.12.2017 11:28
смена местами числовых данных в ячейке Roleg Microsoft Office Excel 8 14.05.2012 16:23
Замена слов местами VС++ МАйк Лжец Помощь студентам 1 04.03.2012 04:44
Задача: Замена слов местами в Microsoft Office Word andresss Microsoft Office Word 10 08.01.2011 12:15
как в ячейке поменять местами фразы разделенные запятой evdss Microsoft Office Excel 4 13.10.2010 10:01