- •4. Функции рабочего листа
- •4.1. Функция суммирования
- •4.2. Арифметические функции
- •4.3. Функции округления
- •4.4. Степенные функции
- •4.5. Тригонометрические функции
- •4.6. Текстовые функции
- •4.7. Логические функции
- •4.8. Функции выбора и поиска
- •Условие 1
- •4.9. Сводные функции
- •4.10. Функции обработки дат
- •4.11. Финансовые функции
- •4.12. Информационные функции
- •4.13. Ошибочные значения
- •4.14. Функции анализа ошибок
- •4.15. Работа с массивами
- •4.16. Матричные функции
- •То можно обеспечить правильное сложение данных и при вставках новых строк в любом месте диапазона суммирования. Или конкретно для нашего случая
- •4.17. Функция преобразования мер
- •4.18. Примеры “из жизни”
- •4.19. Задачи для
4.15. Работа с массивами
Выше уже упоминался термин Массив и обсуждались некоторые связанные с ними вопросы. Сейчас мы рассмотрим один важный аспект применения функций, работающих с массивами, а именно, подведение сложных итогов. Обычно в таблицах требуется подсчитать сумму или количество элементов с некоторыми общими признаками. Использование функций СУММЕСЛИ() и СЧЁТЕСЛИ() ограничено возможностью анализа в них только одного единственного условия, которое можно внести в качестве аргумента. В виду этого, если нужно сделать сложную выборку, они нам, конечно, не помогут.
|
|
A |
B |
C |
D |
E |
F |
G |
|
1 |
ФИО |
Разряд |
Отдел |
Пол |
Зарплата |
|
Мин. зарп. |
|
2 |
Ольга |
3 |
Склад |
ж |
1500 |
|
100 |
|
3 |
Иван |
2 |
Дирекция |
м |
600 |
|
|
|
4 |
Лена |
3 |
Склад |
ж |
1800 |
|
|
|
Рис.
4.15-1
|
Олег |
2 |
Канцелярия |
м |
2000 |
|
|
|
6 |
Света |
4 |
Дирекция |
ж |
8000 |
|
|
Функции, работающие с массивами, могут быть достаточно гибкими. Рассмотрим пока очень простой пример перехода к таким функциям, используя таблицу на рис. 4.15-1.
Положим, нам нужно найти число всех работающих женщин и их суммарную зарплату. Сначала применим уже известный нам подход без участия функций, использующих массивы
=СЧЁТЕСЛИ(D2:D6;"ж") и =СУММЕСЛИ(D2:D6;"ж";E2:E6).
Для этих задач они работают, однако таким образом мы не можем построить более сложный запрос, найти, например, зарплату всех работников, получающих от … и до … и т.п. Если прибегнуть к массивам, можно применять функции СЧЁТ(), МАКС(), СУММ() и другие “итоговые” функции, включив в них необходимые условия отбора. Так, подсчет женщин может быть выполнен следующим образом
{=СЧЁТ(ЕСЛИ(D2:D6="ж";1))} и {=СУММ(ЕСЛИ(D2:D6="ж";1))}.
Здесь все клетки, содержащие в анализируемом диапазоне D2:D5 букву “ж”, будут участвовать в подсчете и в суммировании как единицы.
Общая зарплата всех женщин рассчитывается так
{=СУММ(ЕСЛИ(D2:D6="ж";E2:E6))}.
Напоминаем, что ввод функций, работающих с массивами, должен завершаться нажатием клавиш Shift+Ctrl+Enter, после чего выражение автоматически обрамляется фигурными скобками.
Таким образом, если нужно вычислить количество некоторых элементов, в качестве аргумента функции ЕСЛИ() удобно использовать 1, если сумму – сами эти элементы, содержащие нужные данные. Хотя в функциях, работающих с массивами, нельзя применять логические функции И(), ИЛИ(), НЕ(), зато можно использовать вложенные функции ЕСЛИ().
Разобранные выше примеры использовались нами только как иллюстрация перехода к применению массивов и никаких новых возможностей для этих конкретных задач не внесли. Теперь мы рассмотрим несколько примеров, для решения которых действительно необходимы функции обработки массивов.
Примеры.
1. Вычислить число женщин, зарабатывающих более 1000 руб.,
{=СУММ(ЕСЛИ(E2:E6>1000; ЕСЛИ(D2:D6="ж";1)))}
или {=СЧЁТ(ЕСЛИ(E2:E6>1000; ЕСЛИ(D2:D6="ж";1)))},
и их суммарный заработок
{=СУММ(ЕСЛИ(E2:E6>1000; ЕСЛИ(D2:D6="ж";E2:E6)))}.
В этих выражениях в косвенной форме реализована функция И. Формулы можно упростить, используя вместо двух только одну функцию ЕСЛИ, где в качестве аргумента взято произведение результатов анализа условий.
{=СУММ(ЕСЛИ((E2:E6>1000)*(D2:D6="ж");1))}
{=СЧЁТ(ЕСЛИ((E2:E6>1000)*(D2:D6="ж");1))}
{=СУММ(ЕСЛИ((E2:E6>1000)*(D2:D6="ж");E2:E6))}.
Поскольку логическое значение ИСТИНА интерпретируется Excel как единица, то для ячеек в диапазоне Е2:Е6, удовлетворяющих условию >1000, будет получена 1. Аналогично для диапазона D2:D6=”ж”. Таким образом, если оба условия истинны, аргументом функции ЕСЛИ будет произведение 1*1=1. Это значение результата будет расценено как истинное, и суммирование (СУММ) или подсчёт (СЧЁТ) будут выполнены. Таким образом, операция умножения здесь полностью аналогична логической функции И.
2. Вычислить число женщин, имеющих третий разряд,
{=СУММ(ЕСЛИ((B2:B6=3)*(D2:D6="ж");1))}.
3. Вычислить число работников, получающих от 1000 до 2000 руб., и их суммарный заработок
{=СУММ(ЕСЛИ((E2:E6>1000)*(E2:E6<=2000);1))}
{=СУММ(ЕСЛИ((E2:E6>1000)*(E2:E6<=2000);E2:E6))}.
4. Найти число женщин, работающих на складе, и их заработок
{=СУММ(ЕСЛИ((C2:C6="Склад")*(D2:D6="ж");1))}
{=СУММ(ЕСЛИ((C2:C6="Склад")*(D2:D6="ж");E2:E6))}.
5. Определить число людей, работающих на складе и в дирекции,
{=СУММ(ЕСЛИ(C2:C6="Склад";1))+СУММ(ЕСЛИ(C2:C6="Дирекция";1))}.
Здесь отдельно подсчитывается, а затем суммируется, число работников склада и дирекции. Можно упростить выражение, включив оба условия в одно ЕСЛИ, соединив их знаком сложения, который в данном случае эквивалентен логической функции ИЛИ.
{=СУММ(ЕСЛИ((C2:C6="Склад")+(C2:C6="Дирекция");1))}.
Впрочем, эту задачу можно решить и не прибегая к массивам
=СЧЁТЕСЛИ(C2:C6;"Склад")+СЧЁТЕСЛИ(C2:C6;"Дирекция").
6. Определить число женщин, работающих на складе и в дирекции
{=СУММ(ЕСЛИ((D2:D6="ж")*((C2:C6="Склад")+(C2:C6="Дирекция"));1))}.
Здесь фактически реализовано выражение вида
{=СУММ(ЕСЛИ(пол="ж" И (отдел="Склад" ИЛИ отдел="Дирекция");1))}.
7. Найти число работников, получающих зарплату в размере менее пяти минимальных зарплат (клетка G2),
{=СУММ(ЕСЛИ(E2:E6<5*G2;1)).
8. Определить число работников, получающих зарплату меньше средней по предприятию,
{=СУММ(ЕСЛИ(E2:E6<СРЗНАЧ(E2:E6);1))}.
9. Найти число наиболее высокооплачиваемых (входящих в верхние 10% по размеру зарплаты, начиная от 0 руб.) сотрудников
{=СУММ(ЕСЛИ(E2:E6>МАКС(E2:E6)*(1-10%);1))}.
10. Найти максимальную зарплату, получаемую женщинами, работающими в дирекции
{=МАКС(ЕСЛИ((C2:C6="Дирекция")*(D2:D6="ж");E2:E6))}.
11. Найти наибольший разряд, среди женщин, работающих в дирекции
{=МАКС(ЕСЛИ((C2:C6="Дирекция")*(D2:D6="ж");B2:B6))}.
Р
ешите
следующие задачи самостоятельно.
12. Определить суммарную зарплату всех сотрудников, кроме лиц, работающих в дирекции и канцелярии. Найти число таких работников. Вычислить их среднюю зарплату. Найти максимальную зарплату сотрудников, работающих в указанных подразделениях.
Мастер выборочного суммирования. Формирование сложных итогов может облегчить Мастер суммирования, который доступен через меню Сервис+Мастер+Частичная сумма (конечно, если он был ранее инсталлирован, через меню Сервис+Надстройки+Мастер суммирования). С его помощью можно за четыре шага сформировать нужное выражение.

Рис. 4.15-2а
Рассмотрим использование инструмента на примере. Пусть требуется найти суммарный заработок всех женщин, зарплата которых находится в диапазоне от 1000 до 2000 рублей. Данные берутся из рис. 4.15-1. На первом экране мастера (рис. 4.15-1а) пользователь должен указать координаты таблицы, включая и заголовки колонок (блок A1:E6). Второй шаг самый главный. Здесь пользователь указывает суммируемое поле (у нас Зарплата) и последовательно задает условия суммирования (Пол=ж, Зарплата>1000, Зарплата<=2000), используя кнопку Добавить условие . На третьем шаге следует выбрать один из двух способов отображения результата. Это может быть: а). отдельная клетка, куда помещается сгенерированная мастером формула, б). группа клетки, куда последовательно помещаются значения условий, а затем и формула (такое представление может оказаться удобным, если вы захотите позже варьировать параметры условия не прибегая к редактированию формул).
Мы выберем пункт а). В этом случае следующий и последний экран запрашивает адрес вывода результата. Это может быть любая свободная клетка (укажем А9).

