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

"Остаток:"???"дн"; [красный]"доплата"???"дн"; [синий]"съезд"

позволяющий предъявить данные в удобной форме. Для лиц, у которых сегодня закончился оплаченный срок, выводится слово СЪЕЗД синего цвета. Для тех, у кого имеется задолженность, выводится слово доплата и число дней, за которые нужно доплатить, красного цвета. В нормальном случае выводится число оставшихся оплаченных дней проживания.

В

Рис. 5.31а

столбце Доплата: сумма для должников предъявляется сумма, которую им необходимо внести к погашению долга H5=ABS(ЕСЛИ(G5<0;G5*C5;0)).

Пример 5.31. Нерегулярные таблицы. Обычно, пользовательские таблицы, обрабатываемые в Excel, имеют регулярную структуру, где все строки и столбцы содержат одинаковое число элементов. На практике, однако, это наблюдается (см. рис. 5.31а) не всегда. Рассмотрим пример с такой нерегулярной структурой. Пусть (рис 5.31б) требуется подсчитать общее число рабочих дней и часов сотрудников организации. При этом все они могут иметь разное количество рабочих дней и часов в месяце/квартале/году.

Здесь можно поступить традиционным образом – оставить 365 колонок (по одной для каждого дня), а суммы получать в 366 столбце. При такой структуре собственно данные и итоговый столбец оказываются разнесенными на столь большое расстояние, что от пользователя потребуется постоянное утомительное перемещение по таблице, не говоря уже о том, что в рабочем листе всего-то 256 столбцов.

Если “итоговые” функции, которые мы желаем реализовать, несложны, мы можем построить их другим способом. Для Петра, например, число отработанных дней вычисляется в ячейке С2, а часов – в С3. Каждая рабочая смена в таблице зафиксирована датой и числом отработанных часов. Поскольку итоговые клетки (столбец С) находятся слева от заранее неизвестного и изменяющегося числа суммируемых клеток, требуется как-то определить, сколько же столбцов следует обработать. Для выяснения этого обстоятельства здесь создана техническая колонка В (Столбцов), содержащая следующее выражение для Петра B2=ПОИСКПОЗ(999999;D2:VI2;1).

A

B

C

D

E

F

G

H

I

1

Имя

Столбцов

В сего

2

Петр

4

1.Май

6.Май

3

14ч

4

Иван

6

2.Май

7.Май

12ч

10.Май

5

25ч

6

Олег

2

4.Апр

20ч

7

20ч

8

Всего

9

59ч

Рис. 5.

31б

Здесь функция ПОИСК() пытается найти заведомо слишком большое (999999) для нашей задачи число во второй строке. Поскольку известно, что никакая возможная дата, ни тем более число рабочих часов не могут его превышать, результатом будет номер последней непустой числовой клетки в этой строке, начиная от начальной D2. Отсюда мы легко найдем количество отработанных дней как число клеток, деленное на два, поскольку для каждого рабочего дня заполняются две клетки C2=ОТБР(B2/2).

Функция отбрасывания понадобилась для того, чтобы получить правильный результат, если дата была введена, а число часов – еще нет. Сложнее сформировать сумму часов. В качестве критерия суммирования положим, что значение слагаемого не должно превышать самой длинной рабочей смены, например 24 часов. Таким образом, не будут просуммированы значения дат. Современные возможные даты это числа больше 36000 (так 1.1.99г= 36161). Сама область суммирования (для Петра) ограничена столбцом D и столбцом, найденным с помощью функции ИНДЕКС() со вторым аргументом, взятым из колонки В,

C3 {=СУММ(ЕСЛИ(D2:ИНДЕКС(D2:VI2;;B2)<24;D2:ИНДЕКС(D2:VI2;;B2);0))}.

Кроме вычислений для отдельного человека, в таблице формируются и вертикальные суммы. Число дней, отработанных всеми сотрудниками, находится во всех четных строках столбца С. Чтобы гарантировать суммирование именно этих значений, в функцию СУММ() включены только те строки, номера которых без остатка делятся на два (т.е. четные строки)

C8 {=СУММ(ЕСЛИ(ОСТАТ(СТРОКА(C2:C7);2)=0;C2:C7;0))}.

Аналогично сумма часов находится в нечетных строках

C9 {=СУММ(ЕСЛИ(ОСТАТ(СТРОКА(C2:C7);2)=1;C2:C7;0))}.

Все функции в столбце С вводятся как функции массива, т.е. ввод завершается нажатием клавиш Ctrl+Shift+Enter, о чем свидетельствуют фигурные скобки. Техническая колонка В создана нами только для наглядности. В дальнейшем колонку можно скрыть или включить ее содержимое в С2 и С3.

Следует отметить, что в данном конкретном примере можно обойтись и гораздо более простыми средствами для подсчета числа отработанных дней и часов по вертикали:

C8=СУММЕСЛИ(C2:C7;”>0”) – сумма всех часов

С9 {=СУММ(ЕСЛИ(C2:C7<1;D2:D7;0))} – число всех дней

и по горизонтали:

C3=СУММЕСЛИ(D2:IV2;”<24”) – сумма часов работника

C2=СЧЁТЕСЛИ(D2:IV2;”>=30000”) – число дней работника,

