Домашняя страница Undo Do New Save Карта сайта Обратная связь Поиск по форуму
МИР MS EXCEL - Гость.xls

Вход

Регистрация

Напомнить пароль

 

= Мир MS Excel/Перестановка символов внутри текста - Мир MS Excel

Старая форма входа
  • Страница 1 из 1
  • 1
Модератор форума: китин, _Boroda_  
Перестановка символов внутри текста
AVI Дата: Воскресенье, 16.09.2018, 16:34 | Сообщение № 1
Группа: Проверенные
Ранг: Ветеран
Сообщений: 523
Репутация: 17 ±
Замечаний: 0% ±

Excel 2016
У меня есть адреса (например), которые нужно преобразовать в
Из г. Иркутск, Радужный мкр., д. 44 -->г. Иркутск, мкр. Радужный, д. 44
Из г. Иркутск, Байкальская ул., д. 44 -->г. Иркутск, ул. Байкальская, д. 44
Из г. Иркутск, ул. Депутатская, д. 44 -->г. Иркутск, ул. Депутатская, д. 44

У адреса всегда разделитель запятая. Всегда "город, улица, дом"

В целом, как мне видится ход исполнения макроса: если в тексте НЕ находит, что-нибудь из этого
ул., д.
мкр., д.
кв-л., д.
б-р., д.
проезд., д.
пр-кт., д.
пер., д.
то результат равен тексту
Если находит, то перенос из "город, улицаXXX, дом" в "город,XXX улица, дом", причем
ХХХ могу быть в виде:
ул.
мкр.
кв-л.
б-р.
проезд.
пр-кт.
пер.

Два пожелания
1 - все исходники залить в сам код.
2 - код будет работать только с одним адресом то есть в ячейке E7 оригинал адреса в G7 результат работы кода

Даже примерно не представляю как это делать...
К сообщению приложен файл: 5746203.xlsm (13.8 Kb)
 
Ответить
СообщениеУ меня есть адреса (например), которые нужно преобразовать в
Из г. Иркутск, Радужный мкр., д. 44 -->г. Иркутск, мкр. Радужный, д. 44
Из г. Иркутск, Байкальская ул., д. 44 -->г. Иркутск, ул. Байкальская, д. 44
Из г. Иркутск, ул. Депутатская, д. 44 -->г. Иркутск, ул. Депутатская, д. 44

У адреса всегда разделитель запятая. Всегда "город, улица, дом"

В целом, как мне видится ход исполнения макроса: если в тексте НЕ находит, что-нибудь из этого
ул., д.
мкр., д.
кв-л., д.
б-р., д.
проезд., д.
пр-кт., д.
пер., д.
то результат равен тексту
Если находит, то перенос из "город, улицаXXX, дом" в "город,XXX улица, дом", причем
ХХХ могу быть в виде:
ул.
мкр.
кв-л.
б-р.
проезд.
пр-кт.
пер.

Два пожелания
1 - все исходники залить в сам код.
2 - код будет работать только с одним адресом то есть в ячейке E7 оригинал адреса в G7 результат работы кода

Даже примерно не представляю как это делать...

Автор - AVI
Дата добавления - 16.09.2018 в 16:34
CAHO Дата: Воскресенье, 16.09.2018, 18:08 | Сообщение № 2
Группа: Пользователи
Ранг: Новичок
Сообщений: 11
Репутация: 4 ±
Замечаний: 0% ±

Excel 2010
Попробуйте такой вариант, но надо допиливать и тестировать может быть.
[vba]
Код
Function ПерестановкаБукв(Str As String)
Dim n&, k&
Dim m
Dim i%
Dim Grad$, Bulvar$, Dom$
n = InStr(1, Str, "г.")
k = InStr(n + 2, Str, ",")
Grad = Mid(Str, n, k - n) & ", "
m = Array("ул.", "мкр.", "кв-л.", "б-р.", "проезд", "пр-кт", "пер.")
For i = LBound(m) To UBound(m)
    If InStr(k, Str, m(i)) Then
        n = k + 1
        k = InStr(n, Str, m(i)) - 1
        If n = k Then
            k = InStr(n, Str, ",")
            Bulvar = Mid(Str, n + 1, k - n - 1) & ", "
        Else
            Bulvar = m(i) & Mid(Str, n, k - n) & ", "
        End If
        
        Exit For
    End If
