Лабораторная работа №8 _применение функций

advertisement
Лабораторная работа № 8.
1. Применение функций в работе с Exel
Разработаем функцию, предназначенную для решения такой задачи.
Пусть заданы величина h и числовой массив M, элементы которого
находятся в ячейках таблицы Excel.
Требуется определить, сколько элементов массива М больше h.
Функция должна
превосходящих h.
возвращать
количество
элементов
массива,
Активизируем новую книгу, а затем откроем окно VB. Вставим модуль
в личную книгу макросов. В окно кода введем следующий текст
пользовательской функции:
В четвертой строке фигурирует функция TypeName, возвращающая (в
виде строки) тип аргумента. С помощью этой функции проверяется тип
переменной М.
При безошибочном использовании функции Func8 переменная М имеет
тип Range (Диапазон).
В пятой и шестой строках значения М.Rows.Count и М.Columns.Count
равны числу строк и столбцов в диапазоне М.
В седьмой строке выражение M(i, j) означает ссылку на соответствующую ячейку диапазона М.
Пользовательская функция Func8 используется следующим образом.
1. Вводим числа, например, в ячейки D5:E8 листа Лист4.
2.
этого:
Присваиваем этому диапазону ячеек, например, имя Test8; для
• выделяем диапазон и щелкаем на нем правой кнопкой мышки;
• в открывшемся контекстном меню выполняем команду Имя
диапазона;
• в открывшемся окне Создание имени в текстовое поле Имя вводим
Test8, в текстовое поле Область вводим Лист4 с помощью скрытого
списка и щелкаем на кнопке ОК.
3. Вводим, например, в ячейку Е11 формулу = Func8(Test8;2)
В обращении к функции Excel аргументы отделяются друг от друга
символом «точка с запятой», а не запятой, как это принято в Visual Basic.
Либо можно воспользоваться мастером функций: для этого нажмите на
кнопку Вставить функцию
Определенные пользователем функцию Func8.
В открывшемся диалоговом окне
Щелкнуть по кнопке ОК.
и выберите из категории
заполните поля аргументов.
В результате в ячейке E11 появится результат - количество чисел в
ячейках D5:E8, превосходящих 2.
2. Автоматическое разбиение одного столбца с данными на несколько
Итак, имеем столбец с данными, которые надо разделить на несколько
отдельных столбцов. Самые распространенные жизненные примеры:
• ФИО в одном столбце (а надо в трех отдельных, чтобы сортировать
по имени)
• полное описание товара в одном столбце (а надо отдельный столбец
под фирму-изготовителя, отдельный - под модель и т.д.).
Способ 1. Без программирования
Выделите ячейки, которые будем делить и выберите в меню Данные Текст по столбцам (Data - Text to columns). Появится окно Мастера
текстов:
На первом шаге Мастера выбираем формат нашего текста. Или это
текст, в котором какой-либо символ отделяет друг от друга содержимое
наших будущих отдельных столбцов (с разделителями) или в тексте с
помощью пробелов имитируются столбцы одинаковой ширины
(фиксированная ширина).
На втором шаге Мастера, если мы выбрали формат с разделителями
(как в нашем примере) - необходимо указать какой именно символ является
разделителем:
И, наконец, на третьем шаге для каждого из получившихся столбцов,
выделяя их предварительно в окне Мастера, необходимо выбрать формат:
• общий - оставит данные как есть - подходит в большинстве случаев
• дата - необходимо выбирать для столбцов с датами, причем формат
даты (день-месяц-год, месяц-день-год и т.д.) уточняется в
выпадающем списке
• текстовый - для чисто текстовой информации:
Осталось нажать кнопку Готово, утвердительно ответить на вопрос о
замене конечных ячеек, который выдаст Excel и насладиться результатом:
Способ 2. С программированием
Идея подсмотрена на сайте John Walkenbach.
Напишем простую пользовательскую функцию ExtractElement, которая
будет в общем случае делить любую строку по любому указанному
разделителю.
Выберите в меню Сервис - Макрос - Редактор Visual Basic (Tools Macro - Visual Basic Editor).
В открывшемся окне редактора выберите в меню Insert - Module и в
появившийся пустой модуль скопируйте и вставьте следующие строки:
Закройте редактор и вернитесь в Excel командой File - Close and return to
Microsoft Excel.
Теперь в любой ячейке листа Вы можете использовать эту функцию
через меню Вставка - Функция - категория Определенные пользователем,
где в аргументах:
• Txt - ячейка с текстом, который надо разделить,
• n - порядковый номер извлекаемого элемента,
• Separator - символ-разделитель.
3. Быстрое склеивание текста из нескольких ячеек
Способ 1 (простой). Функция СЦЕПИТЬ
В категории Текстовые есть функция СЦЕПИТЬ (CONCATENATE),
которая соединяет содержимое нескольких ячеек (до 255) в одно целое,
позволяя комбинировать их с произвольным текстом. Например, вот такой
вариант применения этой функции даст надпись, которую я все свое детство
видел на заборе около дома:
Способ 2 (красивый). Символ для склеивания текста (&)
Для суммирования содержимого нескольких ячеек используют знак
плюс "+", а для склеивания содержимого ячеек используют знак "&"
(расположен на большинстве клавиатур
использовании небходимо помнить, что:
на
цифре
"7").
При
его
• Этот символ надо ставить в каждой точке соединения, т.е. на
всех "стыках" текстовых строк также, как вы ставите
несколько плюсов при сложении нескольких чисел
(2+8+6+4+8)
• Если нужно приклеить произвольный текст (даже если это
всего лишь точка или пробел, не говоря уж о целом слове), то
этот текст надо заключать в кавычки. В предыдущем примере
с функцией СЦЕПИТЬ о кавычках заботится сам Excel - в этом
же случае их надо ставить вручную.
Вот, например, как можно собрать ФИО в одну ячейку из трех с
добавлением пробелов:
Если сочетать это с функцией извлечения из текста первых букв ЛЕВСИМВ (LEFT), то можно получить фамилию с инициалами одной
формулой:
Способ 3 (VBA). Макрос для объединения ячеек без потери текста.
Имеем текст в нескольких ячейках и желание - объединить эти ячейки в
одну, слив туда же их текст. Проблема в одном - кнопка "Объединить и
поместить в центре" на панели инструментов "Форматирование" в Excel
объединять-то ячейки умеет, а вот с текстом сложность - в живых остается
только текст из верхней левой ячейки. Дети, поднимите руки, кто на это
нарывался? (Лес рук). Отлично! Теперь откроем редактор Visual Basic через
меню Сервис - Макрос - Редактор Visual Basic(Tools - Macro - Visual Basic
Editor), вставим в нашу книгу новый программный модуль (меню Insert Module) и скопируем туда текст такого простого макроса:
Теперь, если выделить несколько ячеек и запустить этот макрос в
меню Сервис - Макрос - Макросы (там же можно повесить его на сочетание
клавиш для скорости), то Excel объединит выделенные ячейки в одну, слив
туда же и текст.
Задание 1. Написать функцию реализующую данную задачу.
4. Случайная выборка из списка
Многим пользователям Excel приходится сталкиваться с такой задачей:
выбрать из массива данных (списка) случайным образом N элементов. Это
может быть связано с тем, что полный объем данных слишком велик,
поэтому мы удовлетворяемся анализом случайной выборки из полного
набора данных. Или же это может быть выбор, например, победителей из
числа участников какого-либо конкурса или лотереи. В любом случае перед
нами стоит задача отобрать случайным образом заданное количество
элементов из какого-либо набора (например, вот такого):
Способ 1. Случайная сортировка
Добавить к нашему списку еще один столбец и вставить в него
функцию генерации случайных чисел СЛЧИС (RAND). Затем отсортировать
наш список по добавленному столбцу (Данные - Сортировка) и взять N
первых элементов из получившейся таблицы:
Минусы такого способа очевидны - придется вручную каждый раз
пересортировывать список, если нам необходимо будет сделать другую
случайную выборку. В плюсах - простота и доступность.
Способ 2. Функция НАИМЕНЬШИЙ
Этот
способ
заключается
в
использовании
функции НАИМЕНЬШИЙ (SMALL) для выбора из списка N позиций с
наименьшим случайным числом в столбце А:
После выбора пяти (в нашем примере) наименьших случайных чисел из
столбца А, мы вытаскиваем имена, которые соответствуют этим числам с
помощью функцииВПР (VLOOKUP).
Способ 3. Функция Lotto на VBA
Можно создать простую функцию на VBA, которая будет выдавать
заданное количество случайных чисел из нужного интервала. Откроем
редактор Visual Basic (Сервис - Макрос - Редактор Visual Basic), вставим
новый модуль через меню Insert - Module и скопируем туда текст вот такой
функции:
У этой функции будет три аргумента:
• Bottom - нижняя граница интервала случайных чисел
• Top - верхняя граница интервала случайных чисел
• Amount - количество случайных чисел, которое мы хотим
отобрать из интервала
Т.е., например, чтобы отобрать 5 случайных чисел от 10 до 100, нужно
будет ввести =Lotto(10;100;5)
Теперь
эту
функцию
легко
использовать
для
отбора
случайных значений. Добавим к нашему списку столбец с нумерацией и
будем отбирать людей по случайным номерам, которые генерирует функция
Lotto:
Обратите внимание, что наша функция Lotto должна быть введена
как функция массива, т.е. сначала необходимо выделить диапазон ячеек
результатов (D2:D6) затем нажать кнопку fx или выбрать в меню Вставка Функция - категория Определенные пользователем - функция Lotto, и
после ввода аргументов функции нажать Ctrl+Shift+Enter, чтобы ввести эту
функцию именно как функцию массива во все выделенные ячейки.
Ну,
а
дальше
останется
при
помощи
уже
знакомой
функции ВПР (VLOOKUP) вытащить имена из списка, соответствующие
случайным номерам.
Задание 2. Написать построчный комментарий к листингу программы.
Download