Добрый день! Уважаемые специалисты, подскажите, пожалуйста. Столкнулась с такой задачкой. Есть список адресов, но в некоторых отсутствует индекс, а его наличие обязательно. Ход мысли такой. Если первое значение в строке число, то ничего не менять. А если нет, то найти совпадение из списка областей (первый столбец листа Индексы) с текстом из строки. Если есть совпадение, до вставить соответствующее найденному совпадению значение (индекс из столбца 2 листа Индекс) на 0 позицию строки
Добрый день! Уважаемые специалисты, подскажите, пожалуйста. Столкнулась с такой задачкой. Есть список адресов, но в некоторых отсутствует индекс, а его наличие обязательно. Ход мысли такой. Если первое значение в строке число, то ничего не менять. А если нет, то найти совпадение из списка областей (первый столбец листа Индексы) с текстом из строки. Если есть совпадение, до вставить соответствующее найденному совпадению значение (индекс из столбца 2 листа Индекс) на 0 позицию строкиEvaNa
... на 0 позицию строки. А если совпадения не будет, то окрасить ячейку в красный цвет (на случай ошибки недостаточных данных, ни индекса, ни региона). Вот с задачей присвоения цвета я так понимаю можно справиться только макросом. Сама пыталась решить формулой, но вышло так, что он вставляет не соответствующий искомому значению индекс, а индекс который в такой же строке на другом листе.
... на 0 позицию строки. А если совпадения не будет, то окрасить ячейку в красный цвет (на случай ошибки недостаточных данных, ни индекса, ни региона). Вот с задачей присвоения цвета я так понимаю можно справиться только макросом. Сама пыталась решить формулой, но вышло так, что он вставляет не соответствующий искомому значению индекс, а индекс который в такой же строке на другом листе.EvaNa
Kuzmich, Потому что это точный индекс данного адреса. Но если, в адресе отсутствует таковой точный индекс, то хотя бы присвоить индекс области в которую он входит
Kuzmich, Потому что это точный индекс данного адреса. Но если, в адресе отсутствует таковой точный индекс, то хотя бы присвоить индекс области в которую он входитEvaNa
На листе Индексы Новосибирской обл. соответствует индекс 630000 Посмотрите макрос [vba]
Код
Sub Tablica() Dim i As Long Dim iLastRow As Long Dim Region As String Dim FoundRegion As Range iLastRow = Cells(Rows.Count, "B").End(xlUp).Row Range("C3:C" & iLastRow).Interior.ColorIndex = xlNone With CreateObject("VBScript.RegExp") .IgnoreCase = True For i = 3 To iLastRow If Not IsNumeric(Left(Cells(i, "B"), 6)) Then .Pattern = "[А-ЯЁ]+(?= обл)" Region = "нет такой области" If .test(Cells(i, "B")) Then Region = .Execute(Cells(i, "B"))(0) Set FoundRegion = Worksheets("Индексы").Columns(1).Find(Region, , xlValues, xlWhole) If Not FoundRegion Is Nothing Then Cells(i, "C") = FoundRegion.Offset(, 1) & ", " & Cells(i, "B") Else Cells(i, "C") = Cells(i, "B") Cells(i, "C").Interior.ColorIndex = 6 'если нет области и индекса, то красим ячейку желтым End If Else Cells(i, "C") = Cells(i, "B") End If Next End With End Sub
[/vba]
На листе Индексы Новосибирской обл. соответствует индекс 630000 Посмотрите макрос [vba]
Код
Sub Tablica() Dim i As Long Dim iLastRow As Long Dim Region As String Dim FoundRegion As Range iLastRow = Cells(Rows.Count, "B").End(xlUp).Row Range("C3:C" & iLastRow).Interior.ColorIndex = xlNone With CreateObject("VBScript.RegExp") .IgnoreCase = True For i = 3 To iLastRow If Not IsNumeric(Left(Cells(i, "B"), 6)) Then .Pattern = "[А-ЯЁ]+(?= обл)" Region = "нет такой области" If .test(Cells(i, "B")) Then Region = .Execute(Cells(i, "B"))(0) Set FoundRegion = Worksheets("Индексы").Columns(1).Find(Region, , xlValues, xlWhole) If Not FoundRegion Is Nothing Then Cells(i, "C") = FoundRegion.Offset(, 1) & ", " & Cells(i, "B") Else Cells(i, "C") = Cells(i, "B") Cells(i, "C").Interior.ColorIndex = 6 'если нет области и индекса, то красим ячейку желтым End If Else Cells(i, "C") = Cells(i, "B") End If Next End With End Sub
Kuzmich, Все верно. Тут ка иерархия Новосибирская область (630000), в нее входят города Барыбинск (632330), Куйбышев (632380) и др. Далее в городе идет разделение по отделениям. У меня нет базы всех адресов нашей страны из которой бы подбирался точный индекс. Поэтому если в адресе не будет указан точный индекс (например Новосибирская обл., г. Куйбышев...), то тогда будет подставлен индекс области в которую он входит. Для дальнейшей обработки необходимо наличие индекса в строке адреса
Kuzmich, Все верно. Тут ка иерархия Новосибирская область (630000), в нее входят города Барыбинск (632330), Куйбышев (632380) и др. Далее в городе идет разделение по отделениям. У меня нет базы всех адресов нашей страны из которой бы подбирался точный индекс. Поэтому если в адресе не будет указан точный индекс (например Новосибирская обл., г. Куйбышев...), то тогда будет подставлен индекс области в которую он входит. Для дальнейшей обработки необходимо наличие индекса в строке адресаEvaNa
Kuzmich, Спасибо большое. Насколько я могу понять будет проверка по строкам в которых встретиться слово область (" обл"). Тогда не будут проверены Республика и Край. Я правильно понимаю? Тут мой грешок, что в списке адресов в приложенном файле таковых не оказалось
Kuzmich, Спасибо большое. Насколько я могу понять будет проверка по строкам в которых встретиться слово область (" обл"). Тогда не будут проверены Республика и Край. Я правильно понимаю? Тут мой грешок, что в списке адресов в приложенном файле таковых не оказалосьEvaNa