Передо мной стала нетривиальная для меня задача: мне из текстовой строки, содержащей набор адресов, нужно сделать массив строк с адресами. Жизнь усложняет то, что некоторые номера домов в адресах заполнены через дефисы, то есть требуют дополнения строками. В общем, проще объяснить на примере.
Дома с буквенными символами все заполняются до "В"
Я не стал заполнять все адреса, так как вручную это делать достаточно тяжело. Надеюсь, что смысл Вам понятен.
Понимаю, что сделать это только лишь посредством формул Excel достаточно проблематично, поэтому заранее прошу прощения, если Вы сочтёте, что место этой темы в разделе о VBA
Заранее благодарю за понимание и помощь в решении задачи
Доброго времени суток, уважаемые форумчане.
Передо мной стала нетривиальная для меня задача: мне из текстовой строки, содержащей набор адресов, нужно сделать массив строк с адресами. Жизнь усложняет то, что некоторые номера домов в адресах заполнены через дефисы, то есть требуют дополнения строками. В общем, проще объяснить на примере.
Дома с буквенными символами все заполняются до "В"
Я не стал заполнять все адреса, так как вручную это делать достаточно тяжело. Надеюсь, что смысл Вам понятен.
Понимаю, что сделать это только лишь посредством формул Excel достаточно проблематично, поэтому заранее прошу прощения, если Вы сочтёте, что место этой темы в разделе о VBA
Заранее благодарю за понимание и помощь в решении задачиVseslav
Можно без макроса, немного поработать руками. На примере ячейки: Активируем ячейку - Данные - Текст по столбцам - с разделителями - другой (;) - поместить в (указать ячейку) - Готово. После этого копируем ячейки с данными и спец. вставкой транспонируем в столбец. Можно все сразу данные разбить по строкам, после транспонирования образуются столбцы которые придется подставить в ручную или написать макрос сбора в один столбец.
Можно без макроса, немного поработать руками. На примере ячейки: Активируем ячейку - Данные - Текст по столбцам - с разделителями - другой (;) - поместить в (указать ячейку) - Готово. После этого копируем ячейки с данными и спец. вставкой транспонируем в столбец. Можно все сразу данные разбить по строкам, после транспонирования образуются столбцы которые придется подставить в ручную или написать макрос сбора в один столбец.gling
gling, спасибо за ответ. Я пользовался таким методом, но, к сожалению, он ре решает массы вопросов. в первую очередь, не разбирает адреса, написанные через дефис, типа
Цитата
вул.Радіаторна: 38–44
. Мне же критично, чтобы каждый адрес был отдельно. Это необходимо для того, чтобы можно было автоматически нанести метки на карту гугла через этот сервис. Так как адресов около 50 000, то обрабатывать это вручную практически невозможно
gling, спасибо за ответ. Я пользовался таким методом, но, к сожалению, он ре решает массы вопросов. в первую очередь, не разбирает адреса, написанные через дефис, типа
Цитата
вул.Радіаторна: 38–44
. Мне же критично, чтобы каждый адрес был отдельно. Это необходимо для того, чтобы можно было автоматически нанести метки на карту гугла через этот сервис. Так как адресов около 50 000, то обрабатывать это вручную практически невозможноVseslav
Думаю без макроса не обойтись... да и с макросом будет непросто. А Вы видели что в Вашем файле далеко не все улицы? Есть "пров.", "селище" ...ну и в оригинальном файле наверняка еще много всяких типов улиц, как "мікрорайон", "просп." ...? Кроме того не все адреса разделены знаком ";" например :
Я когда-то работал с адресами... и поверьте что без ручного труда не обойтись. Я настоял на составлении отдельного окна ввода адресов с перепроверкой по справочникам улиц, городов поскольку у нас(как и у Вас) все вбивали адреса как попало. Сейчас все работают в 1С только так. Ну а если по сути проблемы то нужно прописать "логику" разбивки Ваших адресов на куски сначала на бумаге, потом попробовать применить это правило на данных, если оно сработало - то можно писать макрос. Из Вашего первого поста все просто - разделитель улиц = ";", а между домами = "," - так? тогда не пойму откуда из строки
Я бы делал это в несколько этапов, с обязательной перепроверкой... : 1.создать справочник расширений улиц("вул.", "просп", "проїзд"...) 2.После этого можно искать в текстовой строке эти расширения и разделять строку на основные адреса по этим расширениям... 3.после этого можно полученные данные типа: "вул.Демократична: 54–54/2, 56/2, 58/1–58/2, 60–60/2" разбивать на части по "," или "-".... Но даже при таком алгоритме ошибок в Вашем случае не избежать, поскольку исходя из Вашего файла - там писали кто и как хотел.... системность часто нарушена. Так что советую Вам набраться сил... работы будет много .
Думаю без макроса не обойтись... да и с макросом будет непросто. А Вы видели что в Вашем файле далеко не все улицы? Есть "пров.", "селище" ...ну и в оригинальном файле наверняка еще много всяких типов улиц, как "мікрорайон", "просп." ...? Кроме того не все адреса разделены знаком ";" например :
Я когда-то работал с адресами... и поверьте что без ручного труда не обойтись. Я настоял на составлении отдельного окна ввода адресов с перепроверкой по справочникам улиц, городов поскольку у нас(как и у Вас) все вбивали адреса как попало. Сейчас все работают в 1С только так. Ну а если по сути проблемы то нужно прописать "логику" разбивки Ваших адресов на куски сначала на бумаге, потом попробовать применить это правило на данных, если оно сработало - то можно писать макрос. Из Вашего первого поста все просто - разделитель улиц = ";", а между домами = "," - так? тогда не пойму откуда из строки
Я бы делал это в несколько этапов, с обязательной перепроверкой... : 1.создать справочник расширений улиц("вул.", "просп", "проїзд"...) 2.После этого можно искать в текстовой строке эти расширения и разделять строку на основные адреса по этим расширениям... 3.после этого можно полученные данные типа: "вул.Демократична: 54–54/2, 56/2, 58/1–58/2, 60–60/2" разбивать на части по "," или "-".... Но даже при таком алгоритме ошибок в Вашем случае не избежать, поскольку исходя из Вашего файла - там писали кто и как хотел.... системность часто нарушена. Так что советую Вам набраться сил... работы будет много .SLAVICK
Иногда все проще чем кажется с первого взгляда.
Сообщение отредактировал SLAVICK - Суббота, 30.08.2014, 23:19
А если Вам нужно чтобы это все отображалось на карте, то нужно еще и справочник улиц с правильными названиями, поскольку далеко не все улицы смогут найтись - например "вул.Мате-Залка" - правильнее наверно "вул.Мате-Залки", а "вул.Семеренка" - наверное "вул.Симиренка". Поэтому после разбора на адреса - нужно улицы перепроверить на соответствие справочнику - особенно "двойные", "тройные"...("вул.Миколи Руднєва", "вул.М Руднєва", "вул.Руднєва М.") У нас на фирме нам понадобилось 3 мес. чтобы привести все адреса к шаблонному виду.... так-что крепитесь
А если Вам нужно чтобы это все отображалось на карте, то нужно еще и справочник улиц с правильными названиями, поскольку далеко не все улицы смогут найтись - например "вул.Мате-Залка" - правильнее наверно "вул.Мате-Залки", а "вул.Семеренка" - наверное "вул.Симиренка". Поэтому после разбора на адреса - нужно улицы перепроверить на соответствие справочнику - особенно "двойные", "тройные"...("вул.Миколи Руднєва", "вул.М Руднєва", "вул.Руднєва М.") У нас на фирме нам понадобилось 3 мес. чтобы привести все адреса к шаблонному виду.... так-что крепитесь SLAVICK
Иногда все проще чем кажется с первого взгляда.
Сообщение отредактировал SLAVICK - Суббота, 30.08.2014, 23:39
(+ сюрпризы, которые не попали под правила) Все остальное можно разнести автоматически. Можно конечно попытаться разнести и 60–60/2 на 60, 60/1, 60/2 .... но при таком подходе может получится слишком много несуществующих домов... а при делении на 60, 60/2 - Вы упустите 60/1...
Советую сразу разносить по столбцам: Тип улицы Название улицы Номер дома
И после того как разнесете все адреса нужно будет название улиц "прогнать" через справочник улиц, и те которые не найдутся подправить. Но это уже совсем другая тема
Пожалуйста Если Вы пойдете по предложенному выше сценарию - то разбирать вручную останется только на дома строки типа
(+ сюрпризы, которые не попали под правила) Все остальное можно разнести автоматически. Можно конечно попытаться разнести и 60–60/2 на 60, 60/1, 60/2 .... но при таком подходе может получится слишком много несуществующих домов... а при делении на 60, 60/2 - Вы упустите 60/1...
Советую сразу разносить по столбцам: Тип улицы Название улицы Номер дома
И после того как разнесете все адреса нужно будет название улиц "прогнать" через справочник улиц, и те которые не найдутся подправить. Но это уже совсем другая тема SLAVICK