Здравствуйте, есть заполненная одна ячейка, с двумя переносами строки, итак Пример:
Шевченко Максим Леонардович 123456 СК обл., г. Ставрополь, село Приморское, хутор. Волянский,,,,, ул. Малиновая, д.81 кв.21, проезд 4, стр. 7, квартал 554, корпус 11, а/я 78
получиться должно так в другой ячейке Шевченко Максим Леонардович ул. Малиновая, д.81 кв.21, проезд 4, стр. 7, квартал 554, корпус 11, а/я 78 хутор.Волянский, село Приморское, г.Ставрополь, СК обл.
Нужно с помощью функции UDF соединить по такому порядку 1 строка + 3 строка (конец) + 3 строка (середина) убрать оттуда любой индекс из 6 цифр ПРИМЕР прилагается в ячейке будет всегда 3 строки строку до первого переноса строки копируем как есть строку в конце копируем как есть, только переставим выше вторую строку переставим в конец, т. е. ставим в самый низ, оттуда убираем индекс, лишние запятые и хвосты в конце предложения, меняем текст под наш результат, то есть все до запятых, пишем предложение с конца (разделителем будет считаться запятая, только здесь точки с пробелами меняем на точки без пробелов "". "" на "".""
Sanja, можно сказать что так, а как сделать одной функцией у меня вышло это только 3-мя функциями и плюс потребовалась сцепка, что усложняет задачу Сцепка из трех SUBSTRING(D4;СИМВОЛ(10);1) SUBSTRING(D4;СИМВОЛ(10);3) ExampleTextReverse(Strokanumeric(SUBSTRING(D4;СИМВОЛ(10);2)))
Как вариант (для данного примера). Две функции. Можно код Private Function iReverse вставить в код основной. Можно было бы, в принципе, и Ваши вложить друг в друга.
Код
Function Goldenito(iStr$, Optional iDlm = vbLf)
aStr = Split(iStr, iDlm)
Goldenito = aStr(0) & iDlm & aStr(2) & iDlm & iReverse(Replace(Mid(aStr(1), 7), ". ", "."))
End Function
Private Function iReverse(iStr, Optional iDlm$ = ",")
arrStr = Split(iStr, iDlm)
For i = UBound(arrStr) To 0 Step -1
If arrStr(i) <> Empty Then
iReverse = IIf(iReverse <> Empty, iReverse & iDlm & arrStr(i), arrStr(i))
End If
Next
End Function
Sanja, почти супер, одна небольшая проблема с последней строкой, если индекс не прописан, то некорректно режет и в начале пробел здесь добавил замена строк с реверсом точки ". " на "."
Код
Private Function iReverse(iStr, Optional iDlm$ = ",")
arrStr = Split(iStr, iDlm)
For i = UBound(arrStr) To 0 Step -1
If arrStr(i) <> Empty Then
iReverse = IIf(iReverse <> Empty, iReverse & iDlm & arrStr(i), arrStr(i))
End If
Next
iReverse = Replace(iReverse, ". ", ".")
End Function
пример Шевченко Максим Леонардович СК обл., г. Ставрополь, село Приморское, хутор. Волянский,,,,, ул. Малиновая, д.81 кв.21, проезд 4, стр. 7, квартал 554, корпус 11, а/я 78 в результате Шевченко Максим Леонардович ул. Малиновая, д.81 кв.21, проезд 4, стр. 7, квартал 554, корпус 11, а/я 78 хутор.Волянский, село Приморское, г.Ставрополь,. пробел спереди и конец режет не цифры, а обычный текст ( хутор.Волянский, село Приморское, г.Ставрополь,.)
Sanja, вот такое получилось iReverse = Replace(iReverse, ",,,", ",") iReverse = Replace(iReverse, ",,", ",") как бороться с такими запятыми одной строкой
Код
Function Goldenito(iStr$, Optional iDlm = vbLf)
aStr = Split(iStr, iDlm)
Goldenito = aStr(0) & iDlm & aStr(2) & iDlm & iReverse(Strokanumeric(Replace(Mid(aStr(1), 1), ". ", ".")))
End Function
Private Function iReverse(iStr, Optional iDlm$ = ", ")
arrStr = Split(iStr, iDlm)
For i = UBound(arrStr) To 0 Step -1
If arrStr(i) <> Empty Then
iReverse = IIf(iReverse <> Empty, iReverse & iDlm & arrStr(i), arrStr(i))
End If
Next
iReverse = Replace(iReverse, ",,,", ",")
iReverse = Replace(iReverse, ",,", ",")
End Function
Function Strokanumeric(txt As String) As String
' убирает в начале цифры
Dim i&
For i = 1 To Len(txt)
If InStr(" 0123456789.,", Mid(txt, i, 1)) = 0 Then Exit For
Next i
Strokanumeric = Mid(txt, i, Len(txt) - i + 1)
End Function