Есть адреса, записанные в одну ячейку по каждой организации. Их надо расчленить на индексы и собственно адреса. Индексы я выделила, (правда кое-где, если индекса нет или стоит первая скобка - не сложилось, хотелось бы тоже ввести условие, что если строка начинается с цифры, то 6 левых символов). Как избавиться в колонке С от первых запятой, пробела и т.п.? То есть, например, если текст начинается с (, ) или (. ) или ( , ) и т.п., то их надо убрать.
Есть адреса, записанные в одну ячейку по каждой организации. Их надо расчленить на индексы и собственно адреса. Индексы я выделила, (правда кое-где, если индекса нет или стоит первая скобка - не сложилось, хотелось бы тоже ввести условие, что если строка начинается с цифры, то 6 левых символов). Как избавиться в колонке С от первых запятой, пробела и т.п.? То есть, например, если текст начинается с (, ) или (. ) или ( , ) и т.п., то их надо убрать.XBird
СТРОКА($1:$19) - это счетчик, формирует массив чисел от 1 до 19, можете поставить своё, только правильно рассчитайте, где у вас может, а где не может начинаться сам адрес. 191 - это код символа перед "первой буквой алфавита ('А')". В однобайтной кодировке таблицы ASCII смволы от "А" до "я" занимают позиции с кодами 192-255 (64 символа). Учитывайте, что буквы "Ёё" имеют коды меньше 192, но у вас вряд ли адрес начинается с буквы "ё"
Вообще, в формуле происходит следующее: - ПСТР(A1;СТРОКА($1:$19);1) отбирает по одному символу из первых 19 в ячейке - КОДСИМВ(...)>191 проверяет, что этот символ является русской буквой - ЕСЛИ(...;СТРОКА()) подставляет вместо "да/нет" из предыдущей проверки - порядковый номер символа Поскольку формула массивная - то мы получим не просто число, а массив чисел - номеров "букв" в начале строки. Естественно, минимальный из этих номеров и даст нам номер позиции в строке, где находится первая русская буква, что и делает МИН(). Ну и ПСТР(A1;<позиция первой буквы>;999) просто возвращает подстроку, начиная с указанной позиции и не более указанной длины. Так что если адрес будет содержать больше 999 символов - то обрежется.
СТРОКА($1:$19) - это счетчик, формирует массив чисел от 1 до 19, можете поставить своё, только правильно рассчитайте, где у вас может, а где не может начинаться сам адрес. 191 - это код символа перед "первой буквой алфавита ('А')". В однобайтной кодировке таблицы ASCII смволы от "А" до "я" занимают позиции с кодами 192-255 (64 символа). Учитывайте, что буквы "Ёё" имеют коды меньше 192, но у вас вряд ли адрес начинается с буквы "ё"
Вообще, в формуле происходит следующее: - ПСТР(A1;СТРОКА($1:$19);1) отбирает по одному символу из первых 19 в ячейке - КОДСИМВ(...)>191 проверяет, что этот символ является русской буквой - ЕСЛИ(...;СТРОКА()) подставляет вместо "да/нет" из предыдущей проверки - порядковый номер символа Поскольку формула массивная - то мы получим не просто число, а массив чисел - номеров "букв" в начале строки. Естественно, минимальный из этих номеров и даст нам номер позиции в строке, где находится первая русская буква, что и делает МИН(). Ну и ПСТР(A1;<позиция первой буквы>;999) просто возвращает подстроку, начиная с указанной позиции и не более указанной длины. Так что если адрес будет содержать больше 999 символов - то обрежется.AndreTM
Skype: andre.tm.007 Donate: Qiwi: 9517375010
Сообщение отредактировал AndreTM - Четверг, 30.10.2014, 14:27
19 - совершенно от фонаря. Это количество проверяемых символов от начала строки. Можно, конечно, написать 999, но это повлияет на производительность формулы - чем число меньше, тем формула шустрее. Но, с другой стороны, это число должно быть не меньше, чем позиция первой русской буквы в тексте. А 192 - это номер символа русской буквы "А".
19 - совершенно от фонаря. Это количество проверяемых символов от начала строки. Можно, конечно, написать 999, но это повлияет на производительность формулы - чем число меньше, тем формула шустрее. Но, с другой стороны, это число должно быть не меньше, чем позиция первой русской буквы в тексте. А 192 - это номер символа русской буквы "А"._Boroda_