
- •Попов а.А.
- •Москва – 2004
- •Тираж: 200. Изд. № Заказ № введение
- •1. Интерфейс системы
- •1.1. Элементы интерфейса ос Windows
- •Справка
- •1.2. Интерфейс среды Excel
- •Просмотр списка имен Ввод Поле ввода
- •1.3. Средства управления Excel
- •Прочие клавиши
- •1.4. Организация данных в Excel
- •2. Элементарные операции с данными
- •2.1. Манипулирование данными
- •2.1.6. Вставка элементов таблицы
- •Буксировать мышью влево
- •2.1.8. Операции с рабочими листами
- •2.2. Виды адресации
- •2.4. Создание формул
- •2.5. Задачи для самостоятельного решения Контрольные вопросы
- •Упражнения
- •2. Перемещение и копирование данных.
- •2 ( ; Перейти в е5; ). .1. Переместить содержимое блока в2:в3 в е5:е6.
- •2 ( ; Перейти в e5; ). .2. Скопировать содержимое блока в2:в3 в е5:е6.
- •3.1. Простое автозаполнение (копирование без изменения данных).
- •3.2. Автозаполнение из списков.
- •3.3. Формирование арифметических прогрессий.
- •5. Манипулирование строками/столбцами.
- •5.2. Управление шириной строк/столбцов.
- •7 . Построение формул.
- •3. Оформление данных
- •3 .1. Выравнивание данных
- •3.2. Управление шрифтами
- •3.3. Форматирование чисел
- •Положительное; Отрицательное; Нулевое; Текстовое
- •[Черный]; [Зеленый]; [Голубой]; [Красный]
- •3.4. Мастер условного форматирования
- •3.5. Контроль ввода
- •3.6. Задачи для самостоятельного решения Контрольные вопросы
- •Упражнения
- •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. Задачи для самостоятельного решения
- •5. Примеры практических задач
- •"Остаток:"???"дн"; [красный]"доплата"???"дн"; [синий]"съезд"
- •6. Задачи для самостоятельного решения
- •7. Тесты к дисциплине
- •Оглавление
- •Курс компьютерной подготовки
"Остаток:"???"дн"; [красный]"доплата"???"дн"; [синий]"съезд"
позволяющий предъявить данные в удобной форме. Для лиц, у которых сегодня закончился оплаченный срок, выводится слово СЪЕЗД синего цвета. Для тех, у кого имеется задолженность, выводится слово доплата и число дней, за которые нужно доплатить, красного цвета. В нормальном случае выводится число оставшихся оплаченных дней проживания.
В
Рис.
5.31а
Пример 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 |
2д |
1.Май |
8ч |
6.Май |
6ч |
|
|
3 |
|
14ч |
|
|
|
|
|
|
|
4 |
Иван |
6 |
3д |
2.Май |
5ч |
7.Май |
12ч |
10.Май |
8ч |
5 |
|
25ч |
|
|
|
|
|
|
|
6 |
Олег |
2 |
1д |
4.Апр |
20ч |
|
|
|
|
7 |
|
20ч |
|
|
|
|
|
|
|
8 |
Всего |
6д |
|
|
|
|
|
|
|
9 |
59ч |
|
|
|
|
Рис. 5. |
31б |
Функция отбрасывания понадобилась для того, чтобы получить правильный результат, если дата была введена, а число часов – еще нет. Сложнее сформировать сумму часов. В качестве критерия суммирования положим, что значение слагаемого не должно превышать самой длинной рабочей смены, например 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 |
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 |
|
|
|
|
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р |
0р |
15р |
195р |
13 |
3 |
70м |
4 |
|
+ |
|
189р |
16р |
0р |
205р |
14 |
4 |
80м |
3 |
|
|
о |
240р |
9р |
20р |
269р |
15 |
5 |
90м |
8 |
|
+ |
|
243р |
32р |
0р |
275р |
16 |
ВСЕГО |
400м |
25 |
1 |
3 |
3 |
1122р |
85р |
55р |
1262р |
|
|
|
Рис. |
5.3 |
4 |
|
|
|
|
|
Пример 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 |
|
|
=ИНДЕКС(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 |
а. Лист |
Вес |
|
П
оложим,
возможные температурные режимы
представлены уровнями в 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 |
вес |
н |
нормы!C12:E14 |
нормы!C16:E18 |
|
4 |
давл. |
н |
нормы!B12:B14 |
нормы!B16:B18 |
|
5 |
время |
н |
|||
6нормы!C11:E11нормы!C15:E15 |
|
|
|
|
|
7 |
70гр |
Давл\Время |
10мин |
40мин |
60мин |
8 |
|
1атм |
1т |
2т |
3т |
9 |
|
3атм |
1,1т |
1,5т |
1,7т |
10 |
|
5атм |
1,8т |
2т |
2,5т |
11 |
80гр |
Давл\Время |
10мин |
40мин |
60мин |
12 |
|
1атм |
1,5т |
3т |
4,5т |
13 |
|
3атм |
1,65т |
2,25т |
2,55т |
14 |
|
5атм |
2,7т |
3т |
3,75т |
15 |
90гр |
Давл\Время |
10мин |
40мин |
60мин |
16 |
|
1атм |
2т |
4т |
6т |
17 |
|
3атм |
2,2т |
3т |
3
Рис. 5.37в. Лист
НОРМЫ |
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а. Лист ЗАРП
Именно это выражение и использовано в таблице на листе ВЕС. Оно может с сохранением функциональности беспрепятственно копироваться во все другие ее строки.
К оформлению. 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.б СВОДК |
А |
|
Здесь обратим внимание на то, что в область подсчета включен заголовок (клетка А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а. Лист ПРОДАЖИ |
|
|
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 |
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 |
Последовательно построим необходимые выражения. Сначала вычислим ближайшее подходящее время отправления. Для этого сформируем подмножество выбора поездов для первой заявки на билеты (в Рязань). Это
Город_назначения="Рязань" И Вид_поезда="э" И Ближайшее_время_отправления Желаемое_время_отправления.
Поскольку при работе с массивами нельзя использовать логические функции И( ), строим нужное выражение применяя вложенные функции ЕСЛИ()
=ЕСЛИ(город_назначения="Рязань"; ЕСЛИ(вид_поезда="э";ЕСЛИ(время_отправления время_желаемое; …)))
или =ЕСЛИ(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 располагает и специальными мощными инструментами для этих целей (инструменты Фильтрация, Итоги, Консолидация, Сводная таблица).