Вероятно тем, что это всего лишь тестовые примеры, а как это будет работать на реальной базе, не знает даже сам Василич по той простой причине, что не видел реальных баз.
Вероятно тем, что это всего лишь тестовые примеры, а как это будет работать на реальной базе, не знает даже сам Василич по той простой причине, что не видел реальных баз.StoTisteg
Интуитивно понятный код - это когда интуитивно понятно, что это код.
Если в 31-м сообщении это реальная база %), то там же "чёрт ноги поломает". Не, я так не гуляюсь. Вот чуть доработал и на этом... - пожалуйста. [vba]
Код
Sub tekst() For i = 1 To Range("K" & Rows.Count).End(xlUp).Row '№ последней строки ul = Cells(i, 11) 'название улицы If ul <> "" Then 'если улица не пусто st = Cells(i, 12) & " " & Cells(i, 13) st = Replace(st, ",", " ") 'текст в переменную без запятых st = Replace(st, ".", " ") 'текст в переменную без точек st = Replace(st, "ул", " ") 'текст в переменную без "ул" st = Application.Trim(st) & " " 'сжимаем пробелы и добавляем один в конец ns = InStr(st, ul) + Len(ul) + 1 'определяем № символа в строке после улицы sd = Mid(st, ns) 'берем часть строки после улицы If IsNumeric(Mid(sd, 1, 1)) = True Then 'если число после улицы KS = InStr(sd, " ") 'определяем № пробела в части строки ND = Mid(sd, 1, KS) 'выбираем символы из части строки до пробела Cells(i, 11) = Cells(i, 11) & " " & ND 'дописываем № дома к улице End If End If Next End Sub
Если в 31-м сообщении это реальная база %), то там же "чёрт ноги поломает". Не, я так не гуляюсь. Вот чуть доработал и на этом... - пожалуйста. [vba]
Код
Sub tekst() For i = 1 To Range("K" & Rows.Count).End(xlUp).Row '№ последней строки ul = Cells(i, 11) 'название улицы If ul <> "" Then 'если улица не пусто st = Cells(i, 12) & " " & Cells(i, 13) st = Replace(st, ",", " ") 'текст в переменную без запятых st = Replace(st, ".", " ") 'текст в переменную без точек st = Replace(st, "ул", " ") 'текст в переменную без "ул" st = Application.Trim(st) & " " 'сжимаем пробелы и добавляем один в конец ns = InStr(st, ul) + Len(ul) + 1 'определяем № символа в строке после улицы sd = Mid(st, ns) 'берем часть строки после улицы If IsNumeric(Mid(sd, 1, 1)) = True Then 'если число после улицы KS = InStr(sd, " ") 'определяем № пробела в части строки ND = Mid(sd, 1, KS) 'выбираем символы из части строки до пробела Cells(i, 11) = Cells(i, 11) & " " & ND 'дописываем № дома к улице End If End If Next End Sub
Отпишусь после полной проверки. Сначала не увидел, что появилась третья страница форума с дополненным макросом. Но что-то мне подсказывает, что изначально невыполнимая задача стала вполне выполнимой!
Отпишусь после полной проверки. Сначала не увидел, что появилась третья страница форума с дополненным макросом. Но что-то мне подсказывает, что изначально невыполнимая задача стала вполне выполнимой!emkub
Сообщение отредактировал emkub - Воскресенье, 20.03.2016, 18:02
Что же, теперь могу отписаться о этом проекте. В целом макрос работает почти идеально. Как и предполагалось, ошибка захвата этажа через "/" осталась (5/9). Думаю, это я смогу исправить даже красивее, чем описывал ранее, точность будет выше, если добавить проверку сравнения "а" и "б" в "а/б". В этажности "б" всегда больше; в нумерации домов "б" почти всегда меньше. Есть ещё парочка совсем мелочей, но то уже несущественно. ВСЕМ ОГРОМНОЕ СПАСИБО, в особенности ВАСИЛИЧУ! ВЫ СДЕЛАЛИ НЕВОЗМОЖНОЕ!
Что же, теперь могу отписаться о этом проекте. В целом макрос работает почти идеально. Как и предполагалось, ошибка захвата этажа через "/" осталась (5/9). Думаю, это я смогу исправить даже красивее, чем описывал ранее, точность будет выше, если добавить проверку сравнения "а" и "б" в "а/б". В этажности "б" всегда больше; в нумерации домов "б" почти всегда меньше. Есть ещё парочка совсем мелочей, но то уже несущественно. ВСЕМ ОГРОМНОЕ СПАСИБО, в особенности ВАСИЛИЧУ! ВЫ СДЕЛАЛИ НЕВОЗМОЖНОЕ! emkub