ПРИМЕР 1. Операции над текстовыми строками.
Текстовые функции
Дайте первому рабочему листу имя "Строки". Познакомьтесь с функциями для работы со строками, которые приходится очень часто использовать при работе с данными, импортируемыми из текстовых баз данных. В программе Excel эти функции вызываются через «Мастер функций» из категории “Текстовые”.
ЗНАЧЕН(<текст>) – превращает текстовое отображение числа в числовое.
Пример: ЗНАЧЕН("1232,56")= 1232,56.
ТЕКСТ(<число>; <формат>) – преобразует <число> в текст, учитывая заданный <формат> представления.
Примеры: ТЕКСТ(2,715;"00,00")="02,72",
ТЕКСТ("25.3.98";"ДДДД")="Среда".
Число и формулу можно превратить в текстовую строку также следующим образом: нажать функциональную клавишу F2 (редактирование), поставить курсор в крайнюю левую позицию (клавиша Ноmе) и ввести одиночную кавычку (она расположена на клавише с буквой "Э"). Например, введите в Е1 число 12 (число выровнено по правому краю), превратите его в текстовую строку (число будет выровнено по левому краю).
ФИКСИРОВАННЫЙ(<число>[;<количество десятичных знаков>])
– функция округляет <число> до заданного количества знаков и преобразует результат в текстовую форму. Если второй аргумент опущен, он полагается равным двум.
Пример: ФИКСИРОВАННЫЙ(12345,678; 2)="12345,68",
ФИКСИРОВАННЫЙ(12345,678; -3)="12000".
ДЛСТР(<текст>)
– возвращает длину текстовой строки.
Пример: ДЛСТР("Клавиша Enter")=13.
СЖПРОБЕЛЫ(<текст>)
– функция удаляет из текстовой строки концевые пробелы и уменьшает число пробелов внутри строк (если есть) до одного.
Примеры: СЖПРОБЕЛЫ(" 1 Мая ")= "1 Мая",
СЖПРОБЕЛЫ(" Пере ")&"кресток"= "Перекресток".
СОВПАД(<текст1>;<текст2>) – проверяет совпадают ли два аргумента. Если да, результатом является ИСТИНА, иначе – ЛОЖЬ. Здесь подразумевается полное совпадение, включая содержание и длину. Прописные и строчные буквы считаются разными.
Примеры: СОВПАД("Саша";"Саша")=ИСТИНА,
СОВПАД("Саша";"саша")=ЛОЖЬ,
СОВПАД("Саша";"Саша ")=ЛОЖЬ.
НАЙТИ(<искомый текст»; <текст, где ведется поиск>[;<начальная позиция;»])
– возвращает номер позиции, где <искомый фрагмент> найден в просматриваемом тексте. Необязательный параметр <начальная позиция> задает номер в искомом фрагменте, с которого следует вести поиск. Если параметр <начальная позиция> опущен, он считается равным 1 (поиск ведется с первого символа).
Пример: НАЙТИ("Петропавловский";"павлов")=6.
поиск(<искомый текст>;<текст, где ведется поиск> [;<начальная позиция>])
– функция аналогична предыдущей, однако допускает включение в <искомый текст> символов шаблона (? обозначает один произвольный символ и * обозначает любое число произвольных символов). Применение шаблона удобно при поиске по неточно заданному ключу.
Например, вы хотите выяснить факт нахождения в клетке С12 фамилии, начинающейся на букву И с инициалами А.В. Функция
ПОИСК("И*А.В";С12)
вернет значение 1, если в анализируемой ячейке находится, например, текст Ивановский А.В. и значение ошибки #ЗНАЧ!, если поиск неуспешный.
ПРАВСИМВ(<текст>;<длина фрагмента>)
– функция извлекает с правой стороны <текста> фрагмент заданной <длины>.
Пример: ПРАВСИМВ("в нашем случае";6)= "случае".
ЛЕВСИМВ(<текст>;<длина фрагмента>) – функция извлекает с левой стороны <текста> фрагмент заданной <длины>.
Пример: ЛЕВСИМВ("в нашем случае";7)= "в нашем".
ПСТР(<текст>;<номер первого символа>;<длина фрагмента>)
– функция извлекает из текстовой строки фрагмент, начиная с заданного <номера> указанной <длины>. Отсчет номера позиции ведется слева направо. Если <длина> оказалась больше, чем остаток текста, результатом явится вся оставшаяся часть текста.
Пример: ПСТР("в нашем случае";3;5)= "нашем".
СЦЕПИТЬ(<текст1>;<текст2>; ...)
– возвращает строку, образованную соединением всех перечисленных аргументов. Действие функции аналогично применению оператора &.
Пример: СЦЕПИТЬ("Саша ";"Петров")="Саша Петров".
СТРОЧН(<текст>) – преобразует буквы <текста> в строчные.
Пример: СТРОЧН("А. Петров")="а. петров".
ПРОПИСН(<текст>) – преобразует буквы <текста> в прописные.
Пример: ПРОПИСН("А. Петров")= "А. ПЕТРОВ".
Повторите нижеприведенные примеры и выполните упражнения и задачи.
ПРИМЕР 1. Операции над текстовыми строками.
1. Введите в ячейку А1 — "Иванов", в ячейку В1 — "Иван", в ячейку С1 — "Иванович" (кавычки не вводить!). В ячейке А2 нужно получить строку "Иванов Иван Иванович". Для этого введем в А2 формулу =А1&" "&В1&" "&C1.[1] Обратите внимание, что между строками, взятыми из ячеек, вставлены пробелы " ". Введите в ячейку В1 имя "Николай". Изменится и А2.
2. Превратите содержимое ячейки А2 из формулы в значение. Это можно сделать разными способами. Проще всего так: поместить курсор мыши на рамку ячейки А2 (он приобретает вид. стрелки), нажать правую кнопку мыши и, не отпуская ее, перетащить А2 в сторону и тут же вернуть на место, отпустить правую кнопку мыши (появится контекстное меню), выбрать пункт "Копировать только значения".
3. Отредактируйте содержимое ячейки А2, вставив по несколько дополнительных пробелов до, после и между словами. В ячейку A3 введите формулу =СЖПРОБЕЛЫ(А2). Несколько пробелов преобразуются в один, начальные и конечные пробелы исчезают. Этот прием может быть полезен при импортировании данных из какой-либо внешней базы данных. При этом часто приходится удалять лишние пробелы.
4. Требуется содержимое ячейки A3 разнести в три ячейки: отдельно фамилию, имя и отчество. Это довольно сложная задача, поэтому будем решать ее по частям, а затем соберем эти части в одну формулу.
Найдем номер позиции, соответствующий первому пробелу. В ячейку А4 внесем формулу =ПОИСК(" ",АЗ).[2] В нашем примере искомая подстрока — пробел " ", строка, где производится поиск, расположена в ячейке A3, третий аргумент не указан, поэтому поиск ведется с первой позиции. В ячейку В4 введем формулу =ПОИСК(" ",АЗ,А4+1), т.е. мы ищем в строке пробел не с первой позиции, а с позиции, следующей за первым пробелом. В ячейке С4 вычислим длину строки =ДЛСТР(А3). Должны получиться результаты: 7,15, 23.
Теперь для выделения подстрок воспользуемся функцией ПСТР(текст, нач_номер, число_литер) — из строки, начиная с заданной позиции, извлекается подстрока заданной длины. Поместим в А5, А6, А7 строки "Фамилия", "Имя", "Отчество". Запишем в 85 формулу =ПСТР(АЗ,1,А4-1), в В6 =ПСТР(АЗ,А4+1,В4-А4-1), в В7 =ПСТР(АЗ,В4+1,С4-В4).
Проанализируйте аргументы этих функций. Запишите в С5:С7 формулы с использованием вложенных функций (не привлекая промежуточных ячеек).
5. Подставим в ячейку А2 другую строку: "Новиков Геннадий Павлович". Наши формулы аккуратно извлекают фамилию, имя и отчество. А теперь введем: "Сейфетдинова Наиля". В четвертой строке получаем результат, показанный на рис. 1.
#ЗНАЧ! |
Рис.1
Функция ПОИСК не нашла второго пробела. Как предусмотреть такой случай? Для этого воспользуемся функцией ЕОШ (Если ОШибка), которая возвращает значение ИСТИНА, если ее аргумент — адрес ячейки, в которой содержится ошибочное значение. Запишем в В6 формулу
=ЕСЛИ(ЕОШ(В4),ПСТР(АЗ,А4+1,С4-А4), ПСТР(АЗ, А4+1.В4-А4-1)).
а вВ7 запишем формулу
=ЕСЛИ(ЕОШ(В4),"",ПСТР(АЗ,В4+1,С4-В4)).
Формула в В6 имеет слишком громоздкий вид. Ее читабельность можно увеличить, если расположить ее на нескольких строках.
=ЕСЛИ(ЕОШ(В4),
ПСТР(АЗ.А4+1,С4-А4), ПСТР(АЗ.А4+1, В4-А4-1)).
Чтобы получить такой вид формулы в окне ввода, введите Alt+Enter в точках формулы, где должен быть переход на следующую строку (Enter нажимать нельзя — это завершение ввода). В начале второй и третьей строк введите серию пробелов, которые обеспечат выравнивание частей формулы.
6. Задания в пунктах 4 и 5 можно выполнить, не применяя формул, а воспользовавшись средствами, предоставляемыми Excel. Поместите в ячейку А10 строку "Иванов Иван Иванович". Выберите пункт меню "Данные/ Текст по столбцам". Начнет работу Мастер текстов. На первом шаге укажите, что текст "с разделителями", на втором шаге укажите, что разделителем является пробел. Третий шаг можно не выполнять и сразу нажать "Готово". В результате текст будет разбит на три ячейки А10, В10, С10.
ЗАДАЧА 1.
В А10, В10, С10 помещены текстовые строки "Иванов", "Иван", "Иванович". Требуется разместить в D10 формулу, которая выдаст результат "Иванов И.И.". (Вместо функции ПСТР здесь проще воспользоваться функцией ЛЕВСИМВ.)
ЗАДАЧА 2.
Скорректировать формулу для предыдущей задачи, чтобы формула правильно работала для исходных данных:
в ячейке А10 — "Сейфетдинова", в В10 — "Наиля", в С10— пусто. (Воспользуйтесь функцией ЕПУСТО.)
ЗАДАЧА 3.
В столбце А расположено несколько инвентарных номеров (рис. 2).
255-377-421 |
34-442-37 |
7583-81-344 |
Рис.2
В столбец В поместить цифры, размещенные после второго дефиса. Сделать это двумя способами:
1) с использованием функций работы с текстовыми строками;
2) с использованием пункта меню "Данные/ Текст по столбцам".
ЗАДАЧА 4.
В столбце размещены фамилии, в которых беспорядочно смешаны строчные и прописные буквы, например, "иВанОв". С помощью какой функции можно придать фамилиям нормальный вид: "Иванов"?
Упражнение 1. По Справке изучите различия между функциями ПОИСК и НАЙТИ. Придумайте примеры, на которых проявляются эти различия.
Функции ПОИСК и НАЙТИ отыскивают позицию первого вхождения заданной подстроки в строку. Если точно известно количество вхождений подстроки, можно найти позицию и второго, и третьего вхождения, как это сделано в примере. К сожалению, среди функций Excel отсутствует функция, которая подсчитывает количество вхождений подстроки в строку. Но такую функцию можно написать на языке VBA.
ЗАДАЧА 5.
Ранее Вы решали задачу о вычислении суммы цифр трехзначного целого числа. Еще раз решите эту задачу, но с использованием текстовых функций. (Формула должна подсчитывать сумму цифр также для двузначных и однозначных чисел.)
Указание. Воспользуйтесь функцией ТЕКСТ для преобразования числа в строку.
Пример 2.
Что произойдет, если воспользоваться операцией конкатенации (сцепки) строк для чисел? Введите в ячейку F3 число 12, в ячейку G3 число 14, а в ячейку G4 формулу = F3 & G3. Эта формула вернет текстовое значение 1214. Попытаемся превратить его в число с помощью функции Ч(значение): в G5 поместите формулу =Ч(G4). Она вернет 0. Неудача! Как же преобразовать содержимое ячейки G4 к числу? Здесь поможет следующий трюк: введите в ячейку G6 формулу =G4*1. Эта формула вернет число 1214. Чтобы выполнить умножение. Excel пытается преобразовать результат в ячейке G4 в число; это ему удается.
Этот прием полезно запомнить. Пусть в диапазоне F8:F10 записаны текстовые строки; '10, '12 и '15, Как быстро преобразоватьих в числа? Введите в ячейку G8 число 1; выполните над этой ячейкой команду "Копировать" (Ctrl+C); выделите блок F8:F10; в контекстном меню выберите "Специальная вставка"; в диалоговом окне установите переключатель "умножить", нажмите "ОК", нажмите Esc.
Перейдите на новый рабочий лист.
Пример 3.
Данные в столбце А (начиная с ячейки А1) имеют вид:
АБВГД
ZBNWQ
Том
(текст предваряется числом, состоящим из одной, двух или трех цифр). Поместить эти строки в столбец В, отбросив начальные цифры и убрав лишние пробелы.
Решение. В ячейку В1 введите формулу
=ЕСЛИ(ЕЧИСЛО(ПСТР(А1,1,3)*1),
СЖПРОБЕЛЫ(ПРАВСИМВ(А1 ,ДЛСТР(А1) -3)),
ЕСЛИ(ЕЧИСЛО(ПСТР(А1,1,2)*1),
СЖПРОБЕЛЫ(ПРАВСИМВ(А1 ,ДЛСТР(А1) -2)),
СЖПРОБЕЛЫ(ПРАВСИМВ(А1 ,ДЛСТР(А1) -1))))
Тщательно разберите эту формулу. Если назначение какой-либо из функций Вам непонятно, обратитесь к Справке. Обратите внимание, что эту задачу невозможно решить с использованием Мастера текстов, так как у данных в строках нет фиксированной ширины и нет разделителей, о
ЗАДАЧА 6.
Пусть в ячейке содержится возраст человека в годах (целое число — количество полных лет). В соседней ячейке выводить текстовую строку: возраст с указанием "год", "года", "лет" (например, "42 года"; заметьте, что в возрасте от 11 до 14 нужно добавлять "лет"),
Упражнение 2. Самостоятельно изучите по Справке функцию СОВПАД. Предложите примеры ее использования.
ЗАДАЧА 7.
В ячейках блока А2:А10 содержатся строки цифр, разделенные запятыми (например, в А2 строка "1,2,4", в A3 строка" 1,3,6" и т.д.). В В1 пользователь вводит цифру, допустим 2. Поместить в В2:В10 формулы, которые возвращают строки "есть" или "нет" в зависимости от того, имеется ли в строке из соответствующей ячейки столбца А цифра из В1 или нет (в В2 будет выведено "есть", а в В3 — "нет"). В В11 сосчитать количество ячеек блока А2:А10, содержащих искомую цифру.
[1] & (амперсенд) — символ операции склейки (конкатенации) строк.
[2] Прочитайте описание этой функции в Справке.