Страницы: 1
RSS
Перестановка слов в пределах одной ячейки
 
Здравствуйте, Уважаемые ГУРУ excel. У меня возникла следующая проблема. Есть список контрагентов, Все они начинаются с названия контрагента-

Контрагент 1 ООО
Контрагент2 Учебный центр ООО и т.д.

Нужно привесть эти названия к виду

ООО Контрагент 1
ООО Учебный центр Контрагент2 и т.д.

Можно использовать как формулы так и макросы. Помогите мне пожалуйста. Файл прилагаю
 
Ничего не понятно из примера:
офф: улыбает аббревиатура 10-ого пункта таблицы - "ООООО" (8
Изменено: Ёк-Мок - 27.08.2016 12:19:00
Удивление есть начало познания © Surprise me!
И да пребудет с нами сила ВПР.
 
добрый день,вариант функции ggg в столбце D,исправил опечатку в строке 6;строки:12,13 в столбце C не вписываются в логику выбора,
в строке14 в столбце C нет пробела.

 
Код
Function ggg$(t$)
  ggg = Trim(vvv(t) & Chr(32) & aaa(t) & Chr(32) & yyy(t))
End Function
Код
Function vvv$(t$)
   Dim x: x = Split(t)
  vvv = x(UBound(x))
End Function
Код
Function aaa$(t$)  
   aaa = Replace(bbb(t), vvv(t), "")
End Function
Код
Function yyy$(t$)
  Dim i1&
 With CreateObject("VBScript.RegExp"): .Pattern = "[А-ЯЁ]": .Global = True
    i1 = .Execute(t)(1).FirstIndex
    yyy = Left(t, i1)
 End With
End Function
Код
Function bbb$(t$)
    Dim i1&
 With CreateObject("VBScript.RegExp"): .Pattern = "[А-ЯЁ]": .Global = True
    i1 = .Execute(t)(1).FirstIndex
      bbb = Mid(t, i1)
 End With
End Function
Изменено: sv2013 - 27.08.2016 17:07:27
 
Уважаемый, sv2013, Ваш код в оригинальном файле работает не совсем так.
 
добрый день,Вы теперь предоставили уже другой файл-пример,-в нем укажите в отдельном столбце ,как надо
 
Пример с тем как надо
 
Цитата
Алена1973 написал:
Уважаемый, sv2013, Ваш код в оригинальном файле работает не совсем так
А кто мешал СРАЗУ показать пример в с реальной структурой?
Из Правил: 2.3. Приложите файл(ы) с примером (общим весом не более 100 Кб) в реальной структуре и форматах данных того, что есть сейчас и того, что хотелось бы на выходе.
Люди бы зря не тратили своё время на помощь Вам.
 
В принципе моя надстройка(бесплатная) вполне способна решить проблему. По крайней мере на приложенном примере сработало. Вот ссылка: Перемещение слов и удаление лишних символов

Диапазон исходных данных: $B$2:$B$30
Ячейка для вставки: E2
Ставите галку на пункте: Перемещать вперед

Остальные настройки на свое усмотрение(регистр, удаление символов). Список организаций можно настроить - почитайте справку к надстройке.
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
The_Prist, работает, в общем, нормально. Но есть небольшое но:там где есть Например такое название
АВИАДОМ ПКФ ООО
должно быть ООО ПКФ АВИАДОМ,
а получается ООО АВИАДОМ ПКФ
 
The_Prist, Доброго утра, Дима! Новая крутая плюшка - не видел раньше. Спасибо большое!!!  :idea: 8)  )))))
Изменено: Jack Famous - 29.08.2016 10:08:25
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
 
Алена1973, всё прекрасно работает… Не забудьте выбрать перемещаемые организации

Jack Famous не должен забывать о размере приложения (картинки удалены) [МОДЕРАТОР]
Изменено: Jack Famous - 29.08.2016 13:16:16
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
 
Цитата
Алена1973 написал: должно быть ООО ПКФ АВИАДОМ
не сразу увидел…добавьте ПКФ и всё такое в список организаций и пройдитесь ещё раз (точнее, сначала выберите только ПКФ и всё, что должно быть на 2 месте, а уж потом в начало перемещайте организации)  ;)
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
 
Приложил вариант реализации пользовательской функции.
Пример формулы: =Rebuild(B2;Лист2!$A$2:$B$13)
где:
B2 - ячейка исходного текста
Лист2!$A$2:$B$13 - диапазон порядка слов (по 2-м столбцам)
Изменено: ZVI - 29.08.2016 10:06:23
 
ZVI, тоже очень круто!  8)  Для таких случаев (двойная перестановка) удобнее… Спасибо!  :idea:
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
 
Цитата
Jack Famous написал: Спасибо!
Рад стараться! :)
 
добрый день,вариант для #6: функция hhh в столбце D

 
Код
Function hhh$(t$)
   Dim i&, i1&, t1$, t2$
For i = Len(t) To 1 Step -1
   If Mid(t, i, 1) Like "[А-Я]" Then i1 = i: t1 = Mid(t, i1 - 2, 3): Exit For
Next
 t2 = Replace(t, t1, ""): hhh = t1 & Chr(32) & t2
End Function
Изменено: sv2013 - 29.08.2016 10:53:39
 
ZVI, то что нужно. Спасибо всем за помощь.
 
На регулярках
Код
Function reform(text As String, r As Range) As String
    Dim a, i&, aa(1 To 2)
    Static RegEx As Object
    If RegEx Is Nothing Then Set RegEx = CreateObject("VBScript.RegExp")
    If IsEmpty(a) Then
        a = r.Value
        For i = 1 To UBound(a)
            If Len(a(i, 1)) Then aa(2) = aa(2) & a(i, 1) & "|"
            If Len(a(i, 2)) Then aa(1) = aa(1) & a(i, 2) & "|"
        Next
        aa(1) = "\s(" & Left$(aa(1), Len(aa(1)) - 1) & ")(\s|$)"
        aa(2) = "\s(" & Left$(aa(2), Len(aa(2)) - 1) & ")(\s|$)"
    End If
    For i = 1 To 2
        RegEx.Pattern = aa(i)
        If RegEx.test(text) Then text = RegEx.Execute(text)(0) & " " & RegEx.Replace(text, " ")
    Next
    reform = Application.Trim(text)
End Function
Страницы: 1
Наверх