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

Вход

Регистрация

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

 

= Мир MS Excel/Разбор текстовых строк с адресами - Мир MS Excel

  • Страница 1 из 1
  • 1
Модератор форума: китин, _Boroda_, DrMini  
Разбор текстовых строк с адресами
Vseslav Дата: Суббота, 30.08.2014, 00:40 | Сообщение № 1
Группа: Пользователи
Ранг: Прохожий
Сообщений: 7
Репутация: 0 ±
Замечаний: 0% ±

Excel 2013
Доброго времени суток, уважаемые форумчане.

Передо мной стала нетривиальная для меня задача: мне из текстовой строки, содержащей набор адресов, нужно сделать массив строк с адресами. Жизнь усложняет то, что некоторые номера домов в адресах заполнены через дефисы, то есть требуют дополнения строками. В общем, проще объяснить на примере.

Исходная строка:
Цитата
вул.Демократична: 54–54/2, 56/2, 58/1–58/2, 60–60/2; вул.Лассаля: 53–59/2; вул.Радіаторна: 32, 36, 38–44; вул.Республіканська: 51/46, 53, 55, 68, 70, 72, 74; вул.Сеченова: 25Б–41А, 66–68; вул.Союзна: 69


Требуемый массив строк:
Цитата

вул.Демократична 54
вул.Демократична 54/1
вул.Демократична 54/2
вул.Демократична 56/2
вул.Демократична 58/1
вул.Демократична 58/2
вул.Демократична 60
вул.Демократична 60/1
вул.Демократична 60/2
вул.Лассаля 53
вул.Лассаля 54
вул.Лассаля 55
вул.Лассаля 56
вул.Лассаля 57
вул.Лассаля 58
вул.Лассаля 59
вул.Лассаля 59/1
вул.Лассаля 59/2
....
вул.Сеченова 25Б
вул.Сеченова 25В
вул.Сеченова 26
вул.Сеченова 25А
вул.Сеченова 25Б
вул.Сеченова 25В
...


Дома с буквенными символами все заполняются до "В"

Я не стал заполнять все адреса, так как вручную это делать достаточно тяжело. Надеюсь, что смысл Вам понятен.

Понимаю, что сделать это только лишь посредством формул Excel достаточно проблематично, поэтому заранее прошу прощения, если Вы сочтёте, что место этой темы в разделе о VBA

Заранее благодарю за понимание и помощь в решении задачи
К сообщению приложен файл: 4829017.xlsx (21.5 Kb)
 
Ответить
СообщениеДоброго времени суток, уважаемые форумчане.

Передо мной стала нетривиальная для меня задача: мне из текстовой строки, содержащей набор адресов, нужно сделать массив строк с адресами. Жизнь усложняет то, что некоторые номера домов в адресах заполнены через дефисы, то есть требуют дополнения строками. В общем, проще объяснить на примере.

Исходная строка:
Цитата
вул.Демократична: 54–54/2, 56/2, 58/1–58/2, 60–60/2; вул.Лассаля: 53–59/2; вул.Радіаторна: 32, 36, 38–44; вул.Республіканська: 51/46, 53, 55, 68, 70, 72, 74; вул.Сеченова: 25Б–41А, 66–68; вул.Союзна: 69


Требуемый массив строк:
Цитата

вул.Демократична 54
вул.Демократична 54/1
вул.Демократична 54/2
вул.Демократична 56/2
вул.Демократична 58/1
вул.Демократична 58/2
вул.Демократична 60
вул.Демократична 60/1
вул.Демократична 60/2
вул.Лассаля 53
вул.Лассаля 54
вул.Лассаля 55
вул.Лассаля 56
вул.Лассаля 57
вул.Лассаля 58
вул.Лассаля 59
вул.Лассаля 59/1
вул.Лассаля 59/2
....
вул.Сеченова 25Б
вул.Сеченова 25В
вул.Сеченова 26
вул.Сеченова 25А
вул.Сеченова 25Б
вул.Сеченова 25В
...


Дома с буквенными символами все заполняются до "В"

Я не стал заполнять все адреса, так как вручную это делать достаточно тяжело. Надеюсь, что смысл Вам понятен.

