Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Popov_A_A_Kurs_kompyuternoy_podgotovki_Excel.doc
Скачиваний:
0
Добавлен:
01.03.2025
Размер:
4.36 Mб
Скачать

4.15. Работа с массивами

Выше уже упоминался термин Массив и об­суждались некоторые связанные с ними вопросы. Сейчас мы рассмотрим один важный аспект при­менения функций, работающих с массивами, а именно, подведение сложных итогов. Обычно в таблицах требуется подсчитать сумму или количество элементов с некоторыми общими признаками. Использование функций СУММЕСЛИ() и СЧЁТЕСЛИ() ограничено возможностью анализа в них только одного единственного условия, которое можно внести в качестве аргумента. В виду этого, если нужно сделать сложную выборку, они нам, конечно, не помогут.

Функции, работающие с массивами, могут быть достаточно гибкими. Рассмотрим пока очень простой пример перехода к таким функциям, используя таблицу на рис. 4.15-1.

Положим, нам нужно найти число всех работающих женщин и их суммарную зарплату. Сначала применим уже известный нам подход без участия функций, использующих массивы

A

B

C

D

E

F

G

1

ФИО

Разряд

Отдел

Пол

Зарплата

Мин. зарп.

2

Ольга

3

Склад

ж

1500

100

3

Иван

2

Дирекция

м

600

4

Лена

3

Склад

ж

1800

5

Олег

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), куда в столбцы с В по AF вносится число отработанных сотрудниками часов в каждом из дней месяца (всего 31 день).

Наша задача – подсчитать число всех отработанных дней и часов; число дней и часов, отработанных в выходные дни; число сверхурочных часов отработанных всего и в выходные дни. Имея эти данные, затем легко вычислить зарплату (здесь не рассматриваем). Расчет всех дней и часов не вызывает проблем. Для первого рабочего это

AG2=СЧЁТ(B2:AF2), AH2=СУММ(B2:AF2).

Для подсчета числа рабочих дней, пришедшихся на субботу и воскресенье, нам понадобится более сложное выражение, использующее массив

AI2 {=СЧЁТ(ЕСЛИ((ДЕНЬНЕД(B$1:AF$1;2)>5)*(B2:AF2>0);1))}.

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ч

3

Иван

5

5

7

8

4

5

29ч

2

12ч

4

Олег

8

12

10

3

30ч

0

Рис. 4.15-2

Здесь подсчитывается число дней, для которых номер дня недели больше 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))}.

Видим, что в некоторых случаях формулы, использующие массивы, предоставляют возможности, недоступные для обычных формул. Преимущественная область их применения – формирование обобщающих сводок, которые могут быть довольно сложными.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]