Рис. 4.15-2б
По завершении перечисленных действий мы получим в ней следующую формулу массива
A9 {=СУММ(ЕСЛИ($E$2:$E$6>1000;
ЕСЛИ($E$2:$E$6<=2000;ЕСЛИ($D$2:$D$6="ж";$E$2:$E$6;0);0);0))}.

Рис. 4.15-2в
К сожалению, мастер суммирования формирует только суммы, не работает со строками и сами формулы не могут быть сложными. Правда полученную формулу далее легко можно редактировать руками, например, если изменить функцию СУММ на СЧЁТ и удалить лишние аргументы, можно получить уже не сумму, а количество
A9 {=СЧЁТ(ЕСЛИ($E$2:$E$6>1000;
ЕСЛИ($E$2:$E$6<=2000;
ЕСЛИ($D$2:$D$6="ж";$E$2:$E$6))))}.

Рис. 4.15-2г
Внутри выражений, использующих массивы, могут включаться и функции Excel.
Рассмотрим пример “из жизни”. Пусть для последующего расчета зарплаты на производстве заполняется табельная ведомость (рис. 4.15-3), куда в столбцы с В по AF вносится число отработанных сотрудниками часов в каждом из дней месяца (всего 31 день).
Наша задача – подсчитать число всех отработанных дней и часов; число дней и часов, отработанных в выходные дни; число сверхурочных часов отработанных всего и в выходные дни. Имея эти данные, затем легко вычислить зарплату (здесь не рассматриваем). Расчет всех дней и часов не вызывает проблем. Для первого рабочего это
AG2=СЧЁТ(B2:AF2), AH2=СУММ(B2:AF2).
|
|
A |
B |
C |
D |
E |
F |
G |
H |
I |
|
AG |
AH |
AI |
AJ |
AK |
AL |
|
1 |
Дата |
01.авг.Вс |
02.авг.Пн |
03.авг.Вт |
04.авг.Ср |
05.авг.Чт |
06.авг.Пт |
07.авг.Сб |
08.авг.Вс |
. . . . |
Всего дней |
Всего часов |
Дней в выходные |
Часов в выходные |
Всего сверхурочных |
Сверхурочных в выходные |
|
2 |
Петр |
10 |
|
14 |
|
|
|
12 |
|
|
3 |
36ч |
2 |
22ч |
12ч |
6ч |
|
3 |
Иван |
|
5 |
|
5 |
|
7 |
8 |
4 |
|
5 |
29ч |
2 |
12ч |
0ч |
0ч |
|
4 |
Олег |
|
8 |
12 |
|
10 |
|
|
|
|
3 |
30ч |
0 |
0ч |
6ч |
0ч |
Рис. 4.15-3
Для подсчета числа рабочих дней, пришедшихся на субботу и воскресение, нам понадобится более сложное выражение, использующее массив
AI2 {=СЧЁТ(ЕСЛИ((ДЕНЬНЕД(B$1:AF$1;2)>5)*(B2:AF2>0);1))}.
Здесь подсчитывается число дней, для которых номер дня недели больше 5 (т.е. субботы и воскресения) и в которых было отработано какое-то (>0) число часов. Более просто находится количество часов в эти дни, поскольку второе условие здесь не нужно
AJ2 {=СУММ(ЕСЛИ(ДЕНЬНЕД(B$1:AF$1;2)>5;B2:AF2))}.
Полное число сверхурочных (рабочих часов свыше восьмого) подсчитывается только для дней, где количество часов больше 8, как сумма разности между длиной рабочего дня и числом восемь
AK2 {=СУММ(ЕСЛИ(B2:AF2>8;B2:AF2-8))}.
Аналогично рассчитываются сверхурочные для выходных
AL2 {=СУММ(ЕСЛИ((ДЕНЬНЕД(B$1:AF$1;2)>5)*(B2:AF2>8);B2:AF2-8))}.
Видим, что в некоторых случаях формулы, использующие массивы, предоставляют возможности, недоступные для обычных формул. Преимущественная область их применения – формирование обобщающих сводок, которые могут быть довольно сложными.