Понимаю, что сделать это только лишь посредством формул Excel достаточно проблематично, поэтому заранее прошу прощения, если Вы сочтёте, что место этой темы в разделе о VBA

Заранее благодарю за понимание и помощь в решении задачи

Автор - Vseslav
Дата добавления - 30.08.2014 в 00:40
gling Дата: Суббота, 30.08.2014, 16:06 | Сообщение № 2
Группа: Друзья
Ранг: Участник клуба
Сообщений: 2643
Репутация: 739 ±
Замечаний: 0% ±

2010
Можно без макроса, немного поработать руками. На примере ячейки: Активируем ячейку - Данные - Текст по столбцам - с разделителями - другой (;) - поместить в (указать ячейку) - Готово. После этого копируем ячейки с данными и спец. вставкой транспонируем в столбец. Можно все сразу данные разбить по строкам, после транспонирования образуются столбцы которые придется подставить в ручную или написать макрос сбора в один столбец.


ЯД-41001506838083
 
Ответить
СообщениеМожно без макроса, немного поработать руками. На примере ячейки: Активируем ячейку - Данные - Текст по столбцам - с разделителями - другой (;) - поместить в (указать ячейку) - Готово. После этого копируем ячейки с данными и спец. вставкой транспонируем в столбец. Можно все сразу данные разбить по строкам, после транспонирования образуются столбцы которые придется подставить в ручную или написать макрос сбора в один столбец.

Автор - gling
Дата добавления - 30.08.2014 в 16:06
Vseslav Дата: Суббота, 30.08.2014, 20:13 | Сообщение № 3
Группа: Пользователи
Ранг: Прохожий
Сообщений: 7
Репутация: 0 ±
Замечаний: 0% ±

Excel 2013
gling, спасибо за ответ. Я пользовался таким методом, но, к сожалению, он ре решает массы вопросов.
в первую очередь, не разбирает адреса, написанные через дефис, типа
Цитата
вул.Радіаторна: 38–44
.
Мне же критично, чтобы каждый адрес был отдельно. Это необходимо для того, чтобы можно было автоматически нанести метки на карту гугла через этот сервис. Так как адресов около 50 000, то обрабатывать это вручную практически невозможно
 
Ответить
Сообщениеgling, спасибо за ответ. Я пользовался таким методом, но, к сожалению, он ре решает массы вопросов.
в первую очередь, не разбирает адреса, написанные через дефис, типа
Цитата
вул.Радіаторна: 38–44
.
Мне же критично, чтобы каждый адрес был отдельно. Это необходимо для того, чтобы можно было автоматически нанести метки на карту гугла через этот сервис. Так как адресов около 50 000, то обрабатывать это вручную практически невозможно

Автор - Vseslav
Дата добавления - 30.08.2014 в 20:13
SLAVICK Дата: Суббота, 30.08.2014, 23:14 | Сообщение № 4
Группа: Модераторы
Ранг: Старожил
Сообщений: 2290
Репутация: 766 ±
Замечаний: 0% ±

2019
Думаю без макроса не обойтись... да и с макросом будет непросто.
А Вы видели что в Вашем файле далеко не все улицы?
Есть "пров.", "селище" ...ну и в оригинальном файле наверняка еще много всяких типов улиц, как "мікрорайон", "просп." ...?
Кроме того не все адреса разделены знаком ";" например :
Цитата
"; вул.Тиражна, вул.Товариська: 1–30, 32, 38, 44–46; вул.Третьої п’ятирічки, вул.Червоної кінноти: 1–49, 51–51/4, 53–53А, 55–55/1, 57–57/1"

