Ребята подскажите, есть ли такая формула в екселе чтобы я мог отформатировать текст по единому (нужному мне) формату. а именно, у меня есть адреса клиентов, мне нужно вычленить из текста только город, название улицы и номер дома : есть ли такая функция?
Ребята подскажите, есть ли такая формула в екселе чтобы я мог отформатировать текст по единому (нужному мне) формату. а именно, у меня есть адреса клиентов, мне нужно вычленить из текста только город, название улицы и номер дома : есть ли такая функция?Bitos
Вариантов "рихтовки" кривых адресов море - ищите и обрящете, но автоматом - одной кнопкой - нет. Как один из выходов: брать за основу стат базу или лучше почтовую, а там уже сравнением пост индексов и пр. ps Много, срочно и лень - на многих форумах есть разделы заказов.
Вариантов "рихтовки" кривых адресов море - ищите и обрящете, но автоматом - одной кнопкой - нет. Как один из выходов: брать за основу стат базу или лучше почтовую, а там уже сравнением пост индексов и пр. ps Много, срочно и лень - на многих форумах есть разделы заказов.TimSha
ikki, вы имеете ввиду выложить конечный вид текста который мне нужен из каждой строки?
когда я писал "пример результата", я имел в виду пример результата так понятней?
по поводу задачи: как правило, решать её встроенными функциями - затея безнадёжная. разве что в случаях, когда данные имеют абсолютно одинаковую структуру и небольшое кол-во вариантов.
у Вас вариантов немало - кроме "г." перед городом, есть "г." после города, есть "г" без точки, есть "х.", есть "п." и, что самое печальное - есть строки без "г", "п" и "х" вообще. аналогичная ситуация с улицами и номерами домов разнообразие бардака удручает.
и это только на 37 строках примера. что там творится на Ваших 9000+ - можно только представлять.
теоретически - можно решить. макросами. скорее всего - на регулярках, хотя и не обязательно. примеров по форумам - действительно хватает. но эти примеры - под те данные. не под Ваши.
практически же работать придётся очень долго, поэтапно, выбирая возможные варианты написания адресов, желательно - подготовив список хотя бы городов/хуторов/поселков. и крайне маловероятно, что результат будет 100%-ным. но процентов 90+, надеюсь, вытянуть можно будет. у Вас хотя бы названия улиц перед названиями городов не идут.
ikki, вы имеете ввиду выложить конечный вид текста который мне нужен из каждой строки?
когда я писал "пример результата", я имел в виду пример результата так понятней?
по поводу задачи: как правило, решать её встроенными функциями - затея безнадёжная. разве что в случаях, когда данные имеют абсолютно одинаковую структуру и небольшое кол-во вариантов.
у Вас вариантов немало - кроме "г." перед городом, есть "г." после города, есть "г" без точки, есть "х.", есть "п." и, что самое печальное - есть строки без "г", "п" и "х" вообще. аналогичная ситуация с улицами и номерами домов разнообразие бардака удручает.
и это только на 37 строках примера. что там творится на Ваших 9000+ - можно только представлять.
теоретически - можно решить. макросами. скорее всего - на регулярках, хотя и не обязательно. примеров по форумам - действительно хватает. но эти примеры - под те данные. не под Ваши.
практически же работать придётся очень долго, поэтапно, выбирая возможные варианты написания адресов, желательно - подготовив список хотя бы городов/хуторов/поселков. и крайне маловероятно, что результат будет 100%-ным. но процентов 90+, надеюсь, вытянуть можно будет. у Вас хотя бы названия улиц перед названиями городов не идут. ikki
помощь по Excel и VBA ikki@fxmail.ru, icq 592842413, skype alex.ikki
Добрый вечер, Bitos, попробуйте выделить столбец А ctrl+f найти *г. (точка в конце) заменить на г. но заменится только часть, придется поискать ещё замены. Удачи.
Добрый вечер, Bitos, попробуйте выделить столбец А ctrl+f найти *г. (точка в конце) заменить на г. но заменится только часть, придется поискать ещё замены. Удачи.mus013
Bitos, Здравствуй земляк, Вот тебе файл, Вверху вводи предполагаемый текст для определения начала адреса. Чем левее, тем меньше приоритет. В названии должно что-то быть обязательно. Ну кое где вручную придется все равно доработать
Bitos, Здравствуй земляк, Вот тебе файл, Вверху вводи предполагаемый текст для определения начала адреса. Чем левее, тем меньше приоритет. В названии должно что-то быть обязательно. Ну кое где вручную придется все равно доработатьRichman
немножко сделал. пока - без номеров домов (там. где сейчас номера всё-таки попали - это случайно, из-за погрешностей в исх. данных) можно продолжить по аналогии. хотя и там есть нюансы.
кроме того, там, где город не удалось выделить, можно создавать список городов и работать с ним. но тоже аккуратно - чтобы, к примеру из "Краснодарский край" не "выделялся" город Краснодар.
[vba]
Код
Function ikki$(s$) Static r1 As Object, r2 As Object, r3 As Object, r4 As Object Dim s2$ If r1 Is Nothing Then Set r1 = CreateObject("vbscript.regexp") Set r2 = CreateObject("vbscript.regexp") Set r3 = CreateObject("vbscript.regexp") Set r4 = CreateObject("vbscript.regexp") r1.Pattern = ".*?(?:^|,)\s+([^,]*?)\s+([гпх]|пгт|ст)\.?\s*," r2.Pattern = ".*?([гпх]|пгт|ст)(?:\s+|\.\s*)([^,]+)" r3.Pattern = "(?:^|,)\s+([^,]*?)\s+(ул)\.?\s*," r4.Pattern = "(ул)(?:\s+|\.\s*)([^,]+)" End If If r1.test(s) Then Set m = r1.Execute(s) s2 = m(0).submatches(1) & "." & m(0).submatches(0) s = r1.Replace(s, "") ElseIf r2.test(s) Then Set m = r2.Execute(s) s2 = m(0).submatches(0) & "." & m(0).submatches(1) s = r2.Replace(s, "") Else s2 = "ГОРОД НЕ ВЫДЕЛЕН" End If ikki = s2
If r3.test(s) Then Set m = r3.Execute(s) ikki = s2 & ", " & m(0).submatches(1) & "." & m(0).submatches(0) ElseIf r4.test(s) Then Set m = r4.Execute(s) ikki = s2 & ", " & m(0).submatches(0) & "." & m(0).submatches(1) End If End Function
[/vba]
немножко сделал. пока - без номеров домов (там. где сейчас номера всё-таки попали - это случайно, из-за погрешностей в исх. данных) можно продолжить по аналогии. хотя и там есть нюансы.
кроме того, там, где город не удалось выделить, можно создавать список городов и работать с ним. но тоже аккуратно - чтобы, к примеру из "Краснодарский край" не "выделялся" город Краснодар.
[vba]
Код
Function ikki$(s$) Static r1 As Object, r2 As Object, r3 As Object, r4 As Object Dim s2$ If r1 Is Nothing Then Set r1 = CreateObject("vbscript.regexp") Set r2 = CreateObject("vbscript.regexp") Set r3 = CreateObject("vbscript.regexp") Set r4 = CreateObject("vbscript.regexp") r1.Pattern = ".*?(?:^|,)\s+([^,]*?)\s+([гпх]|пгт|ст)\.?\s*," r2.Pattern = ".*?([гпх]|пгт|ст)(?:\s+|\.\s*)([^,]+)" r3.Pattern = "(?:^|,)\s+([^,]*?)\s+(ул)\.?\s*," r4.Pattern = "(ул)(?:\s+|\.\s*)([^,]+)" End If If r1.test(s) Then Set m = r1.Execute(s) s2 = m(0).submatches(1) & "." & m(0).submatches(0) s = r1.Replace(s, "") ElseIf r2.test(s) Then Set m = r2.Execute(s) s2 = m(0).submatches(0) & "." & m(0).submatches(1) s = r2.Replace(s, "") Else s2 = "ГОРОД НЕ ВЫДЕЛЕН" End If ikki = s2
If r3.test(s) Then Set m = r3.Execute(s) ikki = s2 & ", " & m(0).submatches(1) & "." & m(0).submatches(0) ElseIf r4.test(s) Then Set m = r4.Execute(s) ikki = s2 & ", " & m(0).submatches(0) & "." & m(0).submatches(1) End If End Function