Страницы: 1
RSS
Переворот адреса, При формировании конверта необходимо перевернуть адрес из источника данных
 
Как из: 303000 Воронежская обл Подгоренский район с.Подгорное ул.Калинина д.88
сделать:
д.88 ул.Калинина с.Подгорное Подгоренский район Воронежская обл 303000
 
Вариант:
Код
Sub Naoborot()
Dim Counter As Integer, i As Integer, NewStroka As String, x
    x = Split(ActiveCell)
    Counter = UBound(x)
    For i = Counter To 0 Step -1
        NewStroka = NewStroka & " " & x(i)
    Next
    ActiveCell = NewStroka
End Sub
 
Юрий, не я не проверял, но кажется получится так:
д.88 ул.Калинина с.Подгорное район Подгоренский обл Воронежская 303000
 
Option Explicit
Function Adres(iCell As Range) As String
Dim i As Integer
   For i = UBound(Split(iCell, " ")) To 0 Step -1
       Adres = Adres & Split(iCell, " ")(i) & " "
   Next
End Function
 
Миш, всё верно - так и будет)
 
Код
Function qq(adr As String) As String
    Dim spl
    adr = Replace(Replace(adr, " обл", "%обл"), " район", "%район")
    For Each spl In Split(adr)
        qq = spl & " " & qq
    Next
    qq = Replace(qq, "%", " ")
End Function
 
Задача показалась интересной и сваял на регулярках.
Как перевернуть адрес
В чем прелесть: допускаются сокращения "обл", так и "область", и "об-ть"; "район", "ра-н", "р-он", "р-н" и двойные наименования населенных пунктов(вроде "Красная заря", "Голубая лагуна" и т.п.). Плюс если после "ул." или "д." будет пробел - обработается так же корректно.
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
Попробовал на примере: 303000 Воронежская обл Подгоренский район с.Подгорное ул.Калинина д.88
              Получил:         д.88 ул.Калинина с.Подгорное Подгоренский район Воронежская обл 303000
Попробовал перевернуть обратно и получил:
                                    ул.Калинина с.Подгорное Подгоренский район Воронежская обл д.88
Индекс пропал
 
Про обратное речи и не шло :-) Входная строка имеет значение при работе с RegExp.
Можно попытаться доработать, но слишком много нюансов, связанных с двойными наименованиями населенных пунктов и т.п.
Либо делать для каждого типа объекта отдельную строку, учитывающую все нюансы.
И сейчас помимо того, что индекс пропал, порядок совсем не тот, который должен быть. Т.к. соответствие шаблону RegExp при обратном порядке тоже должно меняться. Т.е. Pattern должен быть другой.

Конкретно про индекс. У меня в выражении отбор индекса идет по шаблону: (\d* ). Если заменить на (\d{6}), то будет вытягивать в любом случае.

P.S. В статье так же исправил, спасибо.
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
А зачем  
Dim objRegExp As Object
вынесено за пределы процедуры, у меня Excel 2003 ругается,
что переменная не определена
 
Вынесено для ускорения работы функции. Присвоение переменной objRegExp ссылки на библиотеку занимает много времени. Поэтому в функции идет проверка:
If objRegExp Is Nothing Then
Т.е. если объект пуст, то мы его создаем, а если нет - то просто выполняем поиск по шаблону и запись результата. Ускоряет в разы.
2003 не должен ругаться, если все сделано правильно. Если объявление переменной и сама функция в одном модуле - ругаться не должен. Вы в точности так же как на сайте скопировали? Или что-то свое добавили?
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
Перенес в отдельный модуль и все стало нормально.
До этого в модуле было две функции.
Страницы: 1
Наверх