Я когда-то работал с адресами... и поверьте что без ручного труда не обойтись.
Я настоял на составлении отдельного окна ввода адресов с перепроверкой по справочникам улиц, городов поскольку у нас(как и у Вас) все вбивали адреса как попало. Сейчас все работают в 1С только так. :)
Ну а если по сути проблемы то нужно прописать "логику" разбивки Ваших адресов на куски сначала на бумаге, потом попробовать применить это правило на данных, если оно сработало - то можно писать макрос.
Из Вашего первого поста все просто - разделитель улиц = ";", а между домами = "," - так?
тогда не пойму откуда из строки
Цитата
"вул.Демократична: 54–54/2, 56/2, 58/1–58/2, 60–60/2; вул.Ласса"
взялся адрес
Цитата
вул.Демократична 54/1
?
Напишите правило(или несколько правил), по которым можно разобрать:
Цитата
вул.Богдана Хмельницького: 23–29; вул.Верхня: 6–10; проїзд Леваневського: 3, 5; проїзд Піонерський, просп.Леніна: 175, 177, 179, 216, 218, 222; просп.Металургів: 15, 17–26;

Я бы делал это в несколько этапов, с обязательной перепроверкой... :
1.создать справочник расширений улиц("вул.", "просп", "проїзд"...)
2.После этого можно искать в текстовой строке эти расширения и разделять строку на основные адреса по этим расширениям...
3.после этого можно полученные данные типа: "вул.Демократична: 54–54/2, 56/2, 58/1–58/2, 60–60/2" разбивать на части по "," или "-"....
Но даже при таком алгоритме ошибок в Вашем случае не избежать, поскольку исходя из Вашего файла - там писали кто и как хотел.... системность часто нарушена.
Так что советую Вам набраться сил... работы будет много :D .


Иногда все проще чем кажется с первого взгляда.

Сообщение отредактировал SLAVICK - Суббота, 30.08.2014, 23:19
 
Ответить
СообщениеДумаю без макроса не обойтись... да и с макросом будет непросто.
А Вы видели что в Вашем файле далеко не все улицы?
Есть "пров.", "селище" ...ну и в оригинальном файле наверняка еще много всяких типов улиц, как "мікрорайон", "просп." ...?
Кроме того не все адреса разделены знаком ";" например :
Цитата
"; вул.Тиражна, вул.Товариська: 1–30, 32, 38, 44–46; вул.Третьої п’ятирічки, вул.Червоної кінноти: 1–49, 51–51/4, 53–53А, 55–55/1, 57–57/1"

Я когда-то работал с адресами... и поверьте что без ручного труда не обойтись.
Я настоял на составлении отдельного окна ввода адресов с перепроверкой по справочникам улиц, городов поскольку у нас(как и у Вас) все вбивали адреса как попало. Сейчас все работают в 1С только так. :)
Ну а если по сути проблемы то нужно прописать "логику" разбивки Ваших адресов на куски сначала на бумаге, потом попробовать применить это правило на данных, если оно сработало - то можно писать макрос.
Из Вашего первого поста все просто - разделитель улиц = ";", а между домами = "," - так?
тогда не пойму откуда из строки
Цитата
"вул.Демократична: 54–54/2, 56/2, 58/1–58/2, 60–60/2; вул.Ласса"
взялся адрес
Цитата
вул.Демократична 54/1
?
Напишите правило(или несколько правил), по которым можно разобрать:
Цитата
вул.Богдана Хмельницького: 23–29; вул.Верхня: 6–10; проїзд Леваневського: 3, 5; проїзд Піонерський, просп.Леніна: 175, 177, 179, 216, 218, 222; просп.Металургів: 15, 17–26;

Я бы делал это в несколько этапов, с обязательной перепроверкой... :
1.создать справочник расширений улиц("вул.", "просп", "проїзд"...)
2.После этого можно искать в текстовой строке эти расширения и разделять строку на основные адреса по этим расширениям...
3.после этого можно полученные данные типа: "вул.Демократична: 54–54/2, 56/2, 58/1–58/2, 60–60/2" разбивать на части по "," или "-"....
Но даже при таком алгоритме ошибок в Вашем случае не избежать, поскольку исходя из Вашего файла - там писали кто и как хотел.... системность часто нарушена.
Так что советую Вам набраться сил... работы будет много :D .

Автор - SLAVICK
Дата добавления - 30.08.2014 в 23:14
SLAVICK Дата: Суббота, 30.08.2014, 23:37 | Сообщение № 5
Группа: Модераторы
Ранг: Старожил
Сообщений: 2290
Репутация: 766 ±
Замечаний: 0% ±