поскольку здесь нам не нужно знать, какая именно клетка для каждого из рабочих была заполнена последней. Критерием вертикального суммирования часов явилось наличие в столбце В числа больше нуля, а количества дней – числа меньше 1. В горизонтальную сумму часов включались только числа, меньше 24, а в подсчет дней – числа больше 30000.

 Следующие два примера посвящены более сложным, чем ранее, расчетам, связанным с определением временных интервалов. В виду этого рассмотрим несколько технических моментов. Вспомним, что дата в Excel – это целое число, отображенное в формате даты (1 единица = 1 день), время – дробное число в формате времени (один час =1/24= 0,041666667). Таким образом, в одной клетке может сразу отображаться и дата и время (дата_время). Например, число 36069,3958333333 соответствует 01.10.1998 9:30 (1 октября 1998г. 9 часов 30 минут). При расчетах нам может понадобиться извлечь из такой комбинированной даты_времени только дату или только время, иными словами отделить целую или дробную части числа. Дату можно отделить функцией ЦЕЛОЕ():

дата=ЦЕЛОЕ(дата_время).

Время может быть получено с помощью выражения:

время=дата_время – ЦЕЛОЕ(дата_время).

Однако проще использовать функцию вычисления остатка от деления на 1:

время=ОСТАТ(дата_время;1).

Например, если в А1 содержится значение 01.10.1998 9:30, то

ЦЕЛОЕ(А1) = 01.10.1998 0:00 и ОСТАТ(А1;1) = 9:30.

В дальнейших рассуждениях дату, содержащую и время, будем обозначать термином дата_время; дату, содержащую только число, месяц и год, – термином дата; дату, содержащую только время, – термином время.

Пример 5.32. Расчет временных интервалов. Пусть требуется рассчитать зарплату работников, несущих дежурство на производстве, в том числе, и в ночную смену. Предполагается, что график дежурств не определен жестко, а может быть установлен для каждого работника индивидуально и меняться со временем. В этих условиях важно быстро вычислить общее число отработанных часов и количество часов, пришедших на ночную смену. Предполагается также, что длина смены не может превышать одних суток (24 часа).

На предприятии установлено, что ночная смена начинается в 20 часов (клетка С2), а заканчивается в 8 часов следующего дня (клетка Е2). Начало и конец дежурства (НД и КД) для каждого работника вносятся в клетки В5 и С5 (для Петра) в формате, который включает как дату, так и время (день, месяц, год, часы и минуты – Д МММ чч:мм). Оплата труда за каждый час дежурства в дневное время определяется часовым тарифом (клетка Н2). В ночное время оплата производится по удвоенному тарифу плюс 30 руб. на оплату дороги домой (из дома).

Сначала вычислим общее рабочее время как разность конца и начала дежурства, умноженную на 24 (D5=(C5–B5)*24). Последнее необходимо для преобразования времени-дроби при дате в часы.

A

B

C

D

E

F

G

H

1

ГРАФИК ДЕЖУРСТВ сейчас:

2 ноя 03:24

2

НОЧЬ

начало:

20:00ч

конец:

8:00ч

Тариф:

15р/ч

3

Имя

Д е ж у р

с т в о

Всего

часов

Ночь

4

начало

конец

начало

конец

час.

5

Петр

1 ноя 06:00

1 ноя 12:00

6,0

1 06:00

1 08:00

2

150

6

Иван

1 ноя 09:30

2 ноя 09:00

23,5

1 20:00

2 08:00

12

563

7

Олег

3 ноя 12:00

4 ноя 01:00

13,0

3 20:00

4 08:00

5

3

Рис. 5.32

00

8

ВСЕГО

42,5

19

953

Теперь определим дату_время начала первой ночи, которая, возможно, приходится на дежурство. Если работа начинается в дневное время, начало ближайшей ночи (НН) попадет на 20 часов дня заступления на дежурство. Если НД приходится на ночное время, то это и будет начало ночи. Таким образом,

НН=ЕСЛИ(НД приходится на дневное время; дата НД+20:00; НД) или в адресах

E5=ЕСЛИ(И(B5>=ЦЕЛОЕ(B5)+E$2; B5<ЦЕЛОЕ(B5)+C$2);ЦЕЛОЕ(B5)+C$2;B5).

Поскольку здесь нужно соединить дату НД и время, установленное на предприятии как начало/конец ночной смены, в формуле используется функция ЦЕЛОЕ(), отбрасывающая дробную часть аргумента, содержащего время НД.

Время конца ночной смены – всегда 8 часов утра. Наша задача определить день КН. Он может быть как днем заступления на дежурство (ЦЕЛОЕ(E5)), так и следующим днем (ЦЕЛОЕ(E5)+1).

Если время НН меньше 8-и часов, то день остается без изменения, если нет – берется следующий день. Иными словами

КН=день НД + 8:00+ЕСЛИ(время НД<8:00; 0; 1)

или F5=ЦЕЛОЕ(E5)+E$2+ЕСЛИ(ОСТАТ(E5;1)<=E$2;0;1).

Функция ОСТАТ() отделяет дробную часть Е5 (т.е. часы и минуты) от полной даты_времени НД.