Next i
n = InStr(k, Str, "д.")
Dom = Trim(Mid(Str, n, Len(Str)))
ПерестановкаБукв = Grad & Bulvar & Dom
End Function
[/vba]
К сообщению приложен файл: 7765416.xlsm (16.0 Kb)
 
Ответить
СообщениеПопробуйте такой вариант, но надо допиливать и тестировать может быть.
[vba]
Код
Function ПерестановкаБукв(Str As String)
Dim n&, k&
Dim m
Dim i%
Dim Grad$, Bulvar$, Dom$
n = InStr(1, Str, "г.")
k = InStr(n + 2, Str, ",")
Grad = Mid(Str, n, k - n) & ", "
m = Array("ул.", "мкр.", "кв-л.", "б-р.", "проезд", "пр-кт", "пер.")
For i = LBound(m) To UBound(m)
    If InStr(k, Str, m(i)) Then
        n = k + 1
        k = InStr(n, Str, m(i)) - 1
        If n = k Then
            k = InStr(n, Str, ",")
            Bulvar = Mid(Str, n + 1, k - n - 1) & ", "
        Else
            Bulvar = m(i) & Mid(Str, n, k - n) & ", "
        End If
        
        Exit For
    End If
Next i
n = InStr(k, Str, "д.")
Dom = Trim(Mid(Str, n, Len(Str)))
ПерестановкаБукв = Grad & Bulvar & Dom
End Function
[/vba]

Автор - CAHO
Дата добавления - 16.09.2018 в 18:08
sboy Дата: Понедельник, 17.09.2018, 13:48 | Сообщение № 3
Группа: Друзья
Ранг: Участник клуба
Сообщений: 2566
Репутация: 724 ±
Замечаний: 0% ±

Excel 2010
Добрый день.
Вариант пользовательской функцией
[vba]
Код
Function AVI(t As String) As String
AVI = t
    With CreateObject("VBScript.RegExp")
        .Pattern = "( )[^ ]+( ул\.| мкр\.| кв-л\.| б-р\.| проезд\.| пр-кт\.| пер\.), д"
        If .test(t) Then AVI = .Replace(t, Replace(Replace(.Execute(t)(0), .Execute(t)(0).submatches(1), ""), .Execute(t)(0).submatches(0), .Execute(t)(0).submatches(1) & " ", Count:=1))
    End With
End Function
[/vba]
К сообщению приложен файл: 3686801.xlsm (16.1 Kb)


Яндекс: 410016850021169
 
Ответить
СообщениеДобрый день.
Вариант пользовательской функцией
[vba]
Код
Function AVI(t As String) As String
AVI = t
    With CreateObject("VBScript.RegExp")
        .Pattern = "( )[^ ]+( ул\.| мкр\.| кв-л\.| б-р\.| проезд\.| пр-кт\.| пер\.), д"
        If .test(t) Then AVI = .Replace(t, Replace(Replace(.Execute(t)(0), .Execute(t)(0).submatches(1), ""), .Execute(t)(0).submatches(0), .Execute(t)(0).submatches(1) & " ", Count:=1))
    End With
End Function
[/vba]

Автор - sboy
Дата добавления - 17.09.2018 в 13:48
AVI Дата: Понедельник, 17.09.2018, 17:54 | Сообщение № 4
Группа: Проверенные
Ранг: Ветеран
Сообщений: 523
Репутация: 17 ±
Замечаний: 0% ±

Excel 2016
CAHO, sboy, Супер, в примере работает! Но подскажите, пожалуйста, как функции переделать в sub?
У меня это код нужно добавить в юзерформу с последующей выгрузкой в нужное место в документе. То есть код берет исходник из ячейки обрабатывает и заливаете в другую ячейку.
 
Ответить
СообщениеCAHO, sboy, Супер, в примере работает! Но подскажите, пожалуйста, как функции переделать в sub?
У меня это код нужно добавить в юзерформу с последующей выгрузкой в нужное место в документе. То есть код берет исходник из ячейки обрабатывает и заливаете в другую ячейку.

Автор - AVI
Дата добавления - 17.09.2018 в 17:54
sboy Дата: Вторник, 18.09.2018, 09:19 | Сообщение № 5
Группа: Друзья
Ранг: Участник клуба
Сообщений: 2566
Репутация: 724 ±
Замечаний: 0% ±