2019
А если Вам нужно чтобы это все отображалось на карте, то нужно еще и справочник улиц с правильными названиями, поскольку далеко не все улицы смогут найтись - например "вул.Мате-Залка" - правильнее наверно "вул.Мате-Залки", а "вул.Семеренка" - наверное "вул.Симиренка". B)
Поэтому после разбора на адреса - нужно улицы перепроверить на соответствие справочнику - особенно "двойные", "тройные"...("вул.Миколи Руднєва", "вул.М Руднєва", "вул.Руднєва М.")
У нас на фирме нам понадобилось 3 мес. чтобы привести все адреса к шаблонному виду.... так-что крепитесь :D


Иногда все проще чем кажется с первого взгляда.

Сообщение отредактировал SLAVICK - Суббота, 30.08.2014, 23:39
 
Ответить
СообщениеА если Вам нужно чтобы это все отображалось на карте, то нужно еще и справочник улиц с правильными названиями, поскольку далеко не все улицы смогут найтись - например "вул.Мате-Залка" - правильнее наверно "вул.Мате-Залки", а "вул.Семеренка" - наверное "вул.Симиренка". B)
Поэтому после разбора на адреса - нужно улицы перепроверить на соответствие справочнику - особенно "двойные", "тройные"...("вул.Миколи Руднєва", "вул.М Руднєва", "вул.Руднєва М.")
У нас на фирме нам понадобилось 3 мес. чтобы привести все адреса к шаблонному виду.... так-что крепитесь :D

Автор - SLAVICK
Дата добавления - 30.08.2014 в 23:37
Vseslav Дата: Воскресенье, 31.08.2014, 23:12 | Сообщение № 6
Группа: Пользователи
Ранг: Прохожий
Сообщений: 7
Репутация: 0 ±
Замечаний: 0% ±

Excel 2013
SLAVICK, Спасибо. Видимо действительно придётся разбирать сначала минимально автоматически, а дальше уже руками.
 
Ответить
СообщениеSLAVICK, Спасибо. Видимо действительно придётся разбирать сначала минимально автоматически, а дальше уже руками.

Автор - Vseslav
Дата добавления - 31.08.2014 в 23:12
SLAVICK Дата: Понедельник, 01.09.2014, 10:20 | Сообщение № 7
Группа: Модераторы
Ранг: Старожил
Сообщений: 2290
Репутация: 766 ±
Замечаний: 0% ±

2019
Пожалуйста :)
Если Вы пойдете по предложенному выше сценарию - то разбирать вручную останется только на дома строки типа
Цитата
вул.Демократична: 54–54/2
вул.Демократична: 60–60/2

(+ сюрпризы, которые не попали под правила)
Все остальное можно разнести автоматически. Можно конечно попытаться разнести и 60–60/2 на 60, 60/1, 60/2 .... но при таком подходе может получится слишком много несуществующих домов... а при делении на 60, 60/2 - Вы упустите 60/1...

Советую сразу разносить по столбцам:
Тип улицы Название улицы Номер дома

И после того как разнесете все адреса нужно будет название улиц "прогнать" через справочник улиц, и те которые не найдутся подправить. Но это уже совсем другая тема :D


Иногда все проще чем кажется с первого взгляда.
 
Ответить
СообщениеПожалуйста :)
Если Вы пойдете по предложенному выше сценарию - то разбирать вручную останется только на дома строки типа
Цитата
вул.Демократична: 54–54/2
вул.Демократична: 60–60/2

(+ сюрпризы, которые не попали под правила)
Все остальное можно разнести автоматически. Можно конечно попытаться разнести и 60–60/2 на 60, 60/1, 60/2 .... но при таком подходе может получится слишком много несуществующих домов... а при делении на 60, 60/2 - Вы упустите 60/1...

Советую сразу разносить по столбцам:
Тип улицы Название улицы Номер дома

И после того как разнесете все адреса нужно будет название улиц "прогнать" через справочник улиц, и те которые не найдутся подправить. Но это уже совсем другая тема :D

Автор - SLAVICK
Дата добавления - 01.09.2014 в 10:20
  • Страница 1 из 1
  • 1
Поиск:

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