Теперь найдем время, отработанное в ночную смену. Если время КД менее НН (дежурство заканчивается до наступления ночи), работы в ночную смену не было. В противном случае находится разность между минимальным значением из КД, КН и максимальным из НД, НН и умножается на 24.

Часов ночной смены=ЕСЛИ(КД<НН; 0;МИН(КД;КН)–МАКС(НД;НН))*24

или G5=ЕСЛИ(C5<E5;0;МИН(C5;F5)–МАКС(B5;E5))*24.

Наконец, мы можем вычислить заработанную сумму.

Оплата=за дневную смену + за ночную смену+30, если была ночная смена

или H5=(D5–G5)*H$2+G5*2*H$2+ЕСЛИ(G5>0;30).

К оформлению. В завершении сделаем так, чтобы оператор, работающий на компьютере, мог легко видеть, кто в настоящее время дежурит. Это существенно, поскольку таблица может иметь большой размер и быстро найти в ней нужную строку не так просто. Для ориентирования во времени в клетку F1 введена функция =ТДАТА() предъявления текущей даты_времени. Значение в этой клетке непрерывно само не обновляется – новое время можно получить, нажав клавишу пересчета F9. Для реализации желаемого установим на клетки А5, А6, А7 условный формат

Условие 1  формула   =ЕСЛИ(И($G$1>B6;$G$1<=C6);1)  ,

при выполнении которого (текущее время находится между датой начала и датой конца дежурства) установим для данных шрифт полужирный курсив и отобразим их на желтом фоне. Для того, чтобы в любой текущий момент выявить работающих, нужно только нажать клавишу F9, обновляющую клетку, содержащую текущее время (сейчас дежурит Иван).

A

B

C

D

E

F

G

H

1

Стоимость дома

$200000

2

Вид скидки:

окна на

улицу

1 этаж

3

этаж

более 100м

3

% скидки:

5%

10%

5%

3%

4

ПРОДАЖА КВАРТИР

5

Квартира

Площадь

Этаж

Сторона

Оплата со

скидкой

Эквивал.

площадь

Цена

кварт.

Цена 1 м

6

1

70м

1

у

85%

59,5м

$ 34724

$496

7

2

160м

2

д

97%

155,2м

$ 90575

$566

8

3

60м

2

д

100%

60,0м

$ 35016

$584

9

4

80м

3

у

85%

68,0м

$ 39685

$496

10

ВСЕГО

370м

342,7м

$200000

Рис.

5.33

Пример 5.33. Продажа квартир. Положим, фирме, построившей небольшой жилой дом за 200 000$, требуется установить продажные цены на квартиры, исходя из их площади и потребительских качеств. Устанавливаются скидки на квартиры, находящиеся на первом и последнем (третьем) этаже, на большие квартиры (более 100 кв.м) и квартиры, выходящие на улицу. Все возможные скидки представлены во второй и третьей строках. Буквой “д” обозначены квартиры, выходящие во двор, а буквой “у” – на улицу. Для вычисления цены квартиры введем два технических столбца. В столбце Оплата со скидкой определяется процент стоимости квартир относительно номинальной. Из 100% отнимаются все возможные скидки.

E6=100%–ЕСЛИ(C6=1;$C$3)–ЕСЛИ(C6=4;$C$3)–ЕСЛИ(D6="у";$B$3)–ЕСЛИ(B6>100;$E$3).

A

B

C

D

E

F

G

H

I

J

1

ТАРИФЫ:

2

Телефон

отдельный

20р

3

спаренный

15р

4

Газ

без колонки

3р/ч

5

с колонкой

4р/ч

6

Коммун.

услуги

без колонки

3р/м

7

с колонкой

–10%

8

РАСЧЕТ КВАРТПЛАТЫ

9

Квар-

тира

Площадь

Человек

Удобства

Оплата

10

Э/плита

Газ.колонка

Телефон

(спар/отд)

Коммун.

услуги

Газ

Телефон

Всего

11

1

100м

7

+

о

270р

28р

20р

318р

12

2

60м

3

+

с

180р

15р

195р

13

3

70м

4

+

189р

16р

205р

14

4

80м

3

о

240р

20р

269р

15

5

90м

8

+

243р

32р

275р

16

ВСЕГО

400м

25

1

3

3

1122р

85р

55р

1262р

Рис.

5.3

4

В столбце Эквивалентная площадь вычисляется некоторая теоретическая площадь, соответствующая цене со скидкой, F6=B6*E6. Видим, что она равна 342м вместо 370. Отсюда можно определить цену одного квадратного метра с учетом скидок как частное от деления стоимости дома на эту площадь. Таким образом, продажная цена квартиры составит G6=$B$1/$F$10*F6, а стоимость одного квадратного метра в ней H6=G6/B6. Расчеты выполнены верно, поскольку суммарная стоимость всех квартир (G10) равна стоимости дома (B1).

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

