Добрый день! Очень нужна помощь в таком вопросе: есть список адресов, но он в хаотичном порядке, город, улица не всегда стоят на нужном месте НУЖНО выстроить в определенной последовательности список, что бы сначала шел: индекс, страна, город, улица (проспект, переулок и т.д.)+дом и квартира изначально прикладываю ексель, нужна формула, но интуитивно понимаю, что скорее всего нужен макрос Информация будет вноситься постоянно, нужно настроить автораспределение и переформатирование
Буду благодарна за помощь
Добрый день! Очень нужна помощь в таком вопросе: есть список адресов, но он в хаотичном порядке, город, улица не всегда стоят на нужном месте НУЖНО выстроить в определенной последовательности список, что бы сначала шел: индекс, страна, город, улица (проспект, переулок и т.д.)+дом и квартира изначально прикладываю ексель, нужна формула, но интуитивно понимаю, что скорее всего нужен макрос Информация будет вноситься постоянно, нужно настроить автораспределение и переформатирование
For i = LBound(MyArr) To UBound(MyArr) Select Case True Case i = 0 And IsNumeric(MyArr(i)): j = 1 Case Trim(MyArr(i)) = "Россия": j = 2 Case Contains(MyArr(i), ArrAddress) Or IsNumeric(MyArr(i)): j = 4 Case Else: j = 3 End Select
TempArr(j) = IIf(Len(TempArr(j)) > 0, TempArr(j) & ", ", "") & Trim(MyArr(i)) Next ' If IsEmpty(TempArr(2)) Then TempArr(2) = "Россия" If entry = 0 Then For i = 1 To 4 If Len(TempArr(i)) > 0 Then str = str & IIf(Len(str) > 0, ", ", "") & TempArr(i) End If Next MyAddress = str Else MyAddress = TempArr(entry) End If
End Function
Function Contains(String1$, ArrString As Variant, Optional Start% = 1, _ Optional compare As VbCompareMethod = vbTextCompare) As Boolean ' функция проверки вхождения значения из массива ArrString в строке String1 без учёта регистра Dim findPosition%, i& Contains = False For i = LBound(ArrString) To UBound(ArrString) findPosition = InStr(Start, String1, ArrString(i), compare) If findPosition >= Start Then Contains = True: Exit Function Next i End Function
[/vba]
Rusya807, на основании последнего примера получилось вот так
[vba]
Код
Option Explicit
Function MyAddress(rng As Range, Optional entry% = 0) As String '' Author: boa '' Written: 09.07.2018 ' Description: возвращает строку адреса _ entry - числовой параметр от 0 до 4 возвращаемой строки _ 0 -полный адрес _ 1 - индекс _ 2 - Страна _ 3 - населенный пункт/область _ 4 - улица, дом, кв и.т.д.
Dim MyArr$(), TempArr(1 To 4), i&, j&, str$ MyArr = Split(rng.Text, ",")
For i = LBound(MyArr) To UBound(MyArr) Select Case True Case i = 0 And IsNumeric(MyArr(i)): j = 1 Case Trim(MyArr(i)) = "Россия": j = 2 Case Contains(MyArr(i), ArrAddress) Or IsNumeric(MyArr(i)): j = 4 Case Else: j = 3 End Select
TempArr(j) = IIf(Len(TempArr(j)) > 0, TempArr(j) & ", ", "") & Trim(MyArr(i)) Next ' If IsEmpty(TempArr(2)) Then TempArr(2) = "Россия" If entry = 0 Then For i = 1 To 4 If Len(TempArr(i)) > 0 Then str = str & IIf(Len(str) > 0, ", ", "") & TempArr(i) End If Next MyAddress = str Else MyAddress = TempArr(entry) End If
End Function
Function Contains(String1$, ArrString As Variant, Optional Start% = 1, _ Optional compare As VbCompareMethod = vbTextCompare) As Boolean ' функция проверки вхождения значения из массива ArrString в строке String1 без учёта регистра Dim findPosition%, i& Contains = False For i = LBound(ArrString) To UBound(ArrString) findPosition = InStr(Start, String1, ArrString(i), compare) If findPosition >= Start Then Contains = True: Exit Function Next i End Function
Rusya807, на основании последнего примера получилось вот так
правильно ли я понимаю, в последующем мне нужно будет допустим внести неформатированный список, далее создать макрос (программу макросы вы написали) и по мере добавления информации в список мне нужно будет активировать макрос для распределения?
Rusya807, на основании последнего примера получилось вот так
правильно ли я понимаю, в последующем мне нужно будет допустим внести неформатированный список, далее создать макрос (программу макросы вы написали) и по мере добавления информации в список мне нужно будет активировать макрос для распределения?Rusya807
мне нужно будет активировать макрос для распределения
"MyAddress" - это по пользовательская функция, которая вписывается непосредственно в ячейку книги. Следующая формула вернет Населенный пункт
Код
=MyAddress($A9;3)
В зависимости от введенного параметра "entry" она возвращает ту или иную(см. описание) часть адреса. см. Приложенный файл к сообщению №10 если вы желаете перенести данную функцию в другую книгу, то надо переносить Module1. Подробнее про пользовательские функции, как их перенести в другую книгу или во все открытые книги, лучше погуглить
мне нужно будет активировать макрос для распределения
"MyAddress" - это по пользовательская функция, которая вписывается непосредственно в ячейку книги. Следующая формула вернет Населенный пункт
Код
=MyAddress($A9;3)
В зависимости от введенного параметра "entry" она возвращает ту или иную(см. описание) часть адреса. см. Приложенный файл к сообщению №10 если вы желаете перенести данную функцию в другую книгу, то надо переносить Module1. Подробнее про пользовательские функции, как их перенести в другую книгу или во все открытые книги, лучше погуглитьboa