Excel 2010
В sub не обязательно переделывать.
Просто в коде обратитесь к этой функции (передав туда переменную t из ячейки) и получите результат, потом выгружайте куда надо
примерно так
[vba]
Код
Sub v_forme()
'/////
исходный_адрес = [a1]
исправленный_адрес = AVI(исходный_адрес)
[b1] = исправленный_адрес
'////
End Sub
[/vba]
или сразу без переменных
[vba]
Код
Sub v_forme()
'/////
[b1].Value = AVI([a1].Value)
'////
End Sub
[/vba]


Яндекс: 410016850021169

Сообщение отредактировал sboy - Вторник, 18.09.2018, 09:21
 
Ответить
СообщениеВ sub не обязательно переделывать.
Просто в коде обратитесь к этой функции (передав туда переменную t из ячейки) и получите результат, потом выгружайте куда надо
примерно так
[vba]
Код
Sub v_forme()
'/////
исходный_адрес = [a1]
исправленный_адрес = AVI(исходный_адрес)
[b1] = исправленный_адрес
'////
End Sub
[/vba]
или сразу без переменных
[vba]
Код
Sub v_forme()
'/////
[b1].Value = AVI([a1].Value)
'////
End Sub
[/vba]

Автор - sboy
Дата добавления - 18.09.2018 в 09:19
AVI Дата: Понедельник, 08.10.2018, 06:17 | Сообщение № 6
Группа: Проверенные
Ранг: Ветеран
Сообщений: 523
Репутация: 17 ±
Замечаний: 0% ±

Excel 2016
Добрый день!
Помогите подправить код. Если названия в одно слово, то работает отлично, а если два, то г. Иркутск, Маршала ул. Конева, д. 44, а не г. Иркутск, ул. Маршала Конева, д. 44
Я пошарился в коде, но не понял где это поменять.
К сообщению приложен файл: 4308943.xlsm (15.7 Kb)
 
Ответить
СообщениеДобрый день!
Помогите подправить код. Если названия в одно слово, то работает отлично, а если два, то г. Иркутск, Маршала ул. Конева, д. 44, а не г. Иркутск, ул. Маршала Конева, д. 44
Я пошарился в коде, но не понял где это поменять.

Автор - AVI
Дата добавления - 08.10.2018 в 06:17
sboy Дата: Понедельник, 08.10.2018, 09:37 | Сообщение № 7
Группа: Друзья
Ранг: Участник клуба
Сообщений: 2566
Репутация: 724 ±
Замечаний: 0% ±

Excel 2010
Поправил
[vba]
Код
Function AVI(t As String) As String
AVI = t
    With CreateObject("VBScript.RegExp")
        .Pattern = "(, ).+( ул\.| мкр\.| кв-л\.| б-р\.| проезд\.| пр-кт\.| пер\.), д"
        If .test(t) Then AVI = .Replace(t, Replace(Replace(.Execute(t)(0), .Execute(t)(0).submatches(1), ""), .Execute(t)(0).submatches(0), "," & .Execute(t)(0).submatches(1) & " ", Count:=1))
    End With
End Function
[/vba]
К сообщению приложен файл: 2141028.xlsm (15.9 Kb)


Яндекс: 410016850021169
 
Ответить
СообщениеПоправил
[vba]
Код
Function AVI(t As String) As String
AVI = t
    With CreateObject("VBScript.RegExp")
        .Pattern = "(, ).+( ул\.| мкр\.| кв-л\.| б-р\.| проезд\.| пр-кт\.| пер\.), д"
        If .test(t) Then AVI = .Replace(t, Replace(Replace(.Execute(t)(0), .Execute(t)(0).submatches(1), ""), .Execute(t)(0).submatches(0), "," & .Execute(t)(0).submatches(1) & " ", Count:=1))
    End With
End Function
[/vba]

Автор - sboy
Дата добавления - 08.10.2018 в 09:37
AVI Дата: Понедельник, 08.10.2018, 16:04 | Сообщение № 8
Группа: Проверенные
Ранг: Ветеран
Сообщений: 523
Репутация: 17 ±
Замечаний: 0% ±

Excel 2016
sboy, он оно как, спасибо
 
Ответить
Сообщениеsboy, он оно как, спасибо

Автор - AVI
Дата добавления - 08.10.2018 в 16:04
  • Страница 1 из 1
  • 1
Поиск:

Яндекс.Метрика Яндекс цитирования
© 2010-2024 · Дизайн: MichaelCH · Хостинг от uCoz · При использовании материалов сайта, ссылка на www.excelworld.ru обязательна!