Положим квартплата состоит из следующих элементов (см. область Тарифы на рисунке):

  • Оплата за пользование отдельным или спаренным телефоном (помечается буквами “о” или “с”).

  • Оплата за газоснабжение при наличии водонагревательной (помечается значком “+”) колонки и без нее. Рассчитывается на каждого проживающего в квартире человека и только в случае отсутствия электроплит. Считается, что при наличии электроплит, газ к дому не подведен.

  • Оплата за коммунальные услуги. Рассчитывается пропорционально площади квартиры. При наличии газовой колонки (помечается значком “+”) она снижается на 10% поскольку централизованное снабжение горячей водой тогда отсутствует (но возрастает сумма, выплат за газ).

Платежи определяются следующими формулами:

Коммунальные услуги

=площадь_квартиры * тариф_“без_колонки”*ЕСЛИ(колонка есть тариф снижается, иначе остается)

или для первой квартиры

G11=B11*$C$6*ЕСЛИ(E11="+";1+$C$7;1).

Оплата за газ

=ЕСЛИ (нет электроплиты, то 1, иначе 0)*число_человек*

ЕСЛИ (колонка есть, то тариф_“с колонкой”, иначе “без_колонки”)

H11=ЕСЛИ(D11<>"+";1;0)*C11*ЕСЛИ(E11="+";$C$5;$C$4).

Оплата за телефон

=ЕСЛИ (телефон отдельный, то обычный тариф, иначе ЕСЛИ(телефон спаренный, сниженный тариф, иначе 0))

I11=ЕСЛИ(F11="о";$C$2;ЕСЛИ(F11="с";$C$3;0)).

Далее подсчитывается число владельцев электроплит, газовых колонок D11=СЧЁТЕСЛИ(D11:D15;"+"), E11=СЧЁТЕСЛИ(E11:E15;"+") и телефонов F11=СЧЁТЗ(F11:F15).

Последнее рассчитывается как число непустых ячеек в диапазоне.

Суммы находятся очевидным образом J11=СУММ(G11:I11), B16= СУММ(B11:B15), C16=СУММ(C11:C15) и т.п.

Пример 5.35. Матрица решений. Иногда принятие решения при выполнении расчетов сопряжено с таким большим числом условий, которые сложно или даже невозможно разместить в клетке. В этом случае можно воспользоваться так называемой матрицей решений, где содержатся все возможные комбинации параметров, влияющих на результат. Положим, возможно выполнение ряда работ (у нас до пяти) в различной комбинации, за которые нужно заплатить определенную цену. Выполнение работы, например, помечается единицей, невыполнение – нулем. Для реализации возможности поиска в столбце Код формируется строка, содержащая все нули и единицы из клеток соответствующей строки матрицы решений,

G2=B2&C2&D2&E2&F2 или G2=СЦЕПИТЬ(B2;C2;D2;E2;F2).

Собственно данные находятся ниже – в списке заказов. Цена работы для первого заказа определяется функцией ВПР(), где в качестве искомой величины задается строка видов работ B7&C7&D7&E7&F7 в заказе, а поиск ведется в столбце Код матрицы решений

G7=ВПР(B7&C7&D7&E7&F7;G$2:H$4;2;0).

