Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Excel
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 14.12.2010, 09:47   #1
evdss
Пользователь
 
Регистрация: 12.10.2010
Сообщений: 66
По умолчанию разбить адрес по столбцам

В одном столбце имеются адреса. надо разбить адрес по столбцам макросом
670024 г.Улан-Удэ,ул Чертенкова 127 п кв 8
670009 г.Улан-Удэ,п Зеленый д 1 кв 45
670034 г.Улан-Удэ,пр 50 лет Октября 4 кв 27
670024 г.Улан-Удэ,ул Революции 1905 года 104 а кв 88
670045 г.Улан-Удэ,пер Агрономический 3 кв 1
надо получить по столбцам
первый второй третий четвертый пятый шестой седьмой восьм
670024 г. Улан-Удэ ул Чертенкова 127 кв 8
Проблема, название улицы может быть из нескольких слов, может это быть ул или пер, номер дома с буквами и без.
Вложения
Тип файла: rar adr.rar (12.5 Кб, 41 просмотров)
evdss вне форума Ответить с цитированием
Старый 14.12.2010, 10:01   #2
vikttur
Участник клуба
 
Регистрация: 16.05.2010
Сообщений: 1,249
По умолчанию

Попробуйте инструмент Текст_по_столбцам (меню Данные). За несколько проходов - отделить первые столбцы (фиксированная ширина)...
vikttur вне форума Ответить с цитированием
Старый 14.12.2010, 10:25   #3
evdss
Пользователь
 
Регистрация: 12.10.2010
Сообщений: 66
По умолчанию

так и делаю, но файлов много и поэтому много ручной работы, как бы автоматизировать этот процесс
evdss вне форума Ответить с цитированием
Старый 15.12.2010, 18:13   #4
EducatedFool
Программист VBA
СуперМодератор
 
Аватар для EducatedFool
 
Регистрация: 13.07.2008
Сообщений: 6,856
По умолчанию

Попробуйте такой макрос:




Безусловно, макрос требует множества доработок.
В общем случае, добиться 100%-го разделения адресов невозможно - это задача для искусственного интеллекта.

Вот весь код:

Код:
Sub test()
    Dim cell As Range, ra As Range: Application.ScreenUpdating = False
    Set ra = Range([A2], Range("A" & Rows.Count).End(IIf(Len(Range("A" & Rows.Count)), xlDown, xlUp)))
    For Each cell In ra.Cells
        cell.Next.Resize(, 5) = РезультатыОбработки(cell)
    Next cell
    [b:f].EntireColumn.AutoFit
End Sub

Function РезультатыОбработки(ByVal txt As String)
    Индекс = Split(Trim(txt), " ")(0)
    txt = Trim(Mid(txt, Len(Индекс) + 1))
    
    Город = Split(Trim(txt), ",")(0)
    ОстатокАдреса = Trim(Mid(txt, Len(Город) + 1))
    If Город Like "г.*" Then Город = Trim(Mid(Город, 3))

    Улица = Split(Trim(ОстатокАдреса), " ")(0) & " " & Split(Trim(ОстатокАдреса), " ")(1)
    Улица = Replace(Улица, ",", ""): Улица = Replace(Улица, "ул ", "ул.")

    НачалоАдреса = Split(Trim(txt), " кв ")(0)
    Дом = Split(Trim(НачалоАдреса), " ")(UBound(Split(Trim(НачалоАдреса), " ")))
    If Not IsNumeric(Дом) Then Дом = Split(Trim(НачалоАдреса), " ")(UBound(Split(Trim(НачалоАдреса), " ")) - 1) & Дом

    If txt Like "* кв *" Then Квартира = Split(Trim(txt), " ")(UBound(Split(Trim(txt), " ")))

    РезультатыОбработки = Array(Индекс, Город, Улица, Дом, Квартира)
End Function
PS: Функцию РезультатыОбработки можно использовать и на листе - без запуска макросов:

Код:
  Ячейка: B2      Формула массива  (стиль A1):   =РезультатыОбработки(A2)
                  Формула массива  (стиль R1C1): =РезультатыОбработки(RC[-1])

Внимание: ввод формул массива завершается нажатием CTRL+SHIFT+ENTER вместо ENTER
Пример в файле:

EducatedFool вне форума Ответить с цитированием
Старый 15.12.2010, 18:42   #5
evdss
Пользователь
 
Регистрация: 12.10.2010
Сообщений: 66
По умолчанию

спасибо большое. попробую с улицами доработать
evdss вне форума Ответить с цитированием
Старый 15.12.2010, 18:48   #6
evdss
Пользователь
 
Регистрация: 12.10.2010
Сообщений: 66
По умолчанию

конечно может мне подсчитать количество пробелов в зависимости от этого количество слов в названии улицы?
evdss вне форума Ответить с цитированием
Старый 15.12.2010, 18:54   #7
EducatedFool
Программист VBA
СуперМодератор
 
Аватар для EducatedFool
 
Регистрация: 13.07.2008
Сообщений: 6,856
По умолчанию

Цитата:
может мне подсчитать количество пробелов в зависимости от этого количество слов в названии улицы?
не поможет. нужен гораздо более сложный анализ.

PS: если б это было так просто - я сразу бы реализовал это в макросе.
К примеру, номер дома может записан как "2", "2а", "2 а" или вообще не указан.
И к чему тут эти подсчёты слов?
EducatedFool вне форума Ответить с цитированием
Старый 15.12.2010, 19:04   #8
evdss
Пользователь
 
Регистрация: 12.10.2010
Сообщений: 66
По умолчанию

Улицы пока видимо придется вручную подгонять
evdss вне форума Ответить с цитированием
Старый 15.12.2010, 19:12   #9
EducatedFool
Программист VBA
СуперМодератор
 
Аватар для EducatedFool
 
Регистрация: 13.07.2008
Сообщений: 6,856
По умолчанию

Цитата:
Сообщение от evdss Посмотреть сообщение
Улицы пока видимо придется вручную подгонять
Могу всё это автоматизировать - но не бесплатно (работы много)
Макрос будет корректно разбивать адрес на составляющие в 95-99% случаев.

PS: есть много адресов, которые вообще непонятно как надо разбивать, например:
Цитата:
670009 г.Улан-Удэ,пер Невского 4 корп а 3 ком 4,5
670002 г.Улан-Удэ,ул Выборгская 17 общ
670002 г.Улан-Удэ,ул Октябрьская 21 корп с/с кв 23
670045 г.Улан-Удэ,ул Богданова 1/2
670002 г.Улан-Удэ,Бурятия Респ Улан-Удэ г,ул Октябрьская 20 а кв 22

Последний раз редактировалось EducatedFool; 15.12.2010 в 19:15.
EducatedFool вне форума Ответить с цитированием
Старый 24.07.2013, 11:00   #10
kagen
Новичок
Джуниор
 
Регистрация: 24.07.2013
Сообщений: 2
По умолчанию

Подскажите, пожалуйста, а как можно разбить один столбец текста на 2. Первый столбец должен быть максимум 35 символов (но без разрыва слов), а во втором должно быть все остальное.
kagen вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Поиск по столбцам Ded Motwey Microsoft Office Access 1 09.09.2010 17:00
скан по столбцам женя2010 Microsoft Office Excel 4 28.04.2010 18:02
Как разбить число на цифрыКак разбить число на цифры: 3241 => 3,2,4,1 (Pascal) Banderas123 Помощь студентам 3 07.12.2009 18:26
Цикл по столбцам niqx Microsoft Office Excel 18 11.10.2008 07:39
как узнать ip адрес зная mac адрес Roman Работа с сетью в Delphi 9 25.06.2007 12:39