Как из: 303000 Воронежская обл Подгоренский район с.Подгорное ул.Калинина д.88
сделать:
д.88 ул.Калинина с.Подгорное Подгоренский район Воронежская обл 303000
сделать:
д.88 ул.Калинина с.Подгорное Подгоренский район Воронежская обл 303000
01.09.2013 22:07:55
Как из: 303000 Воронежская обл Подгоренский район с.Подгорное ул.Калинина д.88
сделать: д.88 ул.Калинина с.Подгорное Подгоренский район Воронежская обл 303000 |
|
|
|
01.09.2013 22:30:15
Юрий, не я не проверял, но кажется получится так:
д.88 ул.Калинина с.Подгорное район Подгоренский обл Воронежская 303000 |
|
|
|
01.09.2013 22:37:41
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 |
|
|
|
01.09.2013 22:38:57
Миш, всё верно - так и будет)
|
|
|
|
02.09.2013 10:16:34
|
|||
|
|
04.09.2013 12:41:03
Задача показалась интересной и сваял на регулярках.
В чем прелесть: допускаются сокращения "обл", так и "область", и "об-ть"; "район", "ра-н", "р-он", "р-н" и двойные наименования населенных пунктов(вроде "Красная заря", "Голубая лагуна" и т.п.). Плюс если после "ул." или "д." будет пробел - обработается так же корректно.
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
|
|
|
|
04.09.2013 14:40:59
Попробовал на примере: 303000 Воронежская обл Подгоренский район с.Подгорное ул.Калинина д.88
Получил: д.88 ул.Калинина с.Подгорное Подгоренский район Воронежская обл 303000 Попробовал перевернуть обратно и получил: ул.Калинина с.Подгорное Подгоренский район Воронежская обл д.88 Индекс пропал |
|
|
|
04.09.2013 14:59:03
Про обратное речи и не шло :-) Входная строка имеет значение при работе с RegExp.
Можно попытаться доработать, но слишком много нюансов, связанных с двойными наименованиями населенных пунктов и т.п. Либо делать для каждого типа объекта отдельную строку, учитывающую все нюансы. И сейчас помимо того, что индекс пропал, порядок совсем не тот, который должен быть. Т.к. соответствие шаблону RegExp при обратном порядке тоже должно меняться. Т.е. Pattern должен быть другой. Конкретно про индекс. У меня в выражении отбор индекса идет по шаблону: (\d* ). Если заменить на (\d{6}), то будет вытягивать в любом случае. P.S. В статье так же исправил, спасибо.
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
|
|
|
|
04.09.2013 15:23:03
А зачем
Dim objRegExp As Object вынесено за пределы процедуры, у меня Excel 2003 ругается, что переменная не определена |
|
|
|
04.09.2013 15:28:34
Вынесено для ускорения работы функции. Присвоение переменной objRegExp ссылки на библиотеку занимает много времени. Поэтому в функции идет проверка:
If objRegExp Is Nothing Then Т.е. если объект пуст, то мы его создаем, а если нет - то просто выполняем поиск по шаблону и запись результата. Ускоряет в разы. 2003 не должен ругаться, если все сделано правильно. Если объявление переменной и сама функция в одном модуле - ругаться не должен. Вы в точности так же как на сайте скопировали? Или что-то свое добавили?
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
|
|
|
|
04.09.2013 15:36:42
Перенес в отдельный модуль и все стало нормально.
До этого в модуле было две функции. |
||||
|
|
|||