Для примера в заказе №3 указана также и недопустимая комбинация работ, повлекшая сообщение об ошибке (нет данных – #Н/Д). Это означает, что следует либо исправить ввод, либо увеличить таблицу решений, включив в нее такую комбинацию.

В таблице реализована матрица из пяти компонентов, однако ясно, что ничто не мешает нам с легкостью сделать ее как угодно большого размера.

A

B

C

D

E

F

G

H

1

Матрица

решений

Работа1

Работа2

Работа3

Работа4

Работа5

Код

Цена

2

0

1

1

1

0

01110

250

3

1

1

1

0

0

11100

1000

4

0

1

1

1

0

01310

2500

5

ОБРАБОТКА ЗАКАЗОВ

6

Заказ

Работа1

Работа2

Работа3

Работа4

Работа5

Цена

7

Заказ1

1

1

1

0

0

1000

8

Заказ2

0

1

1

1

0

250

9

Заказ3

1

0

1

0

0

#Н/Д

Рис. 5.35

A

B

C

D

E

F

G

H

1

Рабочие

дни

ТОРГОВЛЯ В КРЕДИТ

2

04.01

Заказ

Банковских дней

Дата

платежа

Сумма с

кредитом

3

05.01

номер

дата

сумма

4

06.01

60

04.01

1000

7

13.01

1070

5

07.01

67

13.01

5000

2

15.01

5100

6

08.01

124

14.01

700

23

нет даты

861

7

11.01

130

15.01

1000

0

15.01

1000

8

12.01

150

16.01

5

#Н/Д

0

9

13.01

200

17.01

#Н/Д

0

10

14.01

11

15.01

12

Рис.

5.36

Пример 5.36. Торговля в кредит. Определим дату и сумму, выплачиваемую покупателем за товар, в зависимости от срока последующей оплаты. Чем больше срок оплаты, тем больше эта сумма, поскольку, отпуская товар без предоплаты, продавец дает покупателю кредит. Положим стоимость кредита равна 1% от исходной цены за каждый день кредита. При торговых операциях сроки оплаты обычно указываются не в календарных, а в рабочих днях. Поскольку в общем случае рабочими могут быть и воскресные и субботние дни, использование функций РАБДЕНЬ() и ЧИСТРАБДНИ() оказывается неудобным или невозможным. В виду этого приходится создавать специальную таблицу, содержащую перечень таких дней. На рисунке она помещена в столбце А. Обслуживая клиента, оператор вводит номер, дату и сумму заказа, а также число рабочих дней (в данном случае банковских), через которое должна быть произведена оплата. Наша задача определить Дату платежа, отстоящую от Даты заказа на заданное число рабочих дней и сумму платежа (Сумму с кредитом), которые мы и сообщим покупателю. Для этого нужно найти Дату заказа в столбце А и прибавить к ней число Банковских дней. Функция ПОИСКПОЗ( D4;A:A;0)+F4 находит номер строки в столбце А, отстоящей от даты заказа на число рабочих дней (F4). Чтобы извлечь из этой строки ее содержимое, воспользуемся функцией

=ИНДЕКС(A:A;ПОИСКПОЗ(D4;A:A;0)+F4;1).

На этом можно было бы остановиться, но следует предусмотреть контроль наличия в столбце А даты оплаты. Например, при дате заказа 14 января и сроке оплаты через 23 рабочих дня, функция извлечет данные из строки, отстоящей от строки 9 на 23 позиции ниже, т.е. из 32-ой строки. Поскольку сейчас вся наша таблица заканчивается датой 15 января, ниже находятся только пустые строки. Чтобы избежать неверных результатов, усложним функцию извлечения, сформировав результат "нет даты", если найденное содержимое не больше нуля

G4=ЕСЛИ(ИНДЕКС(A:A;ПОИСКПОЗ(D4;A:A;0)+F4;1)>0;ИНДЕКС(A:A;ПОИСКПОЗ(D4;A:A;0)+F4;1);"нет даты").

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

И наконец, вычисляем сумму оплаты с учетом стоимости кредита H4=E4*(1+F4*1%).

К оформлению. Здесь имеет смысл проконтролировать принадлежность и даты заказа к множеству рабочих дней. Если игнорировать этот факт, Exel выдаст сообщение об ошибке #Н/Д (например, клетки G8 и G9). Это можно сделать с помощью условного форматирования для элементов столбца D с условием следующего вида (для D4)

 формула   =ЕНД(ПОИСКПОЗ(D4;$A:$A;0)) 

Далее мы можем установить, например, цветовую заливку таких клеток, что привлечет внимание пользователя.

Отсутствие даты заказа в столбце дат может явиться следствием одной из двух причин:

1. В таблицу рабочих дней еще не включена новая дата и ее нужно внести.

2. Дата заказа не является банковским днем (например, фирма торгует и в выходные дни).

Если возможен второй случай, следует предусмотреть адекватную реакцию таблицы – не учитывать день продажи при определении суммы кредита, а начинать отсчет банковских дней, начиная с ближайшего следующего такого дня. В этом случае нужно использовать функцию ПОИСКПОЗ() с параметром, определяющим не точный, а интервальный поиск.

A

B

C

D

E

1

Про

цесс

Темпе-

ратура

Дав-

ление

Время

ВЕС

2

№1

70

2

70

3

3

№2

82

7

15

2,7

4

№3

95

4

50

3

Р

ис. 5.37

а. Лист

Вес

Пример 5.37. Трехмерные справочные таблицы. Пусть, результат некоторого технологического процесса, например вес (в тоннах) выходного продукта, зависит от температуры, давления и времени выдержки, причем эти параметры не связаны функционально, а образуют трехмерную область нормативных данных. Наша задача заключается в том, чтобы построить формулы, извлекающие нужные данные из такой трехмерной таблицы.

П оложим, возможные температурные режимы представлены уровнями в 70, 80 и 90 градусов (начиная от 70), время выдержки – уровнями в 10, 40 и 60 минут (начиная от 60), давление – 1, 3 и 5 атмосфер (от 1). Поместим эти нормативные данные на отдельном листе с именем НОРМЫ. Представим их в виде трех идентичных по структуре таблиц для фиксированных значений температуры (строки 7-10, 11-14, 15-18 листа НОРМЫ). Для формирования функций поиска нам понадобится также специальная техническая таблица Температура, содержащая указания на нужные области. В строке 2 перечислены все значения температуры. В строке 3 – адреса областей, содержащих веса выходного продукта; в строке 4 – адреса областей, содержащих значения давлений; в 5 строке – адреса областей, содержащих время обработки продукта. Все ссылки вводятся непосредственно как текстовые данные и включают также имя листа (НОРМЫ), где они находятся.

Теперь перейдем к главному – построению формул извлечения ожидаемого веса продукта из нормативных таблиц в зависимости от температуры, давления, и времени обработки. Чтобы было понятно, как построена итоговая функция, проделаем это постепенно. Для клетки Е2 листа ВЕС можем записать

=ИНДЕКС(адрес блока данных ВЕС для температуры 70 град.;

номер строки в блоке ДАВЛЕНИЕ для 2 атм. и 70 град.;

номер столбца в блоке ВРЕМЯ для 70 мин. и 70 град.)

или =ИНДЕКС(нормы!C8:E10; ПОИСКПОЗ(C2;нормы!B8:B10;1); ПОИСКПОЗ(D2;нормы!C7:E7;1)).

A

B

C

D

E

1

Температура

2

70гр

80гр

90гр

3

вес

н ормы!C8:E10

нормы!C12:E14

нормы!C16:E18

4

давл.

н ормы!B8:B10

нормы!B12:B14

нормы!B16:B18

5

время

н ормы!C7:E7

6нормы!C11:E11нормы!C15:E15

7

70гр

Давл\Время

10мин

40мин

60мин

8

1атм

9

3атм

1,1т

1,5т

1,7т

10

5атм

1,8т

2,5т

11

80гр

Давл\Время

10мин

40мин

60мин

12

1атм

1,5т

4,5т

13

3атм

1,65т

2,25т

2,55т

14

5атм

2,7т

3,75т

15

90гр

Давл\Время

10мин

40мин

60мин

16

1атм

17

3атм

2,2т

3

Рис. 5.37в. Лист НОРМЫ

,4т

185атм3,6т4т5тВсе адреса здесь относятся к сечению нормативной таблицы, относя­ще­муся к режиму в 70 градусов, поскольку именно такова темпе­ратура в процессе 1.

Усложним формулу, заменив непосредственные адреса на ссылки, применяя функцию ДВССЫЛ()

=ИНДЕКС(ДВССЫЛ(нормы!B3); ПОИСКПОЗ(C2;ДВССЫЛ(нормы!B4);1); ПОИСКПОЗ(D2;ДВССЫЛ(нормы!B5);1)).

Здесь используется не сама таблица (для 70º), а ссылки на нее, находящиеся в верхней части листа НОРМЫ.

Пока еще функция не позволяет работать с другими температурными режимами. Чтобы это было возможным, мы заменим фиксированные адреса нормы!$B$3, $B$4 и $B$5 на адреса, найденные функцией ГПР()

E2= ИНДЕКС(ДВССЫЛ(ГПР(B2;нормы!$B$2:$D$5;2;1));

ПОИСКПОЗ(C2;ДВССЫЛ(ГПР(B2;нормы!$B$2:$D$5;3;1));1);

A

B

C

1

Зарплата по дням

2

Имя

Дата

Сумма

3

Петр

1.9 Ср

50

4

Иван

2.9 Чт

65

5

Петр

3.9 Пт

20

6

Петр

4.9 Сб

40

7

Иван

5.9 Вс

35

8

Олег

6.9 Пн

40

9

Петр

7.9 Вт

70

10

Всего

7

320

Рис. 5.38а. Лист ЗАРП

ПОИСПОЗ(D2;ДВССЫЛ(ГПР(B2;нормы!$B$2:$D$5;4;1));1)).

Именно это выражение и использовано в таблице на листе ВЕС. Оно может с сохранением функциональности беспрепятственно копироваться во все другие ее строки.

К оформлению. 1. Единицы измерения атм, мин, т и гр при параметрах процесса, конечно, являются не элементами данных, а пользовательскими форматами. 2. Если справочные таблицы велики, их удобнее располагать каждую на отдельном листе.

Когда справочных таблиц немного, то можно, используя функцию ЕСЛИ( ) сразу записать необходимую формулу без формирования текстовых ссылок. В нашем случае можно создать листы содержащие данные для температурных режимов от 70 градусов, от 80-ти и от 90 (рис. 6.38г). Дадим им имена г70, г80 и г90 соответственно. Лист НОРМЫ более не нужен. Выражение для извлечения необходимых данных строится следующим образом

вес=ЕСЛИ(температура < 80, данные извлекаются из листа г70;

ЕСЛИ(температура < 90, данные извлекаются из листа г80;

иначе данные извлекаются из листа г90)).

Или в виде формулы

E2=ЕСЛИ(B2<80;ИНДЕКС(г70!$A$2:$D$5; ПОИСКПОЗ(C2;г70!$A$2:$A$5;1);ПОИСКПОЗ(D2;г70!$A$2:$D$2;1));

ЕСЛИ(B2<90;ИНДЕКС(г80!$A$2:$D$5; ПОИСКПОЗ(C2;г80!$A$2:$A$5;1);ПОИСКПОЗ(D2;г80!$A$2:$D$2;1));

ИНДЕКС(г90!$A$2:$D$5; ПОИСКПОЗ(C2;г90!$A$2:$A$5;1);ПОИСКПОЗ(D2;г90!$A$2:$D$2;1)))).

Пример 5.38. Формирование обобщающих сводок. Положим, на листе ЗАРП имеется таблица, отражающая ежедневные заработки рабочих. Задача состоит в том, чтобы на листе СВОДКА сформировать обобщенные данные, где каждый работник представлен только одной строкой, содержащей число отработанных дней (всего и в выходные) и сумму зарплаты (также всего и в выходные). Здесь для этой цели используются формулы счёта и суммирования с условием, а в более сложных случаях – функции обработки массивов. Рассмотрим их на примере расчетов для Петра. Подсчитаем количество отработанных им дней

Всего дней отработано Петром = подсчет числа ячеек в А2:А10, где внесен Петр

A

B

C

D

E

1

Сводка за месяц

2

Имя

Рабочих дней

Зарплата

3

Всего

Выходных

Всего

В вых.

4

Петр

4

1

180

40

5

Иван

2

1

100

35

6

Олег

1

0

40

0

7

Сергей

0

0

0

0

8

Итого

7

2

320

75

Рис.5.3

8.б СВОДК

А

или B4=СЧЁТЕСЛИ(зарп!A$2:A$10;A4).

Здесь обратим внимание на то, что в область подсчета включен заголовок (клетка А2) и итоговая строка Всего (клетка А10). Это позволит нам не беспокоиться об изменении размеров таблицы на листе ЗАРП – все новые строки, вставленные между строкой 2 и 10, автоматически попадут в область подсчета сводки.

Для подсчета числа рабочих дней, приходящихся на выходные, нам придется воспользоваться функцией для массивов, поскольку здесь анализируются одновременно два условия – имя работника (Петр) и номер дня недели (больше 5)

Дней в выходные отработано Петром=

подсчет ячеек в А2:А10, где внесен Петр И день=выходной

или C4 {=СЧЁТ(ЕСЛИ((зарп!A$2:A$10=A4)*(ДЕНЬНЕД(зарп!B$2:B$10;2)>5);1))}.

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

D4=СУММЕСЛИ(зарп!A$2:A$10;A4;зарп!C$2:C$10),

E4 {=СУММ(ЕСЛИ((зарп!A$2:A$10=A4)*(ДЕНЬНЕД(зарп!B$2:B$10;2)>5);зарп!C$2:C$10;0))}.

Вертикальные суммы в обоих листах должны строиться таким образом, чтобы вставки/удаления строк не требовали изменения формул. Ранее мы подробно (в начале главы 6) уже обсуждали этот вопрос. Еще один подход применен ниже для листа СВОДКА

В8=СУММЕСЛИ($A$3:$A$8; "<>Итого"; $B$3:$B$8), С8=СУММЕСЛИ($A$3:$A$8; "<>Итого"; $C$3:$C$8),

D8=СУММЕСЛИ($A$3:$A$8; "<>Итого"; $D$3:$D$8), E8=СУММЕСЛИ($A$3:$A$8; "<>Итого"; $E$3:$E$8).

Здесь в область обработки включена и сама строка Итого (это обеспечивает возможность вставки новых строк без необходимости корректировки итогового выражения), однако в суммировании сама она не участвует – складывается только содержимое клеток, для которых в столбце А нет слова Итого (условие “<>Итого”).

Пример 5.39. Обобщение данных о выручке. Рассмотрим другую похожую задачу. Пусть на листе ПРОДАЖИ последовательно фиксируются факты продаж недвижимости (в тысячах рублей) агентами риэлторской фирмы, а в листе ИТОГИ подсчитываются суммы продаж по месяцам для каждого из работников.

Так, продажи Петра в январе подсчитываются формулой

B3 {=СУММ(ЕСЛИ((продажи!$A$2:$A$9=$A3)*(МЕСЯЦ(продажи!$B$2:$B$9)=B$2);продажи!$C$2:$C$9))}.

Остальные клетки листа заполняются путем копирования В3 в область итогов по месяцам B3:E6, например,

C4 {=СУММ(ЕСЛИ((продажи!$A$2:$A$9=$A4)*(МЕСЯЦ(продажи!$B$2:$B$9)=C$2);продажи!$C$2:$C$9))}.

Итоговые функции выглядят следующим образом:

F3=СУММЕСЛИ($A$2:$F$2;">0";$A3:F3), B7=СУММ(ИНДЕКС(B:B;3):ИНДЕКС(B:B;СТРОКА()–1)).

В F3 условие ">0" обеспечивает суммирование только тех клеток, которые в заголовке имеют цифры (т.е. номера месяцев). Клетки, содержащие текстовые данные (Месяц и ) интерпретируются Excel как нули. В B7 блок суммирования ограничен функциями ИНДЕКС(), которые гарантируют правильный диапазон суммирования при включении в таблицу новых строк. В данном случае в качестве начального адреса суммирования нельзя было использовать клетку B2, поскольку в ней находится число (номер месяца), которое, естественно, не должно суммироваться. Здесь применяется функция ИНДЕКС(B:B;3), ссылающаяся на клетку B3. Правильность вычислений подтверждает совпадение общих сумм продаж в листах Продажи и Итоги.

A

B

C

A

B

C

D

E

F

1

Продажи

1

Итоги по месяцам

2

Продавец

Дата



2

Месяц:

1

2

3

4



3

Петр

12.янв

300

3

Петр

300

0

200

0

500

4

Иван

04.фев

400

4

Иван

0

400

250

0

650

5

Олег

20.фев

300

5

Олег

0

300

450

0

750

6

Иван

03.мар

250

6

Сергей

0

0

0

0

0

7

Олег

12.мар

450

7

Итого

300

700

900

0

1900

8

Петр

30.мар

200

9

Всего

6 дней

1900

Рис. 5.39б. Лист ИТОГИ

Рис. 5.39а. Лист ПРОДАЖИ

Пример 5.40. Текущий анализ продаж и обобщение данных. Положим, при оптовой торговле менеджер вводит имя фирмы-поку­па­теля, дату продажи и сумму покупки (Текущий платеж). Сделаем так, чтобы Excel сам подставлял номер сделки по порядку (столбец А), а также для каждой новой строки отображались: общее число про­даж, осуществленных с данной организацией; нарастающая сумма продаж (нужно для вычисления скидок). Кроме того, в столбце Лидер продаж фиксируется имя фирмы, сделавшей в общей сложности закупки на максимальную сумму, а в столбце H – дата последней сделки с этой фирмой. Рабочие формулы приведены ниже

A3=СЧЁТ(A$2:A2)+1, E3=СЧЁТЕСЛИ(B$3:B3;B3), F3=СУММЕСЛИ(B$3:B3;B3;D$3:D3),

G3=ЕСЛИ(МАКС(F$3:F3)=F3;B3;), H3 {=МАКС(ЕСЛИ(B$2:B2=B3;C$2:C2))}.

Формула (А3) для автонумерации строк, записанная в таком виде, будет работать только при внесении новых строк в конец таблицы. При дополнении таблицы в любом другом месте перенумерация нижележащих строк осуществляться не будет. Чтобы это стало возможным, ее придется усложнить A3=СЧЁТ(A$2:ИНДЕКС(A:A;СТРОКА( )–1))+1.

A

B

C

D

E

F

G

H

1

Фирма

Даты

продаж

Текущий

платеж

Нарастающий итог

Лидер

продаж

Преды-

дущая

продажа

2

Число

продаж

Сумма

продаж

3

1

Весна

01.май

20

1

20

Весна

4

2

Старт

02.май

10

1

10

5

3

Старт

20.май

50

2

60

Старт

02.май

6

4

Весна

02.май

100

2

120

Весна

01.май

7

5

Спорт

18.май

30

1

30

8

6

Старт

28.май

50

3

110

20.май

9

7

Весна

03.июнь

60

3

180

Весна

02.май

10

8

Весна

03.июнь

20

4

200

Весна

0

Рис. 5.40

3.июнь

11

9

Спорт

06.июнь

10

2

40

18.май

A

B

C

D

E

F

G

H

I

J

1

Расписание поездов

Заявки пассажиров

2

Время

отправлен.

Номер

поезда

Город

назначения

Вид

Город

назначения

Вид

Время отправления

Номер поезда

3

желаемое

ближайшее

возможное

4

6:05

1

Рязань

э

Рязань

э

9:36

20:30

34

5

9:00

2

Киев

п

Курск

п

7:12

11:05

12

6

11:05

12

Курск

п

Киев

п

12:00

15:40

6

7

15:40

6

Киев

п

8

20:30

34

Рязань

э

9

21:00

5

Курск

э

10

23:30

9

Рязань

п

Рис. 5.

41

Пример 5.41. Продажа железнодорожных билетов. В кассе вокзала требуется подобрать пассажиру нужное время отправления (I4) и номер поезда (J4), в заданный город назначения (F4), на желаемом виде поезда (G4). Последний может быть почтовым (п) или экспрессом (э). Пассажир указывает удобное для него время отправления (H4), начиная с которого можно подбирать поезда. Все требования клиента фиксируются в столбцах F:H, а рас­писание – в столбцах А:D. Таким образом, нам следует выделить нужное подмножество поездов из которых затем выбрать номер поезда с самым ближним временем отправления, т.е. как бы сформировать фильтр (не прибегая, однако к прямой фильтрации данных).

Последовательно построим необходи­мые выражения. Сначала вычислим ближайшее подходящее время отправления. Для этого сформируем подмножество выбора поездов для первой заявки на билеты (в Рязань). Это

Город_назначения="Рязань" И Вид_поезда="э" И Ближайшее_время_отправления  Желаемое_время_отправления.

Поскольку при работе с массивами нельзя использовать логические функции И( ), строим нужное выражение применяя вложенные функции ЕСЛИ()

=ЕСЛИ(город_назначения="Рязань"; ЕСЛИ(вид_поезда="э";ЕСЛИ(время_отправления  время_желаемое; …)))

или =ЕСЛИ(C4:C10=F4;ЕСЛИ(D4:D10=G4;ЕСЛИ(A4:A10>=H4; …))).

Теперь находим ближайшее возможное время отхода поезда, применяя функцию МИН() к столбцу А расписания, содержащему время отправления (блок A4:A10) поездов

I4 {=МИН(ЕСЛИ(C$4:C$10=F4;ЕСЛИ(D$4:D$10=G4;ЕСЛИ(A$4:A$10>=H4;A$4:A$10))))}.

Или короче, если использовать операцию умножения

I4 {=МИН(ЕСЛИ((C$4:C$10=F4)*(D$4:D$10=G4)*(A$4:A$10>=H4);A$4:A$10))}.

Имея время отправления (I4), далее легко найти номер поезда J4=ВПР(I4;A$4:B$10;2;1).

Если время отправления не нужно, в I4 можно сразу показать номер поезда

I4 {=МИН(ЕСЛИ((C$4:C$10=F4)*(D$4:D$10=G4)*(A$4:A$10>=H4);B$4:B$10))}.

Кроме рассмотренных функций и приемов обобщения данных, Excel располагает и специальными мощными инструментами для этих целей (инструменты Фильтрация, Итоги, Консолидация, Сводная таблица).

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