0 / 0 / 0 Регистрация: 10.10.2021 Сообщений: 3 |
|
1 |
|
Написать функцию вставляющую подстрока в строку с заданной позицией10.10.2021, 17:22. Показов 4086. Ответов 6
написать функцию вставляющую подстрока в строку с заданной позицией. Проверить, не выходит ли заданная позиция за пределы строки
0 |
Наивное Существо 666 / 141 / 27 Регистрация: 09.05.2020 Сообщений: 750 Записей в блоге: 15 |
|
10.10.2021, 19:07 |
2 |
savineon, а что не получается?
0 |
Argus19 531 / 373 / 76 Регистрация: 24.09.2017 Сообщений: 2,103 Записей в блоге: 13 |
||||
10.10.2021, 19:24 |
3 |
|||
Сообщение было отмечено savineon как решение РешениеУ меня получилось длинно и нудно:
Я проверяю, в соответствии с заданием только
не выходит ли заданная позиция за пределы строки .
2 |
0 / 0 / 0 Регистрация: 10.10.2021 Сообщений: 3 |
|
11.10.2021, 14:31 [ТС] |
4 |
Выдает ошибку в 10 строке где слово Insert
0 |
531 / 373 / 76 Регистрация: 24.09.2017 Сообщений: 2,103 Записей в блоге: 13 |
|
11.10.2021, 18:07 |
5 |
Выдает ошибку в 10 строке где слово Insert Это вызов функции для проверки.
0 |
0 / 0 / 0 Регистрация: 10.10.2021 Сообщений: 3 |
|
11.10.2021, 21:06 [ТС] |
6 |
Извиняюсь, все перепутал, мозги плывут уже, спасибо за ответ, очень помогли
0 |
Наивное Существо 666 / 141 / 27 Регистрация: 09.05.2020 Сообщений: 750 Записей в блоге: 15 |
|
11.10.2021, 21:11 |
7 |
Argus19, я, скорее всего, ошибаюсь, но не нравится связка Stred в строке и Str1 в 20 строке. Только заметилось
Извиняюсь, все перепутал, мозги п Так что тоже спешу писать ((((((
0 |
IT_Exp Эксперт 87844 / 49110 / 22898 Регистрация: 17.06.2006 Сообщений: 92,604 |
11.10.2021, 21:11 |
Помогаю со студенческими работами здесь Написать и протестировать функцию, которая по заданной строке Str формирует новую строку Написать функцию, удаляющую из строки заданную подстроку. Проверить существует в строке данная подстрока Написать и протестировать функцию, которая по заданной строке Str формирует новую строку, состоящую только из цифр, входящих в Str Опишите процедуру вставляющую в строку L Опишите процедуру вставляющую в строку L Необходимо написать функцию, вычисляющую частичную сумму функционального ряда в заданной точке с заданной точностью Необходимо написать функцию, вычисляющую частичную сумму функционального ряда в заданной точке с заданной точностью Искать еще темы с ответами Или воспользуйтесь поиском по форуму: 7 |
0 / 0 / 0 Регистрация: 03.11.2022 Сообщений: 11 |
|
1 |
|
09.12.2022, 00:17. Показов 348. Ответов 2
Доброй ночи друзья, помогите написать код в VBA в module через function Написать функцию вставляющую подстроку в строку с заданной позицией. Проверить, не выходит ли заданная позиция за пределы строки. Заранее благодарю
0 |
Programming Эксперт 94731 / 64177 / 26122 Регистрация: 12.04.2006 Сообщений: 116,782 |
09.12.2022, 00:17 |
2 |
ᴁ® 3070 / 1736 / 361 Регистрация: 13.12.2016 Сообщений: 5,939 Записей в блоге: 4 |
|
09.12.2022, 09:00 |
2 |
Сообщение было отмечено Medellin как решение Решение
1.Написать функцию вставляющую подстроку в строку с заданной позицией. Проверить, не выходит ли заданная позиция за пределы строки. Переделайте подпрограмму в функцию из предыдущего вашего вопроса. Останется только проверку позиции добавить.
1 |
Alex77755 11482 / 3773 / 677 Регистрация: 13.02.2009 Сообщений: 11,145 |
||||||||
09.12.2022, 09:39 |
3 |
|||||||
Сообщение было отмечено Medellin как решение Решение Сначала хотел помочь.
Добавлено через 1 минуту
Кашка
1 |
IT_Exp Эксперт 87844 / 49110 / 22898 Регистрация: 17.06.2006 Сообщений: 92,604 |
09.12.2022, 09:39 |
Помогаю со студенческими работами здесь В заданной строке с нулевым завершителем вставить заданную подстроку, начиная с заданной позиции В заданной строке с нулевым завершителем вставить заданную подстроку, начиная с заданной позиции Написать функцию замены элементов на 8 с заданной позиции до конца массива Написать функцию вставки в строку S подстроки S1 с позиции n, используя указатели Функция вставляющая подстроку начиная с заданной позиции Рассматривая строку как массив… Вставить подстроку ss в строку s с позиции N Написать и протестировать функцию для замены символов ‘:’ на ‘.’ в заданной строке, начиная с указанной позиции Искать еще темы с ответами Или воспользуйтесь поиском по форуму: 3 |
Работа с текстовыми строками является важной составляющей обработки информации с помощью Excel. С ними удобно работать вручную, если их общее количество относительно небольшое. Но как только число строк становится приличным (например, одна или даже несколько сотен), то операции с ними становятся довольно затруднительными.
Слава Богу, в арсенале Excel есть набор инструментов, позволяющих работать со строками текстового формата и автоматизировать большой объем процессов, связанных с ними. Сегодня их рассмотрим более подробно.
Содержание
- Как в Excel сделать разделение строки на подстроки
- Текстовые функции в Эксель
- Пример использования текстовых функций в Эксель
- Синтаксис функции ПСТР в Excel
- Подстрока из строки в Эксель при помощи функции ПСТР
Как в Excel сделать разделение строки на подстроки
Существует несколько методов, как сделать это. Прежде всего, это можно сделать с помощью текстовых функций. Самая популярная из них – ПСТР, но на самом деле их значительно больше. С их помощью можно реализовать почти любую задумку, которую придумает мозг или же будет поставлена руководством на работе.
Также возможно использование макросов для достижения этой цели. Для этого в VBA существует специальная функция – Split. Она разделяет строку по разделителям, в качестве которого может выступать как определенный символ, так и сразу несколько. Синтаксис функции включает три аргумента, из которых обязательным является только один.
- Expression. Это строка, которую нужно разбить на подстроки.
- Delimiter. Разделитель. Этот аргумент необязательный. Если в нем не указывать никаких значений, то по умолчанию будет в качестве разделителя приниматься пробел.
- Limit. То количество подстрок, на которое входная должна быть разделена. Этот аргумент также не обязательно указывать. В этом случае в качестве значения по умолчанию будет установлено -1.
- Compare. С помощью этого аргумента функции передается тип сравнения – двоичный или текстовый. Простыми словами, в первом случае (если тип сравнения установлен на 0), функция учитывает регистр букв при сравнении. В случае же текстового сравнения регистр букв не учитывается.
Значение, которое эта функция вернет – массив, в котором перечислены подстроки, число которых задается параметром limit. Как могло заинтересовать наблюдательного читателя, если поставить значение -1, то функцией будут возвращены все подстроки. И теперь давайте приведем несколько примеров, как работает эта VBA функция.
Sub Test1()
Dim a() As String
a = Split(«vremya ne zhdet»)
MsgBox a(0) & vbNewLine & a(1) & vbNewLine & a(2)
End Sub
Эта функция показывает оповещение, которое выдает три подстроки «vremya ne zhdet». В этом случае стоят настройки по умолчанию. Если записать такой код, то оповещение покажет строку «vremya ne-zhdet» из исходной строки той же самой, только используется вместо пробела дефис.
Sub Test2()
Dim a() As String
a = Split(«vremya-ne-zhdet»,»-«, 2)
MsgBox a(0) & vbNewLine & a(1)
End Sub
Здесь используются значения аргумента Delimiter в –, а Limit – 2. Таким образом, всего возможно была разбивка на три части, но поскольку мы указали только две, то видим, итоговый результат тоже являет собой одну подстроку «vremya» и одну подстроку «ne-zhdet». Видим, что все на самом деле невероятно просто.
Текстовые функции в Эксель
Все функции, предназначенные для работы с текстом, находятся в соответствующем разделе мастера функций. Их очень много. Мы же выберем из них те, которые используются чаще всего для решения прикладных задач:
- БАТТЕКСТ(Значение). Функция, необходимая для превращения ячейки числового формата в текстовый. Ее полезно использовать, если формула требует текстового значения, в то время как в ячейке число представлено в виде цифрового. С помощью данной функции можно конвертировать данные из одного типа в другой.
- ДЛСТР(Значение). Эта функция позволяет определить длину строки и то, сколько символов находится в ней. Возвращает число, соответствующее количеству знаков, которые записаны в этой строке.
- ЗАМЕНИТЬ(Старый текст, Начальная позиция, число знаков, новый текст). С помощью этой функции можно заменить один текст на другой, в качестве ориентира используя определенное количество знаков, начиная с позиции, которая указана пользователем.
- ЗНАЧЕН(Текст). Эта функция совершает противоположную первому оператору операцию – значение текстового формата превращает в числовой.
- ЛЕВСИМВ(Строка, Количество знаков). С помощью этой функции можно получить заданное пользователем количество символов строки, указанной человеком. При этом в учет берутся те знаки, которые располагаются слева.
- ПРАВСИМВ(Строка, Количество знаков). Принцип работы этой функции аналогичный, только с ее помощью можно вернуть определенное количество знаков справа. То есть, узнать, какой будет часть строки, начиная с самого последнего символа.
- НАЙТИ(текст для поиска, текст, в котором ищем, начальная позиция). С помощью этой функции можно получить позицию, на которой находится текст, заданный пользователем. Этот оператор можно использовать, только если регистр для нас важен. Если же нет разницы, какие буквы использовать: большие или маленькие, то есть аналогичная функция – ПОИСК. Также следует отметить, что эта функция будет возвращать исключительно первое вхождение, все последующие уже не берутся в учет. Для этого существуют другие функции.
- ПОДСТАВИТЬ (текст, старый текст, новый текст, позиция). Это очень интересная функция. В чем-то она схожа на оператор ЗАМЕНИТЬ, но имеет более широкий функционал. Если пользователь не указал последний аргумент, то замена осуществляется всех вхождений в тексте. Таким образом, это позволяет автоматизировать опции Excel «Заменить все».
- ПОДСТРОКА(Текст, разделитель, номер). С помощью этой функции можно получить строку, которая была разделена с помощью разделителя.
- ПСТР (Текст, Начальная позиция, Количество знаков). Это одна из самых главных функций, которую мы сегодня будем разбирать очень подробно. Она в чем-то имеет схожий принцип на ЛЕВСИМВ, только дает возможность начать поиск подстроки не с самого начала, а с определенной позиции.
- СЦЕПИТЬ (Текст1, Текст2…). Это функция, позволяющая объединить несколько строк. Является некой заменой оператору &. Максимальное количество строк, которые можно соединить между собой – 30.
Принцип многих этих функций схож. Поэтому когда вы изучите одну из них, будет значительно проще выучить следующие. А когда начать их применять на практике, то они будут выучены автоматически. Давайте опишем реальный пример, как можно использовать текстовые функции.
Пример использования текстовых функций в Эксель
Давайте опишем несколько практических применений текстовых функций. Для наглядности, мы представим работу функции ПОДСТРОКА и задачу, которую нужно решить. Первая колонка этой таблицы – полная строка. Вторая – значение, которое нам нужно найти в первой колонке. В третьем столбце перечислены формулы, с помощью которых это можно сделать.
Функция может ссылаться на ячейку в каждом своем аргументе. Например, номер подстроки может содержаться по определенному адресу. В таком случае формула будет иметь следующий вид.
А в этом примере мы попробуем разбить номер телефона на несколько частей.
Недостаток функции ПОДСТРОКА заключается в том, что требуется наличие разделителя, поэтому можно только отделять слова друг от друга или цифры в номере телефона.
Если нужно отделить одно слово от другого, то можно использовать разделитель в виде пробела. В таком случае надо открыть кавычку, поставить пробел, а потом закрыть кавычку в соответствующем аргументе.
Синтаксис функции ПСТР в Excel
Функция ПСТР в Excel используется наиболее часто, чтобы достать часть строки и использовать ее в дальнейших вычислениях или же просто записать в ячейке. Причина популярности этой функции проста – когда есть большой объем информации, который был импортирован с других программ, то нередко приходится доставать часть из нее в ручном режиме. А с помощью этой функции можно хоть немного автоматизировать процесс. Давайте разберем эту функцию более подробно.
Она предусматривает использование трех аргументов, каждый из которых является обязательным: текст, который обрезается, откуда начинать обрезку и где заканчивать. В качестве источника данных для обработки может быть текст, написанный в ячейке таблицы, а также тот, который был сгенерирован другой формулой. Так как нам нужно достать подстроку, то необходимо указать следующие аргументы:
- Текст. Текстовая строка, из которой мы будем получать «обрезанный» вариант. Кроме результата работы функции и ссылки на ячейку, в качестве параметра этого аргумента может также выступать и непосредственно текстовая константа. Но на практике ее использование лучше всего подходит для тренировки. В реальной жизни в этом нет необходимости, поскольку всегда можно вручную вставить нужный фрагмент текста в любую ячейку.
- Начальная позиция. Отсчет знаков для этого аргумента начинается с самого первого символа строки слева. Эта функция отличается от некоторых других тем, что отсчет символов осуществляется с числа 1, а не нуля.
- Число знаков. Здесь записывается итоговое количество знаков, которые нам надо отсчитать с начальной позиции. Минимальное значение – 1. Чисто гипотетически есть возможность указать в качестве значения этого аргумента 0, но в этом случае в качестве результата будет получена пустая строка.
В своем самом общем виде формула выглядит так: =ПСТР(текст; начальная_позиция; число_знаков)
Есть еще один вариант этой формулы: ПСТРБ, которая позволяет работать с мультибайтовыми строками. Но в нашем языке таких нет, поэтому достаточно просто знать о том, что такая формула есть. Возможных результата после работы этой формулы два:
- Ошибка. Если аргументы функции были неправильно указаны, то появляется ошибка #ЗНАЧ!. Типичные причины появления этой ошибки – нулевая позиция начала или отрицательное значение в аргументе «Число знаков».
- Строка. Если все параметры были указаны правильно, мы получаем итоговую текстовую строку.
Выделим некоторые моменты, на которые нужно обратить внимание при использовании этой функции:
- Параметр «Начальная позиция» не может быть больше, чем общая величина строки. Иначе в качестве результата функции будет выдана строка с нулевой длиной (то есть, пустая).
- Если, даже несмотря на то, что значение «начальная позиция» меньше итоговой длины строки, сумма значений «начальная позиция» и «число знаков» больше, чем общее количество знаков этого текста, то функцией возвращаются оставшиеся знаки, начиная с той позиции, которая указана. Таким образом, можно указать в качестве числа знаков заведомо большое число, чтобы функция вернула те символы, которые расположены справа до самого конца строки.
- Ошибка #ЗНАЧ! возникает в следующих ситуациях: если начальная позиция меньше единицы, число знаков или число байтов (для функции ПСТРБ) отрицательное.
Функция ПСТРБ вас может заинтересовать только если вы ведете таблицу Excel на японском, китайском и корейском языках. В этом случае некоторые иероглифы занимают больше, чем один байт в памяти.
Подстрока из строки в Эксель при помощи функции ПСТР
Давайте рассмотрим небольшой пример того, как можно выделить отдельные знаки из строки с помощью функции ПСТР. Приведем очень простую ситуацию. Предположим у нас в ячейке B14 записана простая строка, состоящая из последовательности чисел от 1 до 0. Предположим, нам надо из строки 1234567890 получить тройку. В таком случае формула должна быть такой: =ПСТР(B14;3;1).
Простыми словами, мы говорим программе, что из этой последовательности значений нужно достать один знак, стартуя третьим числом в этой строке. Несмотря на то, что она кажется числовой, в нашем примере она текстовая. После того, как мы дали эти команды программе, на выходе мы получим цифру 3. Когда же может понадобиться умение решать именно такую задачу? Прежде всего, когда у нас есть набор символов, содержащийся в одной строке, и нам нужно брать оттуда определенные знаки.
Оцените качество статьи. Нам важно ваше мнение:
Текстовые функции Excel
ФИО, номера банковских карт, адреса клиентов или сотрудников, комментарии и многое другое –все это является строками, с которыми многие сталкиваются, работая с приложением Excel. Поэтому полезно уметь обрабатывать информацию подобного типа. В данной статье будут рассмотрены текстовые функции в Excel, но не все, а те, которые, по мнению office-menu.ru, самые полезные и интересные:
Список всех текстовых функций Вы можете найти на вкладке «Формулы» => выпадающий список «Текстовые»:
Функция ЛЕВСИМВ
Возвращает подстроку из текста в порядке слева направо в заданном количестве символов.
Синтаксис: =ЛЕВСИМВ(текст; [количество_знаков])
- текст – строка либо ссылка на ячейку, содержащую текст, из которого необходимо вернуть подстроку;
- количество_знаков – необязательный аргумент. Целое число, указывающее, какое количество символов необходимо вернуть из текста. По умолчанию принимает значение 1.
Пример использования:
Формула: =ЛЕВСИМВ(«Произвольный текст»;8) – возвращенное значение «Произвол».
Функция ПРАВСИМВ
Данная функция аналогична функции «ЛЕВСИМВ», за исключением того, что знаки возвращаются с конца строки.
Пример использования:
Формула: =ПРАВСИМВ(«произвольный текст»;5) – возвращенное значение «текст».
Функция ДЛСТР
С ее помощью определяется длина строки. В качестве результата возвращается целое число, указывающее количество символов текста.
Синтаксис: =ДЛСТР(текст)
Пример использования:
Функция НАЙТИ
Возвращает число, являющееся вхождением первого символа подстроки, искомого текста. Если текст не найден, то возвращается ошибка «#ЗНАЧ!».
Синтаксис: =НАЙТИ(искомый_текст; текст_для_поиска; [нач_позиция])
- искомый_текст – строка, которую необходимо найти;
- текст_для_поиска – текст, в котором осуществляется поиск первого аргумента;
- нач_позиция – необязательный элемент. Принимает целое число, которое указывает, с какого символа текст_для_поиска необходимо начинать просмотр. По умолчанию принимает значение 1.
Пример использования:
Из отрывка стихотворения великого поэта С.А.Есенина находим вхождение первого символа строки «птица». Поиск осуществляется с начала строки. Если в приведенном примере поиск осуществлялся бы с 40 символа, то функция в результате вернула ошибку, т.к. позиции вхождения не было найдено.
Функция ЗАМЕНИТЬ
Данная функция заменяет часть строки в заданном количестве символов, начиная с указанного по счету символа на новый текст.
Синтаксис: ЗАМЕНИТЬ(старый_текст; начальная_позиция; количество_знаков; новый_текст)
- старый_текст – строка либо ссылка на ячейку, содержащую текст;
- начальная_позиция – порядковый номер символа слева направо, с которого нужно производить замену;
- количество_знаков – количество символов, начиная с начальная_позиция включительно, которые необходимо заменить новым текстом;
- новый_текст – строка, которая подменяет часть старого текста, заданного аргументами начальная_позиция и количество_знаков.
Пример использования:
Здесь в строке, содержащейся в ячейке A1, подменяется слово «старый», которое начинается с 19-го символа и имеет длину 6 символов, на слово «новый».
В случае обработки небольшого количества ячеек такой способ вполне приемлем. Но если обработать необходимо несколько тысяч различных строк, то процесс составления формул станет трудоемким. Поэтому переделаем рассмотренный пример, используя знания по тем функциям, которые уже описаны в начале статьи, а именно:
- Аргумент «начальная_позиция» подменим функцией «НАЙТИ»;
- В место аргумент «количество_знаков» вложим функцию «ДЛСТР».
В результате получим формулу: =ЗАМЕНИТЬ(A1;НАЙТИ(«старый»;A1);ДЛСТР(«старый»);»новый»)
Посмотрите на принтскрин окна функции. Возвращаемые результаты аргументов не поменялись, зато теперь их можно определять динамически, составив формулу один раз.
Функция ПОДСТАВИТЬ
Данная функция заменяет в тексте вхождения указанной подстроки на новый текст, чем схожа с функцией «ЗАМЕНИТЬ», но между ними имеется принципиальное отличие. Если функция «ЗАМЕНИТЬ» меняет текст, указанный посимвольно вручную, то функция «ПОДСТАВИТЬ» автоматически находит вхождения указанной строки и меняет их.
Синтаксис: ПОДСТАВИТЬ(текст; старый_текст; новый_текст; [номер_вхождения])
- текст – строка или ссылка на ячейку, содержащую текст;
- старый_текст – подстрока из первого аргумента, которую необходимо заменить;
- новый_текст – строка для подмены старого текста;
- номер_вхождения – необязательный аргумент. Принимает целое число, указывающее порядковый номер вхождения старый_текст, которое подлежит замене, все остальные вхождения затронуты не будут. Если оставить аргумент пустым, то будут заменены все вхождения.
Пример использования:
Строка в ячейке A1 содержит текст, в котором имеются 2 подстроки «старый». Нам необходимо подставить на место первого вхождения строку «новый». В результате часть текста «…старый-старый…», заменяется на «…новый-старый…».
Если ли бы последний аргумент был опущен, то результатом бы стала строка «строка, содержащая новый-новый текст».
Функция ПСТР
ПСТР возвращает из указанной строки часть текста в заданном количестве символов, начиная с указанного символа.
Синтаксис: ПСТР(текст; начальная_позиция; количество_знаков)
- текст – строка или ссылка на ячейку, содержащую текст;
- начальная_позиция – порядковый номер символа, начиная с которого необходимо вернуть строку;
- количество_знаков – натуральное целое число, указывающее количество символов, которое необходимо вернуть, начиная с позиции начальная_позиция.
Пример использования:
Из текста, находящегося в ячейке A1 необходимо вернуть последние 2 слова, которые имеют общую длину 12 символов. Первый символ возвращаемой фразы имеет порядковый номер 12.
Аргумент количество_знаков может превышать допустимо возможную длину возвращаемых символов. Т.е. если в рассмотренном примере вместо количество_знаков = 12, было бы указано значение 15, то результат не изменился, и функция так же вернула строку «функции ПСТР».
Для удобства использования данной функции ее аргументы можно подменить функциями «НАЙТИ» и «ДЛСТР», как это было сделано в примере с функцией «ЗАМЕНИТЬ».
Функция СЖПРОБЕЛЫ
Данная функция удаляется все лишние пробелы: пробелы по краям и двойные пробелы между словами. После обработки строк функцией остаются только одиночные пробелы между словами.
Синтаксис: =СЖПРОБЕЛЫ(текст)
Пример использования:
=СЖПРОБЕЛЫ( » Текст с лишними пробелами между словами и по краям « )
Результатом выполнения функции будет строка: «Текст с лишними пробелами между словами и по краям» .
Функция СЦЕПИТЬ
С помощью функции «СЦЕПИТЬ» можно объединить несколько строк между собой. Максимальное количество строк для объединения – 255.
Синтаксис: =СЦЕПИТЬ(текст1; [текст2]; …)
Функция должна содержать не менее одного аргумента
Пример использования:
Функция возвратит строку: «Слово1 Слово2».
Не забывайте, что функция самостоятельно не добавляет пробелы между строками, поэтому добавлять их приходится самостоятельно.
Вместо использования данной функции можно применять знак амперсанда «&». Он так же объединяет строки. Например: «=»Слово1″&» «&«Слово2″».
Как вытащить число или часть текста из текстовой строки в Excel
Сегодня мы с вами рассмотрим весьма распространённую ситуацию, возникающую в работе экономиста связанную с анализом данных.
Как правило, экономисту поручают проведение всевозможных видов анализа на основании бухгалтерских данных, группировку их специальным образом, получение дополнительных срезов, отличающихся от имеющихся бухгалтерских аналитик и т.д.
Речь здесь уже идет о преобразовании данных бухгалтерского учета в данные управленческого учета. Мы не будем говорить о необходимости сближения бухгалтерского и управленческого учета, или, по крайней мере, получения нужных срезов и аналитик в имеющихся учетных программах в автоматическом режиме. К сожалению, зачастую экономисту приходиться «перелопачивать» огромные объемы информации вручную.
И здесь, очень многое зависит, насколько эффективно организована работа, насколько экономист владеет своим основным прикладным инструментом – программой Excel, знает ее возможности и эффективные приемы обработки информации. Ведь одну и туже задачу можно решать разными способами, затрачивая разное количество времени и усилий.
Рассмотрим конкретную ситуацию. Вам нужно подготовить отчёт в разрезе, который нельзя получить в бухгалтерской программе. Вы выгрузили в Excel отчет по проводкам (оборотно-сальдовую ведомость, карточку счета и т.д. – не суть важно) и видите, что для нормальной фильтрации данных или создания сводной таблицы для анализа данных у вас не хватает одного признака (аналитики, разреза, субконто и т.д.).
Критически взглянув на таблицу, вы видите, что необходимый вам признак операции находиться тут же в таблице, но не в отдельной ячейке, а внутри текста. Например, код филиала в наименовании документа. А вам как раз надо подготовить отчет по поставщикам в разрезе филиалов, т.е. по двум признакам, один из которых отсутствует в приемлемом для дальнейшей обработки информации виде.
Если в таблице находиться десять операций, то проще проставить признак вручную в соседнем столбце, однако если записей несколько тысяч, то это уже проблематично.
Вся трудность, в том чтобы извлечь код из текстовой строки.
Возможна ситуация, когда этот код находиться всегда в начале текстовой строки или всегда в конце.
В этом случае, мы можем извлекать код или часть текста при помощи функций ЛЕВСИМВ и ПРАВСИМВ, которые возвращают заданное количество знаков соответственно с начала строки или с конца строки.
Текст – обязательный аргумент. Текстовая строка, содержащая символы, которые требуется извлечь.
Количество_знаков — необязательный аргумент. Количество символов, извлекаемых функцией ЛЕВСИМВ (ПРАВСИМВ).
«Количество_знаков» должно быть больше нуля или равно ему. Если «количество_знаков» превышает длину текста, функция ЛЕВСИМВ (ПРАВСИМВ) возвращает весь текст. Если значение «количество_знаков» опущено, оно считается равным 1.
Зная количество знаков, которые содержит код, мы легко извлечем необходимые символы.
Сложнее если нужные нам символы находятся в середине текста.
Извлечь число, текст, код и т.д. из середины текстовой строки может функция ПСТР, возвращает заданное число знаков из строки текста, начиная с указанной позиции.
=ПСТР(текст; начальная_позиция; количество_знаков)
Текст – обязательный аргумент. Текстовая строка, содержащая символы, которые требуется извлечь.
Начальная_позиция – обязательный аргумент. Позиция первого знака, извлекаемого из текста. Первый знак в тексте имеет начальную позицию 1 и так далее.
Количество_знаков – обязательный аргумент. Указывает, сколько знаков должна вернуть функция ПСТР.
Самый простой случай – если код находиться на одном и том же месте от начала строки. Например, у нас наименование документа начинается всегда одинаково «Поступление товаров и услуг ХХ ….»
Наш признак «ХХ» — код филиала начинается с 29 знака и имеет 2 знака в своем составе.
В нашем случае формула будет иметь вид:
Однако не всегда все так безоблачно. Предположим, мы не можем со 100% уверенностью сказать, что наименование документа у нас во всех строках будет начинаться одинаково, но мы точно знаем, что признак филиала закодирован в номере документа следующим образом:
Первый символ – первая буква в наименовании филиала, второй символ – это буква Ф (филиал) и далее следует пять нулей «00000». Причем меняется только первый символ — первая буква наименования филиала.
Обладая такими существенными знаниями, мы можем смело использовать функцию ПОИСК, которая находит нужный нам текст в текстовой строке и возвращают начальную позицию нужного нам текста внутри всей текстовой строки.
=ПОИСК(искомый_текст; текст_для_поиска; [нач_позиция])
Искомый_текст – обязательный аргумент. Текст, который требуется найти.
Просматриваемый_текст – обязательный аргумент. Текст, в котором нужно найти значение аргумента искомый_текст.
Нач_позиция – необязательный аргумент. Номер знака в аргументе просматриваемый_текст, с которого следует начать поиск.
Функция ПОИСК не учитывает регистр. Если требуется учитывать регистр, используйте функцию НАЙТИ.
В аргументе искомый_текст можно использовать подстановочные знаки: вопросительный знак (?) и звездочку (*). Вопросительный знак соответствует любому знаку, звездочка — любой последовательности знаков. Если требуется найти вопросительный знак или звездочку, введите перед ним тильду (
Обозначив меняющийся первый символ знаком вопроса (?), мы можем записать итоговую формулу для выделения кода филиала в таком виде:
Эта формула определяет начальную позицию кода филиала в наименовании документа, а затем возвращает два знака кода, начиная с найденной позиции.
В результате, мы получим в отдельном столбце код филиала, который сможем использовать как признак для фильтрации, сортировки или создания сводной таблицы.
Функции Excel для работы с элементами строк
Следующие функции находят и возвращают части текстовых строк или составляют большие строки из небольших: НАЙТИ (FIND), ПОИСК (SEARCH), ПРАВСИМВ (RIGHT), ЛЕВСИМВ (LEFT), ПСТР (MID), ПОДСТАВИТЬ (SUBSTITUTE), ПОВТОР (REPT), ЗАМЕНИТЬ (REPLACE), СЦЕПИТЬ (CONCATENATE).
Функции НАЙТИ и ПОИСК
Функции НАЙТИ (FIND) и ПОИСК (SEARCH) используются для определения позиции одной текстовой строки в другой. Обе функции возвращают номер символа, с которого начинается первое вхождение искомой строки. Эти две функции работают одинаково за исключением того, что функция НАЙТИ учитывает регистр букв, а функция ПОИСК допускает использование символов шаблона. Функции имеют следующий синтаксис:
=НАЙТИ(искомый_текст;просматриваемый_текст;нач_позиция)
=ПОИСК(искомый_текст;просматриваемый_текст;нач_позиция)
Аргумент искомый_текст задает текстовую строку, которую надо найти, а аргумент просматриваемый_текст — текст, в котором производится поиск. Любым из этих аргументов может быть строка символов, заключенная в двойные кавычки, или ссылка на ячейку. Необязательный аргумент нач_позиция задает позицию в просматриваемом тексте, с которой начинается поиск. Аргумент нач_позиция следует использовать в том случае, когда просматриваемый_текст содержит несколько вхождений искомого текста. Если данный аргумент опущен, Excel возвращает позицию первого вхождения.
Эти функции возвращают ошибочное значение, когда искомый_текст не содержится в просматриваемом тексте, либо нач_позиция меньши или равна нулю, либо нач_позиция превышает количество символов в просматриваемом тексте, либо нач_позиция больше позиции последнего вхождения искомого текста.
Например, чтобы определить позицию буквы «ж» в строке «Гаражные ворота», надо использовать формулу:
Эта формула возвращает 5.
Если точная последовательность символов искомого текста неизвестна, можно использовать функцию ПОИСК и включить в строку искомый_текст символы шаблона: знак вопроса (?) и звездочку (*). Знак вопроса соответствует одному произвольно набранному символу, а звездочка заменяет любую последовательность символов в указанной позиции. Например, чтобы найти позицию имен Анатолий, Алексей, Акакий в тексте, находящемся в ячейке А1, надо использовать формулу:
Функции ПРАВСИМВ и ЛЕВСИМВ
Функция ПРАВСИМВ (RIGHT) возвращает крайние правые символы строки аргумента, в то время как функция ЛЕВСИМВ (LEFT) возвращает первые (левые) символы. Синтаксис:
=ПРАВСИМВ(текст;количество_символов)
=ЛЕВСИМВ(текст;количество_символов)
Аргумент количество_символов задает число символов, извлекаемых из аргумента текст. Эти функции учитывают пробелы и поэтому, если аргумент текст содержит пробелы в начале или конце строки, в аргументах функций следует использовать функцию СЖПРОБЕЛЫ.
Аргумент количестов_символов должен быть больше или равен нулю. Если этот аргумент опускается, Excel считает его равным 1. Если количество_символов больше числа символов в аргументе текст, то возвращается весь аргумент.
Функция ПСТР
Функция ПСТР (MID) возвращает заданное число символов из строки текста, начиная с указанной позиции. Эта функция имеет следующий синтаксис:
=ПСТР(текст;нач_позиция;количество_символов)
Аргумент текст — это текстовая строка, содержащая извлекаемые символы, нач_позиция — это позиция первого символа, извлекаемого из текста (относительно начала строки), а количество_символов — это число извлекаемых символов.
Функции ЗАМЕНИТЬ и ПОДСТАВИТЬ
Эти две функции заменяют символы в тексте. Функция ЗАМЕНИТЬ (REPLACE) замещает часть текстовой строки другой текстовой строкой и имеет синтаксис:
=ЗАМЕНИТЬ(старый_текст;нач_позиция;количество_символов;новый_текст)
Аргумент старый_текст — это текстовая строка, а которой надо заменить символы. Следующие два аргумента задают символы, которые нужно заменить (относительно начала строки). Аргумент новый_текст задает вставляемую текстовую строку.
Например, ячейка А2 содержит текст «Вася Иванов». Чтобы поместить этот же текст в ячейку А3, заменив имя, надо в ячейку А3 вставить следующую функцию:
В функции ПОДСТАВИТЬ (SUBSTITUTE) начальная позиция и число заменяемых символов не задаются, а явно указывается замещаемый текст. Функция ПОДСТАВИТЬ имеет следующий синтаксис:
=ПОДСТАВИТЬ(текст;старый_текст;новый_текст;номер_вхождения)
Аргумент номер_вхождения является необязательным. Он предписывает Excel заменить только заданное вхождение строки старый_текст.
Например, ячейка А1 содержит текст «Ноль меньше восьми». Надо заменить слово «ноль» на «нуль».
Число 1 в этой формуле указывает, что надо изменить только первое «о» в строке ячейки А1. Если аргумент номер_вхождения опущен, Excel заменяет все вхождения строки старый_текст на строку новый_текст.
Функция ПОВТОР
Функция ПОВТОР (REPT) позволяет заполнить ячейку строкой символов, повторенной заданное количество раз. Синтаксис:
=ПОВТОР(текст;число_повторений)
Аргумент текст — это размноженная строка символов, заключенная в кавычки. Аргумент число_повторений указывает, сколько раз нужно повторить текст. Если аргумент число_повторений равен 0, функция ПОВТОР оставляет ячейку пустой, а если он не является целым числом, эта функция отбрасывает десятичные знаки после запятой.
Функция СЦЕПИТЬ
Функция СЦЕПИТЬ (CONCATENATE) является эквивалентом текстового оператора & и используется для объединения строк. Синтаксис:
=СЦЕПИТЬ(текст1;текст2;. )
В функции можно использовать до 30 аргументов.
Например, ячейка А5 содержит текст «первое полугодие», следующая формула возвращает текст «Всего за первое полугодие»:
=СЦЕПИТЬ(«Всего за «;А5)
В начало страницы
В начало страницы
Пример функция ПСТР для разделения текста на части в Excel
Функция ПСТР в Excel предназначена для выделения подстроки из строки текста, переданной в качестве первого аргумента, и возвращает требуемое количество символов начиная с заданной позиции.
Примеры использования функции ПСТР в Excel
Один символ в языках с однобайтовой кодировкой соответствует 1 байту. При работе с такими языками результаты функций ПСТР и ПСТРБ (возвращает подстроку из строки на основе количества заданных байт) не отличаются. Если на компьютере используется двухбайтовый язык, каждый символ при использовании ПСТРБ будет считаться за два. Двухбайтовыми языками являются корейский, японский и китайский.
Как разделить текст на несколько ячеек по столбцам в Excel?
Пример 1. В столбце таблицы содержатся даты, записанные в виде текстовых строк. Записать отдельно в соседних столбцах номер дня, месяца и год, выделенные из представленных дат.
Вид исходной таблицы данных:
Для заполнения номера дня используем следующую формулу (использовать в качестве формулы массива):
- A2:A10 – диапазон ячеек с текстовым представлением дат, из которых будут выделены номера дней;
- 1 – номер начальной позиции символа извлекаемой подстроки (первый символ в исходной строке);
- 2 – номер последней позиции символа извлекаемой подстроки.
Аналогичным способом выделим номера месяца и годы для заполнения соответствующих столбцов с учетом, что номер месяца начинается с 4-го символа в каждой строке, а год – с 7-го. Используем следующие формулы:
Вид заполненной таблицы данных:
Таким образом нам удалось разрезать на части текст в ячейках столбца A. Удалось отдельно каждую дату разделить на несколько ячеек по столбцам: день, месяц и год.
Как вырезать часть текста ячейки в Excel?
Пример 2. В столбце таблицы хранятся текстовые записи с наименованием и маркой товаров. Разделить имеющиеся строки на подстроки с наименованием и маркой соответственно и записать полученные значения в соответствующие столбцы таблицы.
Вид таблицы данных:
Для заполнения столбца «Наименование» используем следующую формулу:
Функция НАЙТИ возвращает номер позиции символа пробела « » в просматриваемой строке, который принимается в качестве аргумента число_знаков функции ПСТР. В результате расчетов получим:
Для заполнения столбца «Марка» используем следующую формулу массива:
Функция НАЙТИ возвращает позицию символа пробела. К полученному числу прибавляется единица для нахождения позиции первого символа названия марки продукта. Итоговое значение используется в качестве аргумента начальная_позиция функции ПСТР. Для упрощения, вместо поиска номера последней позиции (например, с помощью функции ДЛСТР) указано число 100, которое в данном примере гарантированно превышает количество знаков в изначальной строке.
В результате расчетов получим:
Как посчитать возраст по дате рождения в Excel?
Пример 3. В таблице содержатся данные о сотрудниках в столбцах ФИО и дата рождения. Создать столбец, в котором будет отображаться фамилия сотрудника и его возраст в формате «Иванов – 27».
Вид исходной таблицы:
Для возврата строки с фамилией и текущим возрастом используем следующую формулу:
Функция ПСТР возвращает часть строки до символа пробела, позиция которого определяется функцией НАЙТИ. Для нахождения возраста сотрудника используется функция РАЗНДАТ, полученное значение которой усекается до ближайшего меньшего целого, чтобы получить число полных лет. Функция ТЕКСТ преобразует полученное значение в текстовую строку.
Для соединения (конкатенации) полученных строк используются символы «&». В результате вычислений получим:
Особенности использования функции ПСТР в Excel
Функция имеет следующую синтаксическую запись:
- текст – обязательный для заполнения аргумент, принимающий ссылку на ячейку с текстом или текстовую строку, заключенную в кавычки, из которой будет извлечена подстрока определенной длины начиная с указанной позиции первого символа;
- начальная_позиция – обязательный аргумент, принимающий целые числа из диапазона от 1 до N, где N – длина строки, из которой требуется извлечь подстроку заданного размера. Начальная позиция символа в строке соответствует числу 1. Если данный аргумент принимает дробное число из диапазона допустимых значений, дробная часть будет усечена;
- число_знаков – обязательный аргумент, принимающий значение из диапазона неотрицательных чисел, которое характеризует длину в символах возвращаемой подстроки. Если в качестве этого аргумента передано число 0 (нуль), функция ПСТР вернет пустую строку. Если аргумент задан числом, превышающим количество символов в строке, будет возвращена вся часть строки начиная с указанной вторым аргументом позиции. В дробных числах, используемых в качестве данного аргумента, дробная часть усекается.
Функция ПСТРБ имеет схожий синтаксис:
Она отличается единственным аргументом:
- число_байтов – обязательный аргумент, принимающий целые числа из диапазона от 1 до N, где N – число байтов в исходной строке, характеризующий количество байт в возвращаемой подстроке.
- Функция ПСТР вернет пустую строку, если в качестве аргумента начальная_позиция было передано число, превышающее количество символов в исходной строке.
- Если в качестве аргумента начальная_позиция было передано значение 1, а аргумент число_знаков определен числом, которое равно или больше общему числу знаков в исходной строке, функция ПСТР вернет всю строку целиком.
- Если аргумент начальная_позиция был указан числом из диапазона отрицательных чисел или 0 (нулем), функция ПСТР вернет код ошибки #ЗНАЧ!.
- Если аргумент число_знаков задан отрицательным числом, результатом выполнения функции ПСТР будет код ошибки #ЗНАЧ!.
ПСТР, ПСТРБ (функции ПСТР, ПСТРБ)
В этой статье описаны синтаксис формулы и использование функций ПСТР и ПСТРБ в Microsoft Excel.
Функция ПСТР возвращает заданное число знаков из текстовой строки, начиная с указанной позиции.
Функция ПСТРБ возвращает определенное число знаков из текстовой строки, начиная с указанной позиции, на основе заданного числа байтов.
Эти функции могут быть доступны не на всех языках.
Функция ПСТР предназначена для языков с однобайтовой кодировкой, а ПСТРБ — для языков с двухбайтовой кодировкой. Язык по умолчанию, заданный на компьютере, влияет на возвращаемое значение следующим образом.
Функция ПСТР всегда считает каждый символ (одно- или двухбайтовый) за один вне зависимости от языка по умолчанию.
Функция ПСТРБ считает каждый двухбайтовый символ за два, если включена поддержка ввода на языке с двухбайтовой кодировкой, а затем этот язык назначен языком по умолчанию. В противном случае функция ПСТРБ считает каждый символ за один.
К языкам, поддерживающим БДЦС, относятся японский, китайский (упрощенное письмо), китайский (традиционное письмо) и корейский.
Аргументы функций ПСТР и ПСТРБ описаны ниже.
Текст Обязательный. Текстовая строка, содержащая символы, которые требуется извлечь.
Начальная_позиция Обязательный. Позиция первого знака, извлекаемого из текста. Первый знак в тексте имеет начальную позицию 1 и так далее.
Число_знаков Обязательный. Указывает, сколько знаков должна вернуть функция ПСТР.
Число_байтов Обязательный. Указывает, сколько знаков должна вернуть функция ПСТРБ (в пересчете на байты).
Если значение «начальная_позиция» больше, чем длина текста, то функция ПСТР возвращает строку «» (пустую строку).
Если значение «начальная_позиция» меньше, чем длина текста, но сумма значений «начальная_позиция» и «число_знаков» превышают длину текста, функция ПСТР возвращает знаки вплоть до конца текста.
Если значение «начальная_позиция» меньше 1, функция ПСТР возвращает значение ошибки #ЗНАЧ!.
Если значение «число_знаков» отрицательно, функция ПСТР возвращает значение ошибки #ЗНАЧ!.
Если значение «число_байтов» отрицательно, функция ПСТРБ возвращает значение ошибки #ЗНАЧ!.
Скопируйте образец данных из следующей таблицы и вставьте их в ячейку A1 нового листа Excel. Чтобы отобразить результаты формул, выделите их и нажмите клавишу F2, а затем — клавишу ВВОД. При необходимости измените ширину столбцов, чтобы видеть все данные.
Подборка по базе: Документ Microsoft Word.docx, Документ Microsoft Word (2).docx, Документ Microsoft Word (6).docx, Документ Microsoft Word.docx, Документ Microsoft Office Word (2).docx, Документ Microsoft Word (3).docx, Документ Microsoft Word (3).docx, Документ Microsoft Word.docx, Документ Microsoft Word (8).docx, Документ Microsoft Word (4).docx
Mid возвращает все символы в строке
S от позиции N1 до конца строки.
Right(S, N)
Возвращает значение типа String; копирует N символов из S, начиная с правого крайнего символа
S. Например, Right( outright , 5) возвращает строку right .
RTrim(S)
Возвращает копию строки S после удаления символов пробела из правой части строки (конечные символы).
Space(N)
Возвращает строку пробелов длиной N символов.
StrComp(Sl, S2, N)
Сравнивает S1 с S2 и возвращает число, обозначающее результат сравнения: -1, если S1 < S2;
0, если S1 = S2; и 1, если S1 > S2. N является необязательным и указывает, следует ли выполнять сравнение с учетом регистра. Если N опускается, строки сравниваются с использованием текущей установки Option Compare.
StrConv(S, N)
Возвращает строку, преобразованную в новую форму в зависимости от числового кода, заданного аргументом N. VBA предоставляет внутренние константы для использования с функцией StrConv;
наиболее полезными являются: vbProperCase
(преобразует строку так, что каждая буква, начинающая слово, становится заглавной),
vbLowerCase (преобразует строку в буквы нижнего регистра) и vbUpperCase (преобразует строку в
31 буквы верхнего регистра).
String(N, S)
Возвращает строку длиной N символов, состоящую из символа, заданного первым символом в S.
Например, String(5, «x») возвращает строку «ххххх».
Trim(S)
Возвращает копию строки S после удаления начальных и конечных символов пробела из этой строки.
UCase(S)
Возвращает S со всеми символами нижнего регистра, преобразованными в символы верхнего регистра.
Несколько перечисленных в табл. 5 функций преобразования типа данных относятся также к манипулированию строками: Chr, Format, CStr, в частности.
Примеры использования строковых функций:
n_probel=Instr(―Найти пробел‖,‖ ―) perv_simv=Left(―Выделение текста‖,1)
Пользовательские функции
Создание пользовательских функций или, как их иногда еще называют,
UDF-функций (User Defined Functions) принципиально не отличается от создания макроса в обычном программном модуле. Разница только в том, что макрос выполняет последовательность действий с объектами книги
(ячейками, формулами и значениями, листами, диаграммами и т.д.), а пользовательская функция — только с теми значениями, которые мы передадим ей как аргументы (исходные данные для расчета).
При написании функций-процедур для использования в качестве UDF в рабочих листах Excel необходимо знать несколько фактов, помимо общих требований для определенных пользователем функций:
Определенные пользователем функции, которые будут использоваться в Excel, не должны иметь имена, похожие на записи ссылок на ячейку
(например, А2; С1В5);
Любые строковые данные, возвращаемые из VBA в Excel, не должны иметь более 255 символов в длину. Если UDF возвращает строку, имеющую больше 255 символов в длину, в ячейку рабочего листа,
Excel укорачивает строку до максимальной длины 255 символов перед вставкой в ячейку;
При написании UDF, возвращающей значение даты для Excel убедитесь, что задаете тип результата функции как Date. Excel
32 применяет формат Date для результата функции в ячейке рабочего листа только, если результат имеет VBA-тип Date.
Структура пользовательской функции
Function имя_функции(арг1 As тип, арг2 As тип …) As тип
Тело функции имя_функции = выражение
End Function
Досрочный выход из функции выполняется с помощью оператора Exit
Function
Порядок создания пользовательской функции
Чтобы создать пользовательскую функцию для расчета, например, налога на добавленную стоимость (НДС) откроем редактор VBA, добавим новый модуль через меню Insert — Module и введем туда текст нашей функции:
Обратите внимание, что в отличие от макросов функции имеют заголовок
Function вместо Sub и непустой список аргументов (в нашем случае это
Summa). Если тив переменных и функции не задан, то тип интерпретируется как Variant. После ввода кода наша функция становится доступна в обычном окне Мастера функций (Вставка — Функция) в категории Определенные
пользователем (User Defined):
33
После выбора функции выделяем ячейки с аргументами (с суммой, для которой надо посчитать НДС) как в случае с обычной функцией:
Обратите внимание, что в диалоговом окне выводится : «Справка недоступна». Для того, чтобы отображать справку для пользовательской функции надо:
1.
В редакторе VBA открыть окно Object Browser View → Object Browser.
2.
В списке выбрать пользовательскую функцию. Эта функция располагается по алфавиту.
34 3.
Щелкнув правой кнопкой по названию функции, выбрать Properties …
35 4.
В диалоговом окне Member Options ввести пояснения в текстовое окно
Description.
ВАЖНО
Чтобы пояснения отображались в окне Мастер функций, надо Перед пользовательской функции указать доступ Public:
При вызове функции в окне будет отображаться:
Рассмотрим примеры пользовательских функций.
Задание 1
Создать новую книгу Функции. Набрать и отладить функции Vozr и
ИНИЦИАЛЫ/
Функция, вычисляющая возраст по дате рождения.
36
Функция получения фамилии и инициалов
Обеспечить вывод справки по данным функциям.
Продемонстрировать работу функций преподавателям.
Задания для самостоятельной работы
Вариант 1
1. Даны длина катета, найти длину гипотенузы
2. Найти количество дней между датами.
3. Написать функцию вставляющую подстрока в строку с заданной позицией.
Вариант 2
1. Дана гипотенуза и катет, найти второй катет
2. Найти количество месяцев между датами.
3. Дана строка, содержащая название книги, а затем фамилия и инициалы автора. Получить фамилию автора.
Вариант 3
1. Дан радиус окружности найти ее площадь
2. Найти количество недель между датами.
3. Дана строка, содержащая фамилию и группу. Получить строку фамилия и курс.
Вариант 4
1. Дан радиус найти длину окружности
2. Найти количество кварталов между датами.
3. Написать функцию, удаляющую из строки заданную подстроку.
Вариант 5
1. Даны стороны прямоугольника найти площадь прямоугольника
37 2. Сколько дней прошло с начала года
3. Дана строка с информацией о фирме содержащей расчетный счет.
Расчетный счет начинается со знака №. Выделить расчетный счет фирмы.
Вариант 6
1. Даны стороны прямоугольника. Найти периметр прямоугольника
2. Сколько дней осталось до конца года
3. Дано вещественное число получить из него цену в виде целая часть руб дробная часть из двух цифр коп.
Вариант 7
1. Даны длины сторон равнобедренной трапеции. Найти высоту трапеции.
2. Определить день недели первого дня заданного года.
3. Дана строка с ценой число руб. число коп. Преобразовать ее в вещественное число.
Вариант 8
1. Даны координаты начала и конца прямой линии.
2. Определить день недели сотого дня заданного года.
3. Дана дата в виде строки в американском формате месяц/день/год.
Переделать ее в русский формат день.месяц.год.
Вариант 9
1. Найти координаты середины линии.
2. Определить день недели 8 марта в заданном году.
3. Из строки Фамилия Имя Отчество дата рождения в виде день.месяц.год получить:
Фамилия Имя Отчество возраст.
Вариант 10
1. Даны стороны равнобедренного треугольника. Найти его высоту.
2. По дню рождения определить 10000 день жизни.
3. Из города улицы дома и квартиры получить адрес в виде: г. Город, ул. Улица, д.дом, кв. квартира
Вариант 11
1. Даны стороны параллелограмма. Найти площадь параллелограмма.
2. Определить день недели для 25-летнего юбилея.
3. Функцию выделяющую из строки подстроку по начальному и конечному символу.
Вариант 12
1. Даны длины сторон равнобедренной трапеции. Найти ее площадь.
2. По введенной дате определить век.
3. Даны отдельно фамилия, имя отчество получить фамилию и инициалы.
38
Контрольные вопросы
1. Где пишется код пользовательской функции.
2. Что такое аргументы функции.
3. Для чего надо указывать Public в заголовке функции.
4. Как задать справку для пользовательской функции.
5. Для чего указывается тип для функции.
6. Чем отличаются стандартные функции от пользовательских функций.
39
Лабораторная работа 3
Ветвления
Как и во всех других языках программирования, в VBA имеются различные управляющие конструкции, позволяющие изменять порядок выполнения программы При отсутствии управляющих конструкций операторы программы выполняются последовательно, начиная с первого и кончая последним Хотя в некоторых самых простых случаях этого и бывает достаточно, обычно все-таки требуется изменять порядок выполнения операторов при выполнении определенных условий, либо пропуская выполнение некоторых операторов, либо, наоборот, многократно повторяя их. Оказывается, для реализации любых алгоритмов достаточно иметь только два вида управляющих конструкций: ветвления и циклы
Управляющие конструкции ветвления позволяют проверить некоторое условие, а затем, в зависимости от результатов этой проверки, выполнить ту или иную группу операторов Для организации ветвлений в VBA используются различные формы оператора ветвления if и оператор выбора
Select Case
Краткая форма оператора ветвления if может иметь как однострочную, так и блочную форму. Простейшая, краткая форма оператора if используется для проверки одного условия, а затем, в зависимости от результата проверки, либо выполнения, либо пропуска одного оператора или блока из нескольких операторов
If <условие> Then
<блокОператоров1>
[Else
<блокОператоров2>]
End If
В качестве условия можно использовать логическое выражение, возвращающее значение True (ИСТИНА) или False (ЛОЖЬ). Если условие истинно, выполняется первый блок операторов, заключенный между ключевыми словами Then и Else, а в противном случае — второй блок, заключенный между ключевыми словами Else и End If.
Условия, которые записываются в условном операторе после слова If, бывают простые и сложные. Простые условия имеют следующую структуру:
Выражение Операция отношения
Выражение
Операции отношения
= равно
<> неравно
>
Больше
<
Меньше
>=
Больше или равно
<=
Меньше или равно
40
Например: a+b>6, Sin(x)<=0, f*h<>k+d
Оператор if может иметь краткую и полную форму. В краткой форме, если условие возвращает значение False, оператор или блок операторов, заключенных между ключевыми словами Then и End if, составляющих тело краткого оператора ветвления, не будет выполняться.
Пример краткой формы оператора if:
If a<0 Then a=-a
End If
Полная форма оператора if используется в тех случаях, когда имеются два различных блока операторов, и по результатам проверки условия нужно выполнить один из них.
Пример полной формы оператора if:
If x=0 Then x=1
Else z=y/x
End If
Для того чтобы текст вашей процедуры был понятным и удобным для восприятия, рекомендуется делать отступы для групп операторов так, как это указано при описании их синтаксиса. В VBA предусмотрено удобное средство изменения отступов — нажатие на клавишу <Таb> увеличивает отступ вправо, нажатие комбинации клавиш
+ уменьшает этот отступ.
Использование оператора if делает функции, позволяющие избежать некоторых ошибок. Например, использование функции ИНИЦИАЛЫ предполагает, что исходная строка обязательно содержит фамилию, имя и отчество. А если отчество отсутствует, то возникнет ошибка. Поэтому в коде программы надо проверить значение переменной n2_pr – положение второго пробела. Если эта переменная равна нулю, то отчество в строке отсутствует.
Функция будет иметь вид:
41
Задание 1
Набрать и отладить код функции ИНИЦИАЛЫ.
Еще один пример необходимости использования оператора If.
Задание 2
По году определить день недели для 1 января данного года.
Существует стандартная функция для определения номера для недели. Но эта функция дана для американского стандарта, в котором первым днем недели является воскресенье. Для русого стандарта, если день недели не воскресенье, то из него достаточно вычесть единицу. Но тогда воскресенье будет нулевым днем. Здесь требуется использовать оператор If. Функция будет иметь вид:
Иногда приходится делать выбор одного из целой группы альтернативных действий на основе проверки нескольких различных условий. Для этого можно использовать цепочку операторов ветвления
If…Then…ElseIf.
If <условие1> Then
<блокОператоров1>
Elself <условие2> Then
<блокОператоров2>
Elself <условие3> Then
<блокОператоров3>
Elself <условиеN> Then
<блокОператоровN>
Else
<блокОператоров_Еlsе>
End If
Пример использования блочного оператора if:
If n=1 Then текст=”год”
ElseIf n<5 Then текст =”года”
Else текст =”лет”
End If
42
В данном примере для числа n, обозначающем срок обучения от 1 до 6, определяется текст комментария.
Задание 3
Написать функцию определяющую по заданному весу (в килограммах) и росту (в метрах) ИНДЕКС МАССЫ ТЕЛА (Индекс Кетле) по формуле: вест/(рост*рост) и вывести комментарии согласно таблице
ИМТ
Комментарии
<18,5
Излишняя худоба
>=18,5 и <=22,9
Нормальный вес
>=23 и <=27,4
Избыточный вес
>27,5
Ожирение
Данная функция будет иметь вид:
Набрать и отладить данную функцию.
Задания для самостоятельной работы
Вариант 1
1. Написать функцию вставляющую подстроку в строку с заданной позицией. Проверить, не выходит ли заданная позиция за пределы строки.
2. В зависимости от возраста и пола выдать приветствие: Здравствуй девочка, мальчик , девушка, юноша, женщина, мужчина.
Вариант 2
1. Дана гипотенуза и катет, найти второй катет. Проверить, может ли существовать этот треугольник.
2. В зависимости от возраста ребенка выдать сообщение: младенец, ясельник, детсадовец, школьник.
Вариант 3
1. Найти количество недель между датами. Проверить, чтобы первая дата была меньше второй, иначе переставить их местами.
2. В зависимости от введенной суммы и валюты: доллар, евро, фунт, иена, перевести сумму в рубли.
43
Вариант 4
1. Написать функцию, удаляющую из строки заданную подстроку.
Проверить существует в стоке данная подстрока.
2. В зависимости от номера месяца вывести: зима, лето, осень, весна.
Вариант 5
1. Дана строка с информацией о фирме содержащей расчетный счет.
Расчетный счет начинается со знака №. Выделить расчетный счет фирмы. Проверить присутствует ли в адресе расчетный счет.
2. В зависимости от часа вывести время суток: утро, день, вечер, ночь.
Вариант 6
1. Дано вещественное число получить из него цену в виде целая часть руб. дробная часть из двух цифр коп. Проверить положительное ли данное число.
2. В зависимости от возраста ребѐнка вывести лет, года, год.
Вариант 7
1. Дана строка с ценой число руб. число коп. Преобразовать ее в вещественное число. Проверить, есть ли в данной строке руб. или коп.
2. Задумать число от 1 до 10 и запросить ответ. В зависимости от введенного числа вывести больше, меньше или равно.
Вариант 8
1. Дана дата в виде строки в американском формате месяц/день/год.
Переделать ее в русский формат день.месяц.год. Проверить правильно ли заданы месяц и день.
2. Ввести год, месяц, день. В зависимости от даты вывести: прошлое, настоящее будущее.
Вариант 9
1. Из строки Фамилия Имя Отчество дата рождения в виде день.месяц.год получить:
Фамилия Имя Отчество возраст. Проверить правильно ли заданы месяц и день.
2. Ввести рост человека и пол. В зависимости от роста и пола вывести низкий, средний и высокий.
Вариант 10
1. Даны стороны равнобедренного треугольника. Найти его высоту.
Проверить, существует ли такой треугольник.
2. Ввести летнюю температуру. И вывести комментарии: тепло прохладно, холодно и мороз.
44
Вариант 11
1. Функцию выделяющую из строки подстроку по начальному и конечному символу. Проверить, не выходит ли конечный символ за пределы строки.
2. Ввести температуру в помещении. Вывести комментарий: жарко тепло прохладно и холодно.
Вариант 12
1. По введенной дате определить век. Проверить, чтобы год относился или к 20 или к 21 веку.
2. Ввести пол и возраст взрослого человека и вывести работающий человек или пенсионер.
Ветвления. Сложные условия
Сложные условия состоят из нескольких простых условий, соединенных логическими операциями. Существуют следующие логические операции: not
Операция отрицания
And
Логическое «и»
Or
Логическое «или»
Если два условия соединены логическим «и» (and), то условие выполняется если оба условия выполняются одновременно.
Пример: a>6 and a<20 – условие выполняется если a находится в интервале от 6 до 20 (например a = 10).
Если условия соединены логическим «или» (or), то условие выполняется, если выполняется хотя бы одно условие.
Пример: x<0 or b>10 – если х отрицательный, то независимо от того, чему равен b, условие выполняется.
Логические операции, как и арифметические имеют приоритет. Высший приоритет у операции not, следующий приоритет имеет операция and и самый низкий приоритет у операции or.
Использование сложных условий повышает наглядность операции и сокращает количество операторов If.
Задание 4
Создать функцию СЕЗОН, которая по дате выводит название сезона.
Набрать и отладить код функции.
45
Задание 5
Создать функцию A:
Если X или У отрицательные вычислить A по формуле
A=X * Y,
Иначе
1, если X>Y
A= 0, если X=Y
`
— 1, если X
Представим код данной функции:
Если программа вывела результат, это еще не значит, что она работает правильно. Для проверки необходимо протестировать программа, задавая значения X и Y, чтобы они попали на каждую ветку нашей развилки и вычислить значения A для этих Xи Y.
X
Y
A
-2 4
-6 3
4
-1 5
5 0